帧内编码的模式选择
来源:互联网 发布:无线网络优化设备现状 编辑:程序博客网 时间:2024/06/07 07:22
H.264中4X4亮度预测依据预测方向的不同共有9种预测模式。在亮度4x4帧内预测时,其中DC预测(模式2)、垂直预测(模式0)和水平预测(模式2总是被认为有效的,即使在编码块上面像素或左边像素不可用的情况下(这时候上面像素或左边像素的值就使用128这个值来代替),而其它模式仅当所有需要利用的预测象素点都可用的情况下才可以使用(如果E, F, G,H不可用,可以用D的值来代替)。这儿所说的像素点可用(available)是指此像素所在的子块存在并且与当前编码的子块属于同一个slice。
模式选择
在H.264帧内编码中,每个宏块亮度信号都要完成9种4x4预测模式和4种16x16预测模式,然后通过预测模式选择,得出一种最佳预测模式使得编码后的图像在码流和图像质量两者权衡后的获得一个最佳。H.264中模式选择方法有两种:
1、使用率失真优化(RDO)模式选择。
使用这种RDO方式的模式选择过程如下:
1)在给定最后解码的帧及宏块的量化因子QP后,计算拉格朗日因子:
2)在帧内亮度4x4预测的9种预测模式中,通过计算下面的函数使得其值最小,从中选择最佳的帧内亮度4x4预测模式。
J(s, c, m I QP, Xm )=SSD(s, c, m I QP)+X*R(s, c, m I QP) (2)
式中QP是宏块的量化参数,X是(1)中的拉格朗日因子,SSD是原始的亮度块s与预测模式为m的重建块的平方差的和,R表示与选择模式m相关联的比特数,包括模式编帧内模式及DCT系数所需的比特数。
3)在帧内16x16预测模式中,通过计算4种16x16宏块的SATD(绝对变换差和)使得其值最小来确定最佳16x16亮度帧内预测模式。
4)通过比较一个宏块使用4x4预测模式时计算的RD代价值与使用16x16帧内预测模式时计算得到的最小代价值,选取代价最小的作为最佳预测模式。
2、基于SAD(或SATD)和速率估计的模式选择方法。对于这种模式选择方法,其亮度4x4预测模式的代价函数的计算方法如下所示:
Cost=SAD+4R*λ(QP)
式中λ(QP)是QP的指数函数,4R是对使用某种预测模式后比特数的估计,R根据当前模式是否为最有可能的模式取值为0或1。式中SAD (绝对差值和)计算的差值是预测值与图像像素值的差值,为了更准确的比较每种模式的Cost值,H.264还对这些差值进行Hadamard变换,将差值(这些值最后要变换到频域进行编码)变换到频域求绝对差值和,这样计算得到的值叫作绝对变换差和(SATD)。这里使用Hadamard变换而不是使用DCT变换主要考虑到Hadamard变换比较简单,而又比较接近DCT变换。在计算4x4块的每一种模式的Cost值后,将Cost值最小的模式判决为最佳亮度4x4预测模式。对于亮度信号的16x16模式选择,其开销计算函数如下所示:
Cost =SATD
式中的SATD也是绝对变换差和,其计算时也是将预测值与图像像素值的差值通过使用Hadamard变换,变换到频率域后求和。最后比较一个宏块做一次16xl6预测后的开销值Cost和做16次4x4预测后Cost值相加得到的总的开销值Cost的大小,选取Cost最小的作为最后宏块的预测模式。如果Cost值相同4x4预测模式将被优先选取,而如果9种4x4预测模式或4种4x4预测模式中出现相同Cost值时,序号较小的预测模式将被选为最佳预测模式。
比较两种模式选择方法可以看出,在RDO模式中,R值被精确地计算出,从而使得其模式选择的准确度大大提高,但为了计算R值需要非常复杂的计算,从而使得其运算复杂度很高,而基于SAD的模式选择由于R值是一个估计值避免了复杂的计算,所以速度大大提高,但选择的准确度也会下降。使用RDO模式选择的方法与使用基于SAD的模式选择方法相比,基于SAD的模式选择计算复杂度平均为RDO模式选择的7%,但与使用RDO模式选择相比基于SAD的模式选择方法PSNR平均降低。
一个宏块组合模式选择过程:
a)
b)
c)
d)
e)
f)
g)
h)
i)
再来补充总结一下 JM86 的帧内宏块类型选择过程。
1、RDO 时的步骤:
(1)、计算 intra4*4 类型。对当前宏块的每个 4*4 小块按照 cost = SSD + lambda_mode * Rate 在 9 种预测模式中选取最佳预测模式;
(2)、计算 intra16*16 类型。先对当前宏块的每个 4*4 小块进行 Hadamard 变换,然后再对 DC 系数组成的 4*4 块进行一次 Hadamard 变换。将所有非零系数的绝对值求和作为代价在 4 种预测模式中选择最佳预测模式;
(3)、对 intra4*4 类型和 intra16*16 类型分别在前面计算得到的最佳预测模式的情况下计算 cost = SSD + lambda_mode * Rate,在这两种类型中选出最佳类型再去与 inter 类型的比较。
2、非 RDO 时的步骤:
(1)、计算 intra4*4 类型。首先,对当前宏块的每个 4*4 小块按照 cost = SA(T)D + 4 * lambda_mode(当前模式不是最有可能模式)或者 cost = SA(T)D (当前模式是最有可能模式)在 9 种预测模式中选取最佳预测模式;然后,计算当前宏块总代价 cost_intra4*4 = 16 个 4*4 小块的最佳 cost 求和 + 4 * 6 * lambda_mode;
(2)、计算 intra16*16 类型。先对当前宏块的每个 4*4 小块进行 Hadamard 变换,然后再对 DC 系数组成的 4*4 块进行一次 Hadamard 变换。将所有非零系数的绝对值求和作为代价在 4 种预测模式中选择最佳预测模式。并将最佳预测模式时的代价作为宏块总代价 cost_intra16*16;
(3)、比较 cost_intra4*4 和 cost_intra16*16,在这两种类型中选出最佳类型再去与 inter 类型的比较。
【说明】:1、模式选择属于开放算法,以上过程只是 JM86 的执行步骤。其他 H.264 编码器的执行步骤可能并不相同;
- 帧内编码的模式选择
- H.264帧内编码的模式选择
- H.264帧内编码的模式选择
- H.264帧内编码的模式选择
- h.264视频编码中快速的帧内预测模式选择
- X264帧内预测编码模式
- 33、编码一个CU(帧内部分)2、帧内预测各种模式的实现
- HEVC帧内角度模式选择算法解析
- 内表的选择
- 帧内预测编码
- 【HEVC学习与研究】33、编码一个CU(帧内部分)2:帧内预测各种模式的实现
- H.264帧内模式选择以及代价计算相关知识
- HEVC中的帧内预测模式选择(Intra prediction mode selection in HEVC)
- H.264帧内模式选择以及代价计算相关知识
- H.264帧内模式选择以及代价计算相关知识
- JSI缺陷:在自动选择编码模式下产生“不能执行已释放的JScript代码”
- opengl的选择模式
- OpenGL 的选择模式
- AVI格式文件读取测试代码
- C++实验 实验1 函数与编译处理
- 爆笑的 辞职信
- 开发者不得不知的Android权限说明
- javascript如何获取表单select域的选择部分的文本
- 帧内编码的模式选择
- JQuery小结
- 心情随写
- 终于明白c++中为什么返回的istream等对象能直接进行bool判断
- javascript完成分栏显示的例子
- 自动创建设备文件
- Linux内核通知链notifier
- C++实验 实验2 指针与引用
- 为什么要学Win32及Win32程序框架