运动搜索算法之钻石搜索

来源:互联网 发布:马蓉宋哲 知乎 编辑:程序博客网 时间:2024/04/28 20:04

前言

  很多年前写的老文章,备份之:DS算法是在运动搜索中使用最为广泛的搜索算法之一,有的地方被翻译成钻石搜索,菱形搜索。不管是硬件还是软件的视频编码器中,都可以看到它的存在。下面文章的内容主要从学报上摘录,希望给视频算法的新手们有些许帮助。

原理

  通常,运动矢量总是高度集中在搜索窗口的中心附近。这对于物体作缓慢运动的视频序列来说更加明显,因为静止块和缓慢运动块占主导地位。运动矢量的中心偏移特性提示了在窗口内不用对所有的点进行搜索,只需要对窗口中心附近的那些点进行搜索就能快速搜索到最佳匹配块。因此,搜索模板都是以窗口中心为中心对称的,其形状和大小共同决定了搜索的速度和性能。
 

 

图表 1 (LDSP and SDSP)

  DS算法用到两个模板,如图表 1 (LDSP and SDSP)所示。左边所示的模板称为大钻石搜索模板(LDSP);右边所示的模板称为小钻石搜索模板(SDSP)。在DS算法中,先反复使用LDSP进行搜索,直到本次搜索误差最小的那个点出现在模板的中心,接着就以这个最小误差点为中心,以SDSP为新的搜索模板进行最后一轮搜索,并将最后一轮搜索中误差最小的那个点作为最佳匹配点。在运用钻石算法的时候,要注意下面三点:

  1. 所有的搜索点必须在搜索窗口内,当待搜索的点超过窗口的边界时,算法将不采用这些点。
  2. 在连续使用LDSP模板进行搜索时,待搜索的点有部分重叠。若用前一个LDSP模板搜索得到的最小误差点位于LDSP的4个角之一时,则下一个搜索只需要在LDSP剩下的5个点进行;若出现在LDSP边上的中点,只需要在LDSP剩下的3个点进行搜索。这样就大大减少了搜索点数,从而大大提高搜索速度。
  3. 算法中并没有限制使用LDSP搜索的次数,这样可能会因等待最小误差点出现在模板的中心而使搜索次数大大增加。在这样的情况下,可以采用设置合适的搜索边框来强制搜索结束。