基于改进局部一致性约束的立体匹配算法
双目立体视觉模拟人的视觉系统,通过对同一场景下不同角度的两张图像进行图像处理重建三维结构[1],而立体匹配是其中最为核心的技术。立体视觉是指在同一场景中不同位置的两个相机获得左右两张图像,通过计算视图中同名像素点的视差获得深度信息[2]。近年来,研究者尽管对立体匹配进行了深入的研究,但在复杂环境下(如噪声腐蚀,光度畸变等)仍然难以获得精确匹配[3]。立体匹配在三维重建、目标检测[4]等领域的广泛应用[5]使之成为研究热点。目前立体匹配算法主要分为传统算法[6]和深度学习算法[7-8]。
传统方法一般分为代价计算、代价聚合、视差计算、视差优化4个步骤[9],主要分为全局方法和局部方法[10]。全局方法采用全局优化理论建立一个全局能量函数,函数最小值即最优的视差值。主要方法有信念传播[11]和动态规划[12-13]。全局方法准确率较高,但是计算量大,不适合实时应用[14]。相比之下,局部方法的目标函数只包含测量部分,其计算量较少,匹配速度快。常见的有Census变换[15-16]、SAD、PatchMatch等算法。此外,Hirschmüller提出半全局立体匹配算法(Semi-Global Matching,SGM) [17],该算法在计算函数能量最小化时使用一维最优近似二维最优,使算法效率得到极大提升。
基于深度学习[18]的立体匹配算法将推导视差图的过程视为分类问题或回归问题。例如,Zbontar[8]使用卷积神经网络(Convolutional Neural Networks,CNN)估计图像块的相似性,Nahar[19]提出了无监督的预训练网络估计分层特征。虽然深度学习方法准确度较高,但是目前的大多数方案使用的监督学习方法均是假设真实的视差值已知,而该假设在一些情况下是不成立的[20]。此外,深度学习方法在训练时需要大量的数据和时间,对算力要求较高,对于没有被训练过的陌生环境效果较差,并且不能很好地被移植到机器人和嵌入式系统中[21]。
与深度学习方法相比,传统方法遇到这类问题时的匹配效果更好。文献[22-23]等的算法均在与深度学习算法的比较中取得了优势。传统算法不用进行训练,计算开销较低。因此,本文对传统算法进行了改进。PMS[24]作为经典的传统算法使用随机初始化生成任意的平面参数来实现倾斜平面。虽然可以处理实际倾斜表面,但是该处理方法需要多次迭代,导致计算量极大且误匹配率较高。为解决这一问题,首先,本文通过稀疏匹配得到支撑点。其次,利用三角剖分划分支撑点为每个像素找到逼近正确解的平面参数。最后,为了得到更准确的视差,在代价聚合阶段采用迭代传播的方式构建出局部一致性平行窗口模型,减少了迭代次数同时降低了误匹配率。
2 算法描述
2.1 算法流程
本文算法流程图如图1所示。