H264编码之预测
1.为什么预测编码可以消除图像的时空域的冗余?
2.为什么预测编码后的码流,解码器可以保证完全恢复?
3.为什么预测编码要分为帧内编码和帧间编码?
关于第一个问题:
我们知道,预测编码处理的时候,我们不直接传送图像像素值到后面模块,比如量化编码模块,而是对图像像素实际值和它的预测值做差,再对差值进行编码。如果将差值进行量化再熵编码,这种预测编码方式我们叫做差分脉冲编码调制,DPCM(differential pulse code modulation)。
从统计学上看,预测误差的取值范围通常在0附近的小范围内,而不是如原像素值一样0-255。这样的预测误差进行量化处理需要的量化层数是很少的。(连续信号经过采样变成离散信号,离散信号经过量化可以变成数字信号(图像))
DPCM通过去除邻近像素间(信源)的相关性和减少量化层数来实现码率压缩。
关于第二个问题:
在视频压缩领域,DPCM系统的输入编码单元X通常是是数字图像信号,一般是大小为16x16的像素块。基于视频图像空时域存在相关性的事实,以当前编码单元X空时域邻近解码含有失真的像素为参考,采用一定方法预测产生一个预测快Xp。
解码器端可以做到基于完全相同的参考像素块基准,按照完全相同的预测方法,获得完全相同的预测块Xp。
那怎么做到呢?
需要在进行时空域相关性预测编码时,用包含有失真的解码像素块X’作为参考像素。也就是说,编码器在进行变换量化编码的同时,需要进行逆量化,逆变换,得到含失真的预测误差△X’,这个值和预测值Xp相加重构出含有失真的图像像素块X’。这个X’就是后面邻近编码单元进行预测的参考像素。这样的话,编码器内部需要内嵌一个解码器。
关于第三个问题:
为了保证编码端和解码端有完全相同的预测值Xp,需要采用完全一致的预测参考,所以在视频图像压缩编码时候,需要将解码像素作为空时域的参考像素。
按照预测值求解时选择的像素的不同,可分为空域预测和时域预测,即帧内预测和帧间预测,帧内预测有一维预测和二维预测之分,帧间预测又被称为三维预测。
3.1帧间预测
帧间预测主要使用前一帧或者前几帧的图像对当前图像进行预测。目前主流的视频编码标准中采用刚体平动模型来分析两帧图像之间的运动。当前编码块相对于参考图像中的最佳位移匹配块之间的相对位移,就是运动矢量MV。根据当前块去参考帧中的一定大小的窗口内寻找最佳匹配快的过程,就是运动估计。帧间预测的关键问题就是:如何找出最合适的图像块运动位移!
根据找出的MV,将前一帧或前几帧的运动位移块图像做相应位移大小得到当前编码块的运动预测估计值,乃至于当前帧的针尖运动预测帧的过程,我们叫做运动补偿,MC。
简而言之,运动估计得到的运动矢量可以给编码器用来做运动补偿,同时还会传送到解码器中,解码器根据传过来的MV,经过运动补偿可以得到和编码器中完全相同的预测图像,预测值Xp。
要找到最合适的MV需要选择一个标准来评估,常用块匹配算法。
3.2帧内预测
既然视频图像中时域的相关性大于空域的相关性,为什么编码的时候不降所有的帧都采用基于运动预测的帧间预测,还要有帧内预测?
1)因为几乎所有的视频编码标准都支持Intra帧(I帧),而这个类型的帧可以不依赖邻近参考帧,自己进行独立解码,使得视频支持快进和快退播放,同时避免了编码失真的累积导致参考图像“污浊化”。
2)基于分块的帧间运动预测技术,本身存在缺陷。比如基于刚体平动模型并不适用所有场景,有些块的预测效果并不理想。而且,有些块的空域相关性是大于时域相关性的,此时如果采用帧内预测就比较好。
帧内预测也是基于宏块为单位的模式,选取和当前块在水平或者垂直方向连接的(一般是左上),并且已经编码过的宏块,作为帧内预测参考。这样解码端可以解码出这些块的像素,保证编码端和解码端有完全相同的预测基准Xp。
已经编码过的宏块,解码端可以获得含失真的解码重构像素。像和当前宏块邻近的右下宏块,是没有编码的,编码器端可以利用这些像素块的原始像素值进行预测,但解码端是无法获取到这些像素的,导致编码和解码无法得到相同的参考。
帧内预测模式中,需要编码器把实际采用的帧内预测模式信息传给解码器。
总结:
对于解码器来说,编码器传送的运动矢量和帧内预测模式信息同样重要。
本文地址:https://blog.csdn.net/beidoubushixing/article/details/107298081
上一篇: Adobe Premiere Pro2020中文版
下一篇: 矩阵中的路径