目录
- 简介
- 帧内预测
- 帧间预测
- 变换编码
- 熵编码
- 参考
1.简介
传统数字视频编码采用的基本都是基于块的混合编码框架。 基于块是指将一副图像分成矩形的像素块作为基本处理单元;混合编码是指将变换编码、预测编码和熵编码这三种编码技术相结合。
运用帧内预测消除空间域的相关性,运用帧间预测消除时间域的相关性,对预测误差采用离散余弦变换进一步消除空间域相关性,然后对量化系数、运动矢量以及其他编码控制辅助信息用自适应熵编码消除统计冗余。
混合编码框架在30年来没有发生大的变化, 只是每项具体方法,如预测方法、变换方法等,不断演进,提供更为精细的局部信号自适应能力,通过几百种处理算法的灵活组合模式,提升视频的压缩效率,然后在摩尔定律的帮助下,解决复杂度提升带来的问题。
2. 帧内预测
预测法是最简单和实用的视频压缩编码方法,这时压缩编码后传输的并不是像素本身的取样幅值,而是该取样的预测值和实际值之差。
为什么取像素预测值与实际值之差作为传输的信号?因为大量统计表明,同一幅图像的邻近像素之间有着相关性,或者说这些像素值相似。邻近像素之间发生突变或“很不相似”概率很小。
存储一个像素的亮度值可能需要8个bit,如果相邻的两个像素变化不大,存储一个像素的原始值,以及第二个像素相对第一个像素的变化值,那么第二个值可能用2个bit就够了,这就节约了很多的空间。
接收端把差值q与预测值(事先已定义好,比当前X早到达接收端像素,如A)相加,恢复原始值X。归纳如下:
编码端:X-A=q
解码端:q+A=X
按以上原理可得预测编码框图,如图1所示。这种预测编码也称为差分脉冲编码(DPCM)。
其中,x(n)为当前像素的实际值,p(n)为其预测值,d(n)为差值或残差值。该差值经量化后得到残差量化值q(n)。预测值p(n)经预测器得到,预测器输入为已存储在预测器内前面的各像素,和当前值,它们的加权和即为下一个预测器输出。
步骤很简单,但是里面有几个问题要明确,首先要知道的是,我们固然可以按像素来进行预测,但是这样太费事了,要计算很多次,而且由于帧内预测的特性,你要预测当前的像素,能参考的像素只能是它的临近像素,也就是前面已经编码完成的,它后面的像素还没有编到,所以自然是不能用来编码当前像素的,因此我们只能一个像素一个像素进行编码,编完了一个才能编下一个,这样显然会很慢。于是H.264标准中提出按块进行计算,一个宏块是16x16像素,然后它可以分成子块,最小是4x4的(这个大小是对于亮度编码而言,至于色度编码,4:2:0格式的色度宏块的长和宽都是亮度宏块的一半),这样也能大大提高计算速度。因此下面提到的“值”可以代表“像素”也可以代表“块”,从原理上来说是一样的,而实际采用的是“块”,因此我也就统一用块这个词了。
3. 帧间预测
一般而言,帧间预测编码编码效率比帧内更高。有人测得,对缓慢变化256级灰度的黑白图像序列,帧间差超过阈值3的像素不到一帧像素的4%;对剧烈变化256亮度值的彩色电视序列,帧间差超过阈值6的像素平均只占一帧的7.5%。
3.1 单向预测编码
图2为单向预测的预测编码框图。
利用上一帧的图像经运动矢量位移作为预测值的方法称为单向预测或单向时间预测。这时,
其中,(i, j)即运动矢量。如何减小帧差和更精确预测当前像素是提高帧间压缩编码效率的关键之处。
上述原理以像素为单位进行预测,除了传送帧差外,还增加了每个像素的运动矢量,编码效率显著下降。实际上,两帧之差的物体运动一般是刚体的平移运动,位移量不大,因此往往把一帧图像分成若干M×N块,以块为单位分配运动矢量,大大降低总码率。
3.2 双向预测
有时,不只是利用前一帧像素预测,还需利用后一帧像素。
这时,前向参考帧预测当前帧称为前向运动补偿,利用后向参考帧预测当前帧称为后向运动补偿,利用前后向同时预测的就称为双向预测运动补偿。
双向预测在实时通信中是不能应用的,例如会议电视、可视电话等,因为后向预测在当前帧之后进行,会引入编码时延。它可用在广播电视系统中,如采用MPEG标准的编码系统。
为了进一步提高编码效率,多帧预测(包括单向和双向预测)被引入,如H.264标准参考帧可达5~15帧。
3.3 运动估计
在帧间预测编码中,由于活动图像邻近帧中的景物存在着一定的相关性。因此,可将活动图像分成若干块或宏块,并设法搜索出每个块或宏块在邻近帧图像中的位置,并得出两者之间的空间位置的相对偏移量,得到的相对偏移量就是通常所指的运动矢量,得到运动矢量的过程被称为运动估计。
运动矢量和经过运动匹配后得到的预测误差共同发送到解码端,在解码端按照运动矢量指明的位置,从已经解码的邻近参考帧图像中找到相应的块或宏块,和预测误差相加后就得到了块或宏块在当前帧中的位置。
通过运动估计可以去除帧间冗余度,使得视频传输的比特数大为减少,因此,运动估计是视频压缩处理系统中的一个重要组成部分。
3.2 运动搜索算法
(1) 全局搜索算法
为当前帧的一个给定块确定最优位移矢量的全局搜索算法方法是:在一个预先定义的搜索区域内,把它与参考帧中所有的候选块进行比较,并且寻找具有最小匹配误差的一个(基于“均方误差最小准则”或“绝对误差均值最小准则”)。这两个块之间的位移就是所估计的MV,这样做带来的结果必然导致极大的计算量。
(2) 分数精度搜索算法
由于在穷尽块匹配算法中搜索相应块的步长不一定是整数,一般来说,为了实现1/K像素步长,对参考帧必须进行K倍内插。K=2的例子,它被称为半像素精度搜索。根据实验证明,与整像素精度搜索相比,半像素精度搜索在估计精度上有很大提高,特别是对于低清晰度视频。
但是,应用分数像素步长,搜索算法的复杂性大大增加,例如,使用半像素搜索,搜索点的总数比整数像素精度搜索大四倍以上。
那么,如何确定适合运动估计的搜索步长,对于视频编码的帧间编码来说,即使得预测误差最小化。
根据预测误差和搜索精度之间的关系的统计分析,在低噪声情况下,需要不大于1/8像素的精度,而在高噪声情况下,1/2像素精度就够了。
(3) 快速搜索法
为了更快找到d(i,j),可采用一些快速搜索法如:
二维对数搜索法:
采用大菱形搜索模式和小菱形搜索模式,从相应于零位移的位置开始搜索,每一步试验菱形排列的五个搜索点。下一步,把中心移到前一步找到的最佳匹配点并重复菱形搜索。当最佳匹配点是中心点或是在最大搜索区域的边界上时,就减小搜索步长(菱形的半径)。否则步长保持不变。当步长减小到一个像素时就到达了最后一步,并且在这最后一步检验九个搜索点。初始搜索步长一般设为最大搜索区域的一半。
三步搜索法:
如图4所示,这种搜索的步长从等于或者略大于最大搜索范围的一半开始。第一步,在起始点和周围八个“1”标出的点上计算匹配误差,如果最小匹配误差在起始点出现,则认为没有运动;第二步,以第一步中匹配误差最小的点(图中起始点箭头指向的“1”)为中心,计算以“2”标出的8个点处的匹配误差。注意,在每一步中搜索步长搜都比上一步长减少一半,以得到更准确的估计;在第三步以后就能得到最终的估计结果,这时从搜索点到中心点的距离为一个像素。
(4) 混合搜索算法
由于物体的运动千变万化,很难用一种简单的模型去描述,也很难用一种单一的算法来搜索最佳运动矢量,因此实际上大多采用多种搜索算法相组合的办法,可以在很大程度上提高预测的有效性和鲁棒性。
4. 变换编码
绝大多数图像都有一个共同的特征:平坦区域和内容缓慢变化区域占据一幅图像的大部分,而细节区域和内容突变区域则占小部分。也可以说,图像中直流和低频区占大部分,高频区占小部分。这样,空间域的图像变换到频域或所谓的变换域,会产生相关性很小的一些变换系数,并可对其进行压缩编码,即所谓的变换编码。
变换中有一类叫做正交变换,可用于图像编码。自1968年利用快速傅立叶变换(FFT)进行图像编码以来,出现了多种正交变换编码方法,如K-L变换、离散余弦变换(DCT)等等。其中,编码编码性能以K-L变换最理想,但缺乏快速算法,且变换矩阵随图像而异,不同图像需计算不同的变换矩阵,因而只用来参考比较。DCT编码性能最接近于K-L变换,略次而已,具有快速算法,广泛应用于图像编码。
5. 熵编码
利用信源的统计特性进行码率压缩的编码就称为熵编码,也叫统计编码。视频编码常用的有两种:变长编码,包括哈夫曼编码及算术编码。
6.参考
- 新一代视频压缩编码标准——H.264/AVC
- https://blog.csdn.net/leixiaohua1020/article/details/28114081