视频压缩基础
为什么要对视频进行压缩
传输成本,存储成本太高
motionJPEG:对于图像序列,对序列中的每一帧逐帧进行压缩,并不能利用视频序列各帧图像之间的相关性。
对于视频来说,存在时间冗余,可以通过帧间预测的方式进一步进行视频序列的压缩。
运动估计(运动向量搜索)的基本原理,三种算法及其运算量
运动估计:将一帧图像的块,按照一定的匹配准则在前一帧的搜索范围内查找最匹配的块,得到的位移差称为运动矢量。
运动补偿:按照运动矢量,对上一帧进行唯一,然后求出对当前帧的预测值。
顺序搜索:全搜索,搜索整个窗口,将窗口内每个宏块逐个像素的和目标帧中的宏块进行比较。
运算量高,O(p2n2)
运算量:(2p+1)x(2p+1)N2 x3
2D对数搜索:不是最优但最有效
迭代。
运算量(8log2(p+1)+1)x(8log2(p+1)+1)N2 x3
分层搜索:初始的运动向量估计是从显著降低分辨率的图像获得的,然后一层层做修正。
视频中的时间空间冗余如何去除
H.261使用的编码算法是运动补偿和变换编码的混合,运动补偿去除(时间)冗余,变换编码去除(空间)冗余
H.261是后来开发的所有视频编码标准的基础。
I/B/P帧定义和特性
I帧:intra帧内编码帧 消除空间冗余
P帧:inter帧间编码帧,前向预测编码(通过前面的I和P) 消除时间冗余
当预测误差太大,则将宏块本身编码(宏块不进行运动补偿)
宏块间差值的熵通常比目标宏块的熵小很多,所以压缩率较高。
运动矢量传送的是前向量和当前向量的差值。
B帧:由前帧和后帧共同预测得到。在不牺牲质量前提下提高压缩率。(为何要有B帧)
压缩性能:I<P<B