HEVC熵编码原理解读之transform_tree(一)

HEVC熵编码原理解读之transform_tree(一)

在HEVC中,语法元素按照协议进行编码。本片文章主要介绍HEVC标准的7.3.8.8节transform_tree函数,解释变换单元语法元素中是如何编码的。
图一是这部分的代码。该部分功能是控制残差编码模块transform_unit的开启和编码语法元素:split_transform_flag、cbf_cb、cbf_cb、cbf_luma


图一

transform_tree函数的输入分别是cu块的左上角坐标(x0,y0)、tu的左上角坐标(xBase,yBase)、tu块的log2大小 log2TrafoSize、tu的相对cu的深度trafoDepth和tu块的索引blkIdx。
transform_tree函数被coding_unit函数调用,所以它最开始的输入是由coding_unit函数给的。调用的格式如下:

transform_tree( x0, y0, x0, y0, log2CbSize, 0, 0 );

第一次进入该模块时,log2CbSize对应log2TrafoSize,0对应trafoDepth。因此,我们知道tu所在cu的大小。并且由于trafoDepth等于0,我们可以知道trafoDepth对应的是cu相对tu的深度,而非绝对深度。

1、split_transform_flag:
语法元素split_transform_flag表示tu块是否继续划分tu。该语法元素的编码条件是:
log2TrafoSize <= MaxTbLog2SizeY——条件1
log2TrafoSize > MinTbLog2SizeY——条件2
trafoDepth < MaxTrafoDepth ——条件3
!( IntraSplitFlag && ( trafoDepth = = 0 ) ) ——条件4
只有同时满足条件1~条件4,才满足split_transform_flag的编码条件。
条件1是指6464的cu块可以跳过编码split_transform_flag。因为tu块的大小小于等于32,所以split_transform_flag一定为1。
条件2是指4
4的tu块可以跳过编码split_transform_flag。因为tu块的大小最小为4,所以split_transform_flag一定为0。
条件2是指tu深度不能超过最大tu深度。
条件3是指tu深度等于0并且帧内分割方式等于1的时候,不编码split_transform_flag。

2、cbf_cb和cbf_cr:
首先,ChromaArrayType 是指颜色的采样方式,包括以下三种采样方式:
4:2:0 (ChromaArrayType = 1)
4:2:2 (ChromaArrayType = 2)
4:4:4 ( ChromaArrayType = 3)

语法元素cbf_cb和cbf_cr表示tu块的两个色度块的cbf是否为0,当为0时,表示该cu的色度残差全为0,反之,则不全为0。该语法元素的编码条件我们根据颜色的采样方式来定:
颜色的采样方式为4:4:4时,即 ChromaArrayType = 3,当tu的相对深度为0或者上一层cbf_cb/cbf_cr等于1时,编码cbf_cb/cbf_cr。
颜色的采样方式为4:2:0时,即 ChromaArrayType = 1,当log2TrafoSize大于2,并且tu的相对深度为0或者上一层cbf_cb/cbf_cr等于1时,编码cbf_cb/cbf_cr。
颜色的采样方式为4:2:2时,即 ChromaArrayType = 2,当log2TrafoSize大于2,并且tu的相对深度为0或者上一层cbf_cb等于1时,编码cbf_cb/cbf_cr。进一步地,又当前tu的split_transform_flag等于0或者当前tu的大小为8。需再编一次cbf_cb/cbf_cr。

3、Transform tree的遍历:
紧接着如果该tu需要继续划分tu,即split_transform_flag等于1,则继续遍历4次该函数。按照图2的顺序。

01
23

表一

4、cbf_luma:
若该tu不继续划分,即split_transform_flag等于0,则编码cbf_luma,表示亮度分量的残差是否全为零。当cbf_luma==0时,表示全为0,反之,则不全为零。该语法元素的编码条件为:
cu的预测方式为帧内预测;——条件1
tu的相对深度不为0;——条件2
cbf_cbf等于1;——条件3
cbf_cr等于1;——条件4
当颜色的采样方式为4:2:2时,上一层的cb活cr的cbf为1;——条件5
只要满足以上任何一条件都满足编码cbf_luma的条件。

5、transform_unit:
最后,开启transform_unit的编码,进入残差编码,其输入的格式如下:

 transform_unit( x0, y0, xBase, yBase, log2TrafoSize, trafoDepth, blkIdx );
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HEVC标准最后一版(2013年1月23日发布)! 历史: 早在2004年,ITU-T视频编码专家组(VCEG)开始研究新技术以便创建一个新的视频压缩标准。在2004年10月,H.264/ AVC小组对潜在的各种技术进行了调查。2005年1月VCEG的会议上,VCEG开始指定某些主题为“关键技术”作进一步研究。2005年成立软件代码库称为Key Technical Areas (KTA)用来评估这些新的“关键技术。KTA的软件是在联合模型(JM)基础上由MPEG和VCEG的视频组联合开发的,项目名称暂定为H.265和H.NGVC(Next-generation Video Coding),此项目在2010年最终演化为由VCEG和MPEG合资项目也叫做HEVC(High efficiency video coding)。 按照NGVC的初步要求,在维持视觉质量相同的情况下,比特率较H.264/MPEG-4 AVC的高中档(high profile),计算复杂度维持在比特率较H.264/MPEG-4 AVC的高中档的1/2至3倍之间。 “H.265” 只是作为 “高性能视频编码HEVC)”一个昵称。2009年7月,实验结果表明比特率相较于H.264/AVC High Profile平均降低20%左右,这些结果促使MPEG与VCEG合作发起的新的标准化工作。 2010年1月,VCEG和MPEG开始发起视频压缩技术正式提案。相关技术由视频编码联合组(Joint Collaborative Team on Video Coding (JCT-VC))审议和评估,其合作小组第一次会议于2010年4月召开大会,一共有27个完整的提案。评价结果表明,一些提案在许多测试用例可以达到只用一半的比特率并维持H.264/AVC相同的视觉质量。在这次会议上,联合项目名改称为高效率的视频编码HEVC),并且JCT-VC小组把相关技术集成到一个的软件代码库(HM[2])和标准文本草案规范,并进行进一步实验,以评估各项功能。[1] 新技术特点: HEVC草案设计,包括各种编码技术: 树状结构的预测和残差块分割 扩展预测块大小(最多为64×64) 大块变换(最大余弦变换块为32×32) 正方形和非正方形的变换块 整数逆变换 基于方向的帧内预测与预测类型 基于模式依赖正弦/余弦变换 自适应运动矢量预测选择机制 基于空间的运动矢量预测 多帧运动补偿预测 高精度运动补偿插值 去块滤波器 自适应环路滤波器(ALF) 上下文自适应二进制算术编码(CABAC) 进度表 HEVC标准时间表如下: 2012年2月:委员会草案(完整的标准草案) 2012年7月:国际标准草案 2013年1月:国际标准最终草案(准备被批准为标准) 2013年1月26日,其正式成为国际标准。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值