运动估计相关(块匹配)

基于块匹配的运动估计算法总结

一、运动估计算法分为两类:

        1.像素递归算法(PRA,pixel recursive algorithm) 

        2.块匹配算法(BMA,block matching algorithm)

        提高运动估计速度:快速搜索模版(三步法、二维对数法、交叉搜索法、新三步法、四步法、菱形法、十字菱形搜索法、六边形搜索法);起点预测(基于SAD值的起点预测、利用相邻运动矢量的起点预测、“平均预测”);提前终止(阀值的选择、阀值自适应计算)。

        提高运动估计准确度:分层搜索(根据分辨率分层)、可变块大小搜索(可使运动估计的模拟更接近物体的实际运动)等。

 

二、块匹配运动估计原理及其技术指标

        运动估计用来估计物体的位移,得到运动矢量;运动补偿根据得到的运动矢量,对前一帧中由于运动而产生的位移进行调整,从而尽可能得到本帧的预测帧。

块匹配运动估计可以从以下四个方面进行研究:块的模式选择、块匹配准则、算法评定指标以及搜索起点预测。

1.模式选择

        H.264编码标准中,标准的参考代码有10个模式可以选择:SKIP,16*16,16*8,8*16,8*8,8*4,4*8,4*4。

                              

                           


        运动估计及补偿的基本原理就是利用帧间运动估计得到待编码的一个参考块,然后用这个参考块进行运动补偿,将补偿后的残差进行DCT变换和可变长编码。

        运动矢量是一个包括水平和垂直分量的二维矢量,编码过程只对这个运动矢量和当前宏块与在参考帧中搜索到的宏块的插值进行编码。

2.匹配准则

        块匹配准则判断块相似程度,直接影响运动估计的精度,块匹配运算复杂度,数据读取复杂度在很大程度上取决与搜索采用的块匹配准则。常用匹配准则:绝对品均误差函数(MAD)、绝对差值和(SAD)、归一化相关函数(NCFF)、均方误差函数(MSE)、最大误差最小函数(MME)、最大匹配像素(MPC)等。

3.算法评定指标

        用来评价重构图像的质量,广泛应用是峰值信噪比(Peak Signal to Noise Ratio)和平均MSE。

4.起始搜索点预测

        起始点预测的基本思想:利用运动的相关性,以空间位置上的相邻块(左边或上边以编码的块)或时间上的相邻块(前一帧图像的相同位置)的运动预测当前的运动矢量,然后以此为起点做进一步的搜索。

三、经典块匹配运动估计算法:

1.全搜索法FS:

        思想:全搜索算法(Full search Method, FS),也称为穷尽搜索法,是一种搜索策略最简单的搜索算法。它对M*N搜索范围内所有可能的候选位置计算SAD值,从中找出最小SAD,其对应偏移量即为所求运动矢量。此算法虽计算量大,但最简单、可靠,找到的必为全局最优点。

2.三步搜索法:

        思想:三步搜索算法(TSS, Three-Step Search) 算法采用一种由粗到细的搜索模式,从搜索窗口中心开始,按一定步长取周围8个点作匹配运算,文中采用的初始搜索步长为4,得到MBD点后,每次利用上一步搜索得到的最佳匹配位置作为当前搜索的中心位置,每做一步,搜索步长减半,直至搜索结束。

3.新三步搜索:

        思想:在现实的视频序列中,运动矢量的分布是具有中心偏置特性的,为验证此特性,NTSS算法在第一步中通过搜索增加的中心8个点来修改搜索模板。同时NTSS使用半路中止技术来加速静止块的匹配,以此来减少搜索次数。三步算法在第一步对九个点作匹配运算,这九个点在搜索窗口中是等间距分配的,没有考虑块的中心偏置,新三步在第一步对搜索中心周围的八个点也同时作匹配运算,在很多情况下运算可以提前中止。

4.四步搜索算法:

        思想:类似于三步法,但基于现实中序列图像特征,即运动矢量都是中心分布的,从而在5*5大小的搜索窗口上构造了有9个检测点的搜索模板。FSS算法首先采用5*5的搜索窗口,没有像TSS算法使用9*9的搜索窗,避免造成搜索方向的偏离,每一步的搜索范围由上一步的最佳匹配位置决定,并且将搜索窗的中心移向MBD点处,前三步的搜索是定步长搜索,最后一步改变步长,得到最后的最佳匹配位置,且后两步搜索窗的大小依赖于MBD点的位置。

