视频中的率失真优化

转载自:http://blog.csdn.net/nb_vol_1/article/details/53288937
一、率失真优化的目标就是:
1、在一定的码率(码率也表现为数据压缩的程度,码率越低,数据压缩的越厉害)限制下,减少视频的失真(减少失真就会提高视频的主观质量,看的人就会喜欢o(*≧▽≦)ツ)!
2、在允许一定的失真下,把视频压缩到最小!

二、编码器的率失真优化的工作主要是按照某种策略选取最优的编码参数,以实现最优的编码性能

三、率失真函数RD 是在假定信源在给定的情况下,在用户可以容忍的失真度内再现数据消息所必需获得的最小平均互信信息,直白一点说,就是在允许的失真内,数据可以压缩的极限!我们对数据的压缩不能超过这个极限,否则,数据在解码端就不能再现了!因此我们的工作就是,在不超过这个极限的前提下,尽量使数据压缩得更小!

四、在多种候选编码参数中选择最优的编码参数!
1、视频失真的度量:ssd、sad、mse、psnr都可以度量失真度!
2、使用一组特定的编码参数对视频进行编码的时候,我们可以获得该编码参数的条件下的码率和失真,即率失真性能(R,D)
3、遍历所有可行的编码参数组合就可以得到所有的(R,D),在满足一定的码率限制(R)的情况下,找到是的失真(D)最小的一组参数!即最优的参数
4、拉格朗日方法就是率失真优化中最常用的优化工具
5、根据目标码率,先确定量化参数QP,然后根据QP确定出拉格朗日参数λ!然后根据λ和一组编码参数计算失真

五、率失真优化在编码器中不同层次(CTU级、CU级、PU级、TU级等)的运用。附:CTU可以划分成为CU、CU在预测的时候被划分成为PU、CU在变换量化的时候被划分成为TU
1、在CTU级的应用。在总比特数R受限的情况下选择一个CU(CU从8x8到64x64)的划分模式,使得一个CTU的总失真D最小。
2、在CU级的应用。在总比特数R受限的情况下,适当的选择选择PU划分模式和TU(TU从4x4到32x32)划分模式,使得一个CU的总失真D最小。
3、在PU级的应用。对于帧内预测,就是从35中帧内模式中选出最优的一种,使得PU的失真D最小;对于帧间预测,选出最优的运动模式(包括运动矢量、参考图像、预测权值等)使得PU的失真D最小
4、在TU级的应用。在最优的PU的模式下,选取最优的TU模式。

六、HM实际的优化方式
1、对于CTU。
(1)遍历所有的CU划分模式,确定最优的CU划分模式
(2)对于确定的CU,遍历所有的PU模式和TU模式的组合,确定最优的PU模式和TU模式
(3)对于其中的每一个PU,遍历所有的预测模式,选取最优的预测模式
2、对于变换。采用Hadamard变换代替实际的DCT/SDT变换。
3、其他快速的策略
(1)提前终止策略(Early_CU)
如果当前CU的最优编码模式是MODE_SKIP模式,那么终止该CU后续四叉树划分和模式判决
(2)早期跳出模式(Early_Skip)
如果CU的PU划分模式是PART_2Nx2N,预测模式是MODE_INTER,运动矢量差MVD是(0,0),且预测残差不包含非零变换系数(就是变换系数全是0),就判定当前模式是最优模式,跳过剩余的模式,直接进行下一步的四叉树分割及子CU模式判决。
(3)快速CBF策略(CBF_Fast)
如果CU的预测模式是MODE_INTER,其对应的预测残差不包含非零的变换系数,就跳过该CU的其余候选模式,当前模式为最优模式,且直接进行下一步的四叉树分割
(4)缩减AMP模式
依据两个参数来判断是否缩减当前AMP模式。具体是利用在进行AMP模式判决当前的最优分割模式,以及父亲节点CU内采用的分割模式和预测模式,来确定候选编码中可使用的AMP模式。

