1.视频图像的分区
为了更好地说明如何利用视频图像中的运动特性来进行压缩编码,首先分析一下视频中如图1.5所示的一个简单的典型场景。在一个细节不是十分复杂的背景前,有一个活动量不大的刚性物体,假定该物体在第 K 帧与第 K -1帧相比有位移,则可以将整幅画面分为三个各具特点的区域。
图1.5 图像区域分类
(1)背景区:指固定摄象机所摄取的运动物体后面的背景,一般它是静止的,若外界条件不变,则这两帧背景区的绝大部分数据相同。这意味着,两帧背景区之间的帧间相关性极强。
(2)运动物体区:若将物体的运动近似看作简单的刚体平移,则第 K 帧与第 K -1帧的运动物体区的数据也基本相同。假如能采用某种运动估计的方法对位移量进行“运动补偿”,那么两帧的运动物体区之间的相关性也是很强的。
(3)暴露区:指物体运动后所暴露出的原来曾被运动物体所遮盖的区域。如果有可能事先用存储器将这些暴露区的数据暂时存储,则经遮盖后再暴露出来的数据与原先存储的数据应大致相同。
在理想的情况下,以上三类区域的帧间相关性都可以作为压缩编码的依据。当然,若是整个画面从一个场景切换为另一场景,则谈不上帧间相关性的利用了。
2.减少帧间预测误差
在帧间预测编码中,为了达到较高的压缩比,最重要的就是要得到尽可能小的帧间预测误差。观察图1.5可以发现,在以上的帧间预测中,实际上仅在背景区进行预测时可以获得较小的帧间误差。如果要对运动物体区域进行预测,首先要估计出运动物体的位移(运动矢量),然后再根据运动矢量找出物体在前一帧的区域位置,计算前后帧运动物体相应点之间的差值,这样求出的预测误差才比较小,这就是运动估计(Motion Estimation,ME)。简而言之,通过运动估计,可以减少帧间误差,提高帧间预测编码的压缩效率。
从理论上讲,运动估计前必须将图像中运动的物体划分出来。由于实际的序列图像内容千差万别,把运动物体以整体形式划分出来是极其困难的,因此有必要采用一些简化模型。目前已得到广泛应用的是块匹配方法(Block Matching Arithmatic,BMA)。
3.块匹配运动估计
BMA将图像分为若干不重叠的 N × N 像素的子块(Block),尺寸 N 通常取为4、8或16,以子块作为运动估计和补偿的基本单元。块匹配算法就是判断某一子块是运动子块还是静止子块,运动子块的运动矢量又为何值。由于这种方法没有以运动物体作为运动估计的基本单位,因而不可避免地会产生估计误差,尤其是对那些既有运动物体又有静止背景的子块误差将更大,这就是块匹配算法的不足之处。但是,由于这种方法相对简单,因此它已成为现在应用最为广泛的运动估计算法。
可以用图1.6来简要说明块匹配运动估计算法的原理。设 A 为当前帧中的一个待处理的子块,在其前一帧中在以 A 为中心、上下左右各距 d 个像素的区域 B (又称搜索窗)内寻找一个与 A 最相似的子块 C ,认为就是前一帧中的 C 移动到当前帧中的 A 的位置。那么, C 与 A 的坐标偏移量即为所估计的运动矢量。
图1.6 块匹配法运动估计示意
上述过程实质上是一个求子块匹配的过程,为此要确定一个匹配误差函数 E ( i , j ),通常采用均方误差(Mean Square Errors,MSE)或绝对误差和(Sum of Absolute Differences,SAD)准则,匹配的过程也就是求这些误差函数极小值的过程。
采用均方误差最小准则表示的运动矢量( i , j )为
(1.7)
采用绝对误差和最小准则表示的运动矢量( i , j )为
(1.8)
式中, f k ( m , n )表示当前的图像块,即 A ; f k -1 ( m + i , n + j )表示前一帧中 B 搜索窗内相对 A 的位置偏移为( i , j )的一个搜索块;( i , j )为所搜寻的运动矢量的坐标,变化范围为(- d , d -1),总共需要(2 d +1) 2 次误差计算。对所有的( i , j )计算误差匹配函数值,找到最小的误差 E min ( i , j ),这个值对应的( i , j )即为运动矢量, v x = i , v y = j 。
采用块匹配技术进行运动估值时要求选择合适的方形子块尺寸 N 。子块尺寸小时,块内像素运动一致性好,运动估计准确度较高,但编码传输时标志运动矢量的码率会增多,计算量也增大。子块尺寸大时,计算量减小,传输运动矢量的码率变小,但运动估计准确度不高,难以进行有效的运动补偿预测。究其原因主要是块内像素运动一致性变差,如一部分属于运动区域,而另一部分属于静止的背景区等。在目前的视频编码国际标准中, N 的取值有16、8、4等;另外,还出现了长方形的子块,如4×8、8×4等。
1)全搜索算法
在以上介绍的算法中,对搜索区域内的每一种可能的位置都进行误差计算和比较,因此这种方法被称为全搜索(Full Search,FS)算法。其优点是比较准确,能够获得全局最优解,缺点是匹配运算量大。
2)快速算法
为了克服全搜索法计算量大的缺点,在实际应用中可采用一些简化的块匹配算法,如三步法、五步法等快速算法。这些算法并不在搜索区域内的每一个可能的位置上都进行误差计算和比较,只选择若干有代表性的点进行搜索,运算量自然就大为降低,但同时其性能也必然有所下降。下面以应用广泛的三步搜索(Three Step Search,TSS)算法为例,简要介绍一下快速运动估计算法的原理。
在块匹配运动估计中,块的位移可以理解为中心点的位移。在三步法中,搜索范围为±7,即在上一帧以当前子块中心为原点,将当前子块在其上下左右距离为7的范围内按一定规则移动,每移动到一个位置,取出同样大小的子块与当前子块进行匹配计算。参考图1.7,具体分为以下三步:
第1步,以当前子块为中心( a ),以4为步幅,将以 a 及周围8个位置为中心的子块与当前子块进行匹配,求出最佳匹配子块的中心位置,如 b 。
第2步,以第1步中求出的最佳子块为中心( b ),以2为步幅,将以 b 周围8个位置为中心的子块与当前子块进行匹配,求出最佳匹配的子块中心位置,如 c 。
第3步,以第2步中求出的最佳子块为中心( c ),以1为步幅,将以 c 周围8个位置为中心的子块与当前子块进行匹配,求出最佳匹配的子块中心位置,如 d ,它与当前子块中心的位置 a 偏移量即为估计的位移量。
可以看到,在 d = 7时,三步法仅需要 3×9 -2 = 25 次匹配,它比全搜索算法的匹配次数(2×7+1) 2 =225少得多。
图1.7 三步搜索算法示意图
4.块匹配运动补偿
运动估计算法对每个子块估计出所谓的位移矢量或运动矢量( v x , v y ),并将它编码传送到接收端。同时,在编码端利用该运动矢量进行运动补偿(Motion Compensation,MC)的帧间预测,即用前一帧图像 f k -1 在( x - v x , y - v y )处的亮度值 f k -1 ( x - v x , y - v y )对当前编码帧 f k 中子块内( x , y )处的亮度值 f k ( x , y )进行估计,估计值为 ,于是预测误差为
(1.9)
对比相邻帧对应位置直接相减的方法,这种方法相差一个位移运动矢量。对预测误差进行变换、量化和熵编码后进行传输。在接收端经过解码后,结合上一帧的恢复图像就可以得出当前帧各子块的解码图像。
需要注意的是,在基于块的运动估计和运动补偿中有一个基本的假设,即块内所有像素具有同样的平移运动,因此子块的运动矢量就是子块内所有像素的运动矢量。对于其他类型的运动,如缩放、旋转,以及背景区的暴露或遮盖等,这种运动补偿预测不再适用。