从DP到基于树结构的动态规划立体匹配算法

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xujx09/article/details/68488824

        如图1所示,分别是几种基本方法得到的视差图。其中AD往往比Census在物体边缘上的处理更好一些,边缘明显清晰,但是AD得到的噪声太多,AD-Census在物体边缘上的效果是二者的折中,但噪声更少,整体效果更加理想,AD-Census是对彩色图像进行处理的,效果比较好,其代码接下来也要学习。传统DP算法只计算扫描线上的能量最小,忽略了扫描线之间的约束,所以得到的视差图会产生“条纹现象”,但是该方法计算速度较SAD、SSD、Census、NCC快,实时性比较强基于树结构的动态规划算法能有效地改善动态规划算法的条纹现象以及弱纹理区域和边缘存在的误匹配,下文将详细总结该方法。

(1) 什么是动态规划(DP)算法?

数塔问题是动态规划经典的题目:状态+状态转移方程(2个概念)。动态规划算法通常基于一个递推公式及一个或多个初始状态(递推公式可以代入数值找规律来得到)。


  如图2(a),求由顶至底的一条路径,使该路径经过的数字总和最大。图2(a)展示了动态规划的手工计算过程,即从最底层的阶段1开始,两两比较阶段1中数值的大小,并选取最大值作为到阶段2的路径,按照此思路一直进行到阶段5,求得数字总和最大的一条路径。为了方便用编程实现,将图2(b)中的结构用图2(c)的数组结构表示,假设图2(c)用map[][]数组保存,令f[i][j]表示从顶点(1,1)到顶点(i,j)的最大值。则可以得到状态转移方程:

f[i][j] = max(f[i+1][j], f[i+1][j+1]) + map[i][j],从下往上择优解。以上就是动态规划的基本思想。

#include <stdio.h>     
#include <iostream>   
#include <algorithm>
#include <cstring> 
using namespace std;   
 int a[100][100];    
int main()    
{  int t,n=6,i,j;    
    for(i=0; i<n; i++)    
      for(j=0; j<=i; j++)  
          scanf_s("%d",&a[i][j]);   
    for(i=n-1; i>0; i--)   
       for(j=0; j<i; j++)  
          a[i-1][j]+=max(a[i][j],a[i][j+1]);    
  printf("%d\n",a[0][0]); 
  return 0;  }  

(2)传统动态规划立体匹配算法

  动态规划立体匹配是基于极线约束,通过依次寻找每条极线上匹配点对的最小代价路径的动态寻优方法求解全局能量最小化,得到匹配视差图。算法分为以下几个步骤:阶段划分、状态确定、状态转移方程、求取最优解、记录该最优解下的路径。


a.阶段划分

  如图3(a)所示,对于每条扫描线,以像素点的行方向为横坐标,纵坐标表示每个像素点对应的视差值,依次将整个过程分为1,2…,k个阶段。

b.确定状态

  如图3(b)所示,有三种匹配状态:相互匹配记为M、左可见右遮挡为 L、右可见左遮挡为R。每一个阶段的状态就是对应像素点的匹配情况。

c.状态转移方程

  所谓状态转移方程就是根据前一阶段的状态确定当前阶段的状态,根据顺序性的约束,允许的状态转移的形式共有7 种。如图3(c)所示,0表示正确匹配,1、2表示匹配产生左图像遮挡点,4、5表示产生右图像遮挡点,3、6表示图像由背景进入前景,视差跳变产生并不连续点。

d.求取最优解

  在每条扫描线上,从左到右依次计算(全局能量函数)相似性测度函数和平滑函数的最小值,记录取得最小值时的匹配路径。传统的基于DP的立体匹配算法选用的能量函数形式如下,


其中E(data)用来判断匹配像素点之间的相似度,E(smooth)用来判断待匹配点与相邻像素点之间的连续性。由于E(data)的计算是建立在两个像素点相似度上,所以可以有很多种搭配方法,如文献《基于线性滤波的树结构动态规划立体匹配算法》中就结合TAD和梯度信息来计算相似度,可以对灰度图像也可以对彩色图像计算,理论上对彩色图像计算的话算法效率会变低,但精度会有所提高。而E(smooth)的计算则有一套标准,重点在于相邻像素点的选取上。传统DP算法在计算E(smooth)时只考虑同一扫描线上相邻像素间的连续性,因为造成“条纹现象”,因而出现了基于树结构的动态规划立体匹配方法。

(3)树结构动态规划立体匹配算法

具体可参考文献《Stereo matching using weighted dynamic programming on a single-direction》、《基于线性滤波的树结构动态规划立体匹配算法_储珺》(自动化学报)以及《基于动态规划的立体匹配算法研究_龚文》,英文那篇讲得很详细,后两篇作者好像是一个人。

其中自动化学报上《基于线性滤波的树结构动态规划立体匹配算法_储珺》这篇文献主要的创新点在于改变了匹配代价函数,引入了图像彩色信息和梯度信息。其他都没什么创新点,能发表在国内一级期刊上这就是审稿人的问题了。不过能实现出来还算不错。







展开阅读全文

没有更多推荐了,返回首页