七、率失真优化全流程
1、分层递归遍历所有的CU划分模式,选取最优的CU划分模式,这个过程称为CU划分模式判别
2、对于其中的每一个CU,遍历所有的PU模式,选取最优的PU模式,并在此基础上选择最优的TU模式
3、对于其中的每一个PU,遍历所有的预测模式,选取最优的预测模式,这个过程称为预测模式判别
(1)帧内预测模式。
①遍历所有的预测模式,得到每种模式下的残差信号,再对残差信号进行Hadamard变换计算SATD值
②利用SATD值计算每种预测模式的率失真代价,选取率失真代价最小的几种模式(与PU大小相关)为预测模式集
③将已编码相邻块的预测模式补充到预测模式集中
④遍历模式集合中的所有模式,并对残差信号进行正常编码(熵编码),计算率失真代价
⑤选取最优的预测模式作为该PU的最优模式
⑥当亮度块的模式确定之后,把该模式以及DC、planar、水平方向模式、垂直方向模式作为色度块的候选模式,选取最优的模式即可
(2)帧间预测模式。
HEVC采用了Merge和AMVP技术,更加高效地表示帧间预测参数,但是这两种方式有比较大的区别,因此帧间预测可以分成Merge帧间预测模式和非Merge帧间预测模式(采用AMVP技术),分别选取最优的Merge帧间预测模式和非Merge帧间预测模式,然后从中选取最优的模式。
对于Merge帧间预测模式,遍历所有的候选模式,计算率失真代价,选择率失真代价最小的模式为最优模式。当采用merge帧间预测模式I按摩,且预测残差信号的编码比特数为零时,只需要编码skip标识和merge索引两个语法元素,此时该模式称为MODE_SKIP模式
对于非Merge帧间预测模式(采用AMVP技术)
①根据AMVP技术确定MVP列表,计算每个MVP的率失真代价,得到最优的MVP
②以最优MVP为起始点,进行整像素运动预测,得到最优的整像素运动矢量
③以整像素运动矢量为中心,进行半像素搜索,从周围的8个点确定最优的半像素精度运动矢量
④以半像素精度矢量为中心,进行1/4像素精度的运动搜索,确定最优的1/4像素精度运动矢量
(3)PU模式判别
①计算2Nx2N模式的率失真代价,将其作为最优代价,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将2Nx2N作为最优的PU模式
②如果CU的深度已经取得最大值,且inter_4x4_enabled_flag是1,那么执行③,否则执行④
③计算NxN模式的率失真,更新最优代价和模式,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将NxN作为最优的PU模式
④计算Nx2N模式的率失真代价,更新最优代价和模式,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将Nx2N作为最优的PU模式
⑤计算2NxN模式的率失真代价,更新最优代价和模式,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将2NxN作为最优的PU模式
⑥如果TestAMP_Hor为1,当前CU执行水平方向上的AMP模式,否则执行本步骤。计算2NxnU模式的率失真代价,更新最优代价和模式,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将2NxnU作为最优的PU模式;否则计算2NxnD模式的率失真代价,更新最优的代价和模式,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将2NnD作为最优的PU模式
⑦如果TestAMP_Ver为1,当前CU执行垂直方向上的AMP模式,否则执行本步骤。计算nLx2N模式的率失真代价,更新最优模式和代价,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将nLx2N作为最优的PU模式;否则计算nRx2N模式的率失真代价,更新最优模式和代价,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将nRx2N作为最优的PU模式
⑧注意上面的都是帧间的模式,现在需要计算帧内2Nx2N模式的率失真代价,更新最优模式和代价
⑨如果当前CU深度为最大值,计算帧内NxN模式的率失真代价,更新最优模式和代价
⑩如果当前CU大于或等于PCM模式所允许的最小单元,并且代价大于PCM模式,那么更新最优模式和代价
⑪结束搜索,得到最优的PU模式。注意对于每一种PU模式,都要夯实不同的TU划分,选取最优的TU模式,因此最优的PU模式包含了最优的TU模式
(4)CU划分模式判决
①把CTU作为CU,计算率失真代价(最优PU模式时),此时应包含CU分割标志(split_flag)的编码比特数
②对CU进行四叉树划分,计算每个子CU的最小率失真代价,并对所有子CU的率失真代价求和,得到该CU的率失真代价
③为每个子CU作为CU重复②
④重复③直到编码的最大深度
⑤从最大的编码深度,比较4个子CU与CU的率失真代价,一次选出最优的划分方式。
⑥碎语每个CU,如果其帧间2Nx2N模式为MODE_SKIP,则满足Early_SKIP条件,直接结束该CU的进一步划分
4、结束!
最后放上一个常用的率失真优化模型
这里写图片描述
J就是率失真的代价

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章