运动估计和最佳匹配块搜索算法

图像与视频的区别:图像是静态的,只有一帧;视频是动态的,是由多帧连续图像组成的运动图像序列,视频具有的时间冗余是图像所没有的。

时间冗余:视频中时间上相邻图像之间的相似性,重复性称为时间冗余

帧间预测编码的定义:即利用参考帧对当前帧进行编码,传送的是残差值

帧间预测编码的示意图如下:
在这里插入图片描述
在这里插入图片描述

编码端和解码端可以表示为:

/*
	编码端:原始值 - 预测值 = 残差值
	解码端:差值 + 预测值 = 原始值
*/

存在的问题:这样直接相减得到的残差值仍然具有很多的信息量,数据量仍然很大。原因是,当前帧和参考帧两帧图像之前存在运动导致的,运动导致两帧图像之间没有对齐,在这种情况下,直接相减残差自然会比较大,解决的办法是引入运动估计的技术。


运动估计的基本原理

运动估计:对两帧图像之间的运动位移进行估计的技术称之为运动估计

运动补偿:根据估计得到的运动位移对图像进行对齐就称为运动补偿(使得当前帧与参考帧对齐之后在相减,残差值就会更小)
在这里插入图片描述

运动估计算法中常用的匹配准则(其中最常用的是SAD):
M A D ( i , j ) = 1 M N m = 0 M n = 0 N f k ( m , n ) f k 1 ( m + i , n + j ) MAD(i,j) = \frac{1}{MN}\sum_{m=0}^{M}\sum_{n=0}^{N}\left | f_k(m,n)-f_{k-1}(m+i,n+j) \right |
M S E ( i , j ) = 1 M N m = 0 M n = 0 N [ f k ( m , n ) f k 1 ( m + i , n + j ) ] 2 MSE(i,j) = \frac{1}{MN}\sum_{m=0}^{M}\sum_{n=0}^{N}\left [ f_k(m,n)-f_{k-1}(m+i,n+j) \right ]^{2}
N C C F ( i , j ) = m = 0 M n = 0 N f k ( m , n ) f k 1 ( m + i , n + j ) ) [ m = 0 M n = 0 N f k 2 ( m , n ) ] 1 / 2 [ m = 0 M n = 0 N f k 1 2 ( m , n ) ] 1 / 2 NCCF(i,j) = \frac{\sum_{m=0}^{M}\sum_{n=0}^{N}f_k(m,n)f_{k-1}(m+i,n+j))}{\left [ \sum_{m=0}^{M}\sum_{n=0}^{N}f_k^{2}(m,n)\right ]^{1/2}\left [ \sum_{m=0}^{M}\sum_{n=0}^{N}f_{k-1}^{2}(m,n)\right ]^{1/2}}
S A D = m = 0 M n = 0 N f k ( m , n ) f k 1 ( m + i , n + j ) SAD = \sum_{m=0}^{M}\sum_{n=0}^{N}\left | f_k(m,n)-f_{k-1}(m+i,n+j) \right |


最佳匹配点的搜索算法

1、全搜索算法:基本思想就是按照一定的顺序计算出搜索窗内所有像素点的SAD值,找出SAD最小的点所在的位置作为运动矢量,这种算法计算量大,一般作为其他搜索算法的一种效率参考

2、三步搜索算法:该算法是匹配运动估计的一种典型的快速算法,其计算量平均只有全搜索算法的10%左右。它总共进行三步搜索,每次搜索都以上一步的搜索结果为中心,搜索步长为上一步步长的一半,搜索精度为1个像素。
在这里插入图片描述

  • 第一步:以窗口为中心,步长为4,进行周围8个点的搜索,根据最小绝对差原则(SAD)得到一个最佳匹配点,共搜索了9个点
  • 第二步:以上一步最佳匹配点为中心,步长为2,继续搜索周围8个点得到最佳匹配点,共搜索了8个点
  • 第三步:同上一步,只是步长为1,最后得到的最佳匹配点就是最终匹配点

3、菱形搜索算法:该算法采用两种搜索模板,大菱形搜索模板(LDSP)和小菱形搜索模板(SDSP)。大菱形搜索模板有9个搜索像素点(中心点和周围按菱形分布的8个像素点),小菱形搜索模板有5个搜索点(中心点和垂直、水平方向相邻4个点)。菱形搜索算法进行搜索时,先用大菱形模板进行搜索,如果最佳匹配点不是大菱形的中心点,则以当前最佳匹配点为中心继续进行大菱形搜索,直到最佳匹配点为当前大菱形的中心点为止,转为小菱形搜索。
在这里插入图片描述
注意:大菱形搜索有两种搜索点更新情况,如果当前最佳匹配点出现在大菱形的四角,则只计算五个新增加的像素点,如果最佳匹配点出现在大菱形的边上,则只计算新增加的3个像素点。小菱形搜索,搜索4个点并和中心点比较(比较谁的SAD值更小),找出最佳匹配点。

4、六边形搜索算法:六边形搜索算法类似于菱形算法,匹配速度要略优于菱形算法,因此现在被广泛利用。六边形搜索算法首先利用大模板(六边形模板)对搜索点进行块匹配运算,总共搜索包括起点在内的7个点,如果搜索的最佳匹配点为模板中心,则对中心进行小模板(四边形模板)搜索,确定最佳匹配点。如果大模板六边形搜索的最优点为非中心点,则以此点为中心再次进行六边形搜索,直到最优点为搜索模型的中心为止。

在这里插入图片描述

问题:进行运动估计和运动补偿之后的残差图像,信息量确实减少了,但是信息量减少的程度还是不够大,例如对下面的参考帧进行编码,
在这里插入图片描述

原因:背景和矩形是禁止的,椭圆则在沿着右下方运动。因此我们无法找到一个运动矢量来精确的表示三个部分的运动位移,当前块在参考帧中也就无法找到完全匹配的图像块。

解决办法:把一个16 * 16的当前块分为左右两个部分,每个8 * 16像素的子块分别进行运动估计得到自己的运动矢量,这样一个块就有个两个运动矢量,可以更精确的进行块匹配,从而近一步减小残差值,同样可以把一个块分成更小的块进行运动估计(我们默认一个块内的所有像素点的运动矢量都是一样的,所以找最佳匹配块也就是找匹配块中一个像素点的最佳匹配点)

注意点:

  • 在视频压缩的时候,需要同时保存残差数据和运动矢量才能在解码端完全恢复出当前块,因为在解码端根据残差数据和匹配块相加的时候,也是需要根据运动矢量进行对齐的

  • 这同样说明了,视频压缩后数据量的大小是由残差数据和运动矢量两方面决定的。运动估计的块越小,残差数据量就越小,但是运动矢量数量却越多,例如从16 * 16像素块到4 * 4像素块,运动矢量的数量翻了16倍。

  • 图像的运动越复杂,运动的一致性就越弱,就应该选择小的块大小以减少残差;图像块的运动越简单,运动一致性就越强,就应该选择大的块大小以避免不必要的运动矢量增多(实际应用中应该自适应的选择匹配块的大小)

发布了7 篇原创文章 · 获赞 1 · 访问量 661

猜你喜欢

转载自blog.csdn.net/weixin_45615071/article/details/105378537