5.菱形搜索法(钻石搜索法):

        菱形搜索算法(Diamond search,DS)目前快速算法中性能最优的算法之一。是基于中心偏置的多级搜索方法。特点包括,(1)在第一步搜索中搜索模式设计为检测点基于中心偏置的LDSP型模式。(2)根据极值中心点附近误差曲面具有单调性的假设,采用了中途停止的搜索策略。即一旦最小块失真出现在LDSP中心点位置,搜索转入SDSP模式,中途就结束搜索。在DS搜索过程中,LDSP被重复使用,直到最小块失真出现在中心点。然后搜索模式由LDSP转换为SDSP,进入最后的搜索阶段。在SDSP的五个检测点中,出现最小块失真的位置就确定了最佳匹配块的运动矢量。

6.六边形搜索法:

        六边形搜索(Hexagon-based Search,HEXBS)与菱形搜索法类似,修改了搜索模版,提出大六边形模版。

 

四、文中作者改进算法

1.基本的准十字菱形搜索算法

        描述:改进了搜索模版,搜索方法类似。提出了大交叉模版LCSP、小交叉模版SCSP、十字交叉模版CSP、准LCSP模版(四个方向)。

2.基于起始搜索点预测的自适应准十字菱形搜索算法:

        在基本的准十字菱形搜索算法的基础上加入了起始点预测、判断运动大小区分运动搜索模式。

        算法描述:(1)静止块检测。(2)搜索模式选择。(3)起始点预测。(4)以零矢量位置为中心,在3*3范围内进行匹配,得到最优运动矢量。(5)基准十字菱形搜索。(6)以当前点为搜索起始点,采用大交叉-准十字里菱形搜索,找MBD位于中心,后改小交叉模版局部精细定位。(7)将最终的MBD点作为最佳匹配点,得到该图像的运动矢量。


  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
匹配算法是一种基于像素点匹配运动估计算法。常见的块匹配算法有全搜索算法、三步搜索算法和快速全局搜索算法等。 下面是一个简单的块匹配算法的代码实现: ```python import numpy as np import cv2 # 读取两帧图像 prev_frame = cv2.imread('prev.jpg', cv2.IMREAD_GRAYSCALE) curr_frame = cv2.imread('curr.jpg', cv2.IMREAD_GRAYSCALE) # 定义块大小,搜索范围和最小块匹配误差 block_size = 16 search_range = 16 min_error = 1e9 # 遍历当前帧的每个块 for i in range(0, curr_frame.shape[0] - block_size, block_size): for j in range(0, curr_frame.shape[1] - block_size, block_size): # 初始化最小误差和最佳位移 min_error_block = np.zeros((block_size, block_size), dtype=np.uint8) best_offset = (0, 0) # 遍历搜索范围内的每个像素点 for k in range(-search_range, search_range + 1): for l in range(-search_range, search_range + 1): # 计算当前块和参考块的均方误差 curr_block = curr_frame[i:i+block_size, j:j+block_size] ref_block = prev_frame[i+k:i+k+block_size, j+l:j+l+block_size] error_block = cv2.absdiff(curr_block, ref_block) error = np.sum(error_block) # 更新最小误差和最佳位移 if error < min_error: min_error = error min_error_block = error_block best_offset = (k, l) # 将当前块与最佳匹配块的位移绘制到当前帧中 cv2.rectangle(curr_frame, (j, i), (j+block_size, i+block_size), (255, 0, 0), 1) cv2.arrowedLine(curr_frame, (j+block_size//2, i+block_size//2), (j+block_size//2+best_offset[1], i+block_size//2+best_offset[0]), (0, 0, 255), 2) cv2.imshow('motion estimation', curr_frame) cv2.waitKey(0) cv2.destroyAllWindows() ``` 该代码实现了一个简单的块匹配运动估计算法,可以在两帧图像中找到每个块的最佳匹配块,并绘制出位移向量。注意,该代码只是一个简单的示例,实际应用中还需要进一步优化和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值