罗大思,王进华
(福州大学 电气工程与自动化学院,福建 福州 350108)
摘要:根据立体匹配原理,采用双目摄像头对图像进行采集,通过对摄像机的标定和图像立体校正、图像分割与立体匹配得到最后的视差图;根据最后的视差图以及算法的速度来评价算法的性能。实验结果表明,图像的视差图十分接近真实视差图,效果明显。
关键词:立体匹配;图像分割;视差
中图分类号:TP391文献标识码:ADOI: 10.19358/j.issn.1674 7720.2016.20.013
引用格式:罗大思,王进华. 基于双目视觉的立体匹配算法研究[J].微型机与应用,2016,35(20):49 50,53.
0引言
立体匹配用于寻找两张图像中对应待求点或待求物体的共轭像点,图像的立体匹配实质上是为了解决同一物体的多幅图像信息在不同时间或空间位置下对应匹配像素点的问题。传统的匹配算法对于弱纹理的区域、遮挡区域及光照变化区域匹配效果都不是很好。本文以VS2012和OpenCV为开发平台,采用双目摄像头,利用MATLAB和OpenCV函数对摄像头进行标定,采用均值漂移(Mean Shift)对图像进行分割,利用分割的信息对图像进行立体匹配,以改善匹配的效果。实验结果表明该方法可以提升视差图的精确度,对于弱纹理区域的匹配也有较高的精度,使其更接近真实视差。
1立体匹配原理
立体匹配的过程就是在不同的位置对同一个场景的两幅或者多幅图像,寻找图像像素之间的对应关系[2]双目视觉中的立体匹配即是对左图像中的某像素,在右图像中寻找与它相同空间点对应的像素问题。在立体匹配中,通过记录视差值得到视差图像来表达这种对应关系,而立体匹配的输出就是视差图像[3]。立体匹配中会遇到很多挑战,比如弱纹理区域匹配的二义性,遮挡区域视差不连续处的匹配问题、实时性问题等,对于其中的一些问题,比如匹配精度、弱纹理区域匹配效果不好等,本文引入图像分割的方法去改善其匹配效果。
2图像分割
图像分割的实质就是求取每一个像素点的类标号,它的目的就是将图像划分为若干个子区域。如不同目标物体所占的图像区域、前景所占的图像区域等[4]。现在常用的分割方法有:漫水填充法、均值漂移法、分水岭、金字塔等;由于均值漂移分割方法精度较高,分割效果良好,因此本系统采用均值漂移分割方法[5]。
均值漂移分割步骤:
(1)模点搜索:所谓模点,即概率密度的极大值点,模点搜索就是将搜索框内的像素极大值点赋值给出发点,从而达到图像平滑的效果。
第一步:若迭代的次数达到默认值5次就直接执行第四步,否则进入下一步
第二步:对第一步幸存下来的点计算重心点,并朝重心爬。
第三步:判断是否概率密度极大值点,即模点,若是,则停止迭代。
第四步:将模点颜色赋值给出发点。
(2)合并相似区域:即将相似模点合并。
3立体匹配
3.1立体匹配步骤
立体匹配算法主要步骤由以下四步组成:匹配代价的计算、代价聚合、视差计算/优化、视差改良。
按照优化的方法可以将匹配算法分为局部匹配算法和全局匹配算法,分别执行不同的步骤。局部匹配算法:利用局部窗口的信息进行匹配代价的计算和代价的聚合,利用WTA策略计算视差。全局匹配算法:全局匹配算法则是通过构造一个与视差有关的能量函数,并优化和求解这个能量函数,使其达到最小,从而得到最终视差。
3.2基于图像分割的全局匹配算法
全局匹配算法核心是能量方程的构造与优化的过程,传统的全局立体匹配方法是以像素为基元进行能量方程的构造与优化,而基于图像分割的全局算法是以分割块为基元来创建和优化能量函数[6]。传统的能量函数方程如下:
其中D表示视差图,Edata(D)=∑p∈ΩLc(p,dp),ΩL表示图像中所有像素的集合,C(p,dp)表示像素p在视差dp下的匹配值,dp是视差图D中像素p对应的视差。平滑项中的权值因子λ等于0时就退化为局部的方法,平滑项同时关联两个像素,而每个像素视差会受其他像素的影响,这样会导致能量函数优化非常困难,并且对于弱纹理区域匹配效果也不好,需要采用其他优化方法求近似解。基于分割方法的能量函数方程如下:
其中:
R是所有分割区域的集合;S表示某个分割块;F是视差平面,由平面方程f构成,表示的是所有分割区域的平面模板分配;C表示分割区域在视差平面模板下的匹配代价。对于分割块S其对应的平面f可以用f(x,y,a,b,c)=a(x)+b(y)+c=d来求解其方程,其中x、y表示分割块内的像素坐标,a、b、c则是平面系数,d表示视差,通过区域内的像素点的初始视差值来计算上述参数。与传统的能量函数相比,新的能量函数构造的优点主要体现在: 有较高的计算效率,因为分割区域数会明显小于图像像素数;颜色的分割区域用视差平面方程来描述,可以改进弱纹理区域的匹配效果。
4实验平台
本系统采用的是外接USB口的双目摄像头,利用VS2012作为应用程序开发平台,调用OpenCV函数库来完成图像采集、标定、分割和匹配的功能,在标定的时候利用MATLAB标定工具箱来辅助标定。系统的具体处理过程为:图像采集、摄像机标定、立体校正、图像分割、立体匹配、输出视差。
5实验结果
图1标定棋盘图本系统分别采用OpenCV和MATLAB标定工具箱分别计算摄像机的内参和外参,分别对两次的标定结果进行比较以减小对后续实验的影响。
标定的结果如下:
左相机:
焦距:fc=[880.897 05880.500 975]
主点坐标:cc=[345.777 8265.974 27]
畸变向量:kc=[0.153 670.134 79-0.001 130.000 90.000 00]
像素误差:err=[0.172 420.290 22]
右相机:
焦距:fc=[882.051 00883.746 23]
主点坐标:cc=[310.907 04208.242 49]
畸变向量:kc=[0.154 590.019 71-0.020 10-0.000 570.000 00]
像素误差:err=[0.150 540.198 47]
用OpenCV函数CVCalibrateCamera2()标定出来的结果如下:
左相机:
焦距:fc=[907.417 04907.417 04]
主点坐标:cc=[319.500 0239.500 0]
畸变向量:kc=[0.126 94-0.408 89-0.013 91-0.008 950.000 00]
右相机:
焦距:fc=[907.417 04907.417 04]
主点坐标:cc=[319.500 0239.500 0]
畸变向量:kc=[0.091 1060.796 77-0.006 480.000 2310.000 00]
可以发现两次标定结果较为接近,可以近似认为此次标定结果是比较准确的。利用上述的标定参数,设定均值漂移参数空间半径为2,颜色半径为40,分割金字塔级数为2级,对比图2、3实验结果:图2是标准图像通过对比不同算法得到的实验结果,图3是对弱纹理图像以不同算法得到的实验结果。
对比本文算法和全局匹配算法的视差图与真实视差图可以看出,本文算法在细节轮廓上更接近真实视差图,比原始算法的视差图更为精确,特别是图3中的梯形弱纹理区域,通过对比视差图可以看出,全局匹配算法对这个区域的匹配效果不好,而本文算法对此区域有较大的改进。
图3弱纹理图像视差对比
6结论
基于分割的全局匹配算法,对于匹配的结果在精度上有提高,对于一些弱纹理区域也有很好的匹配效果。但此类算法也有其局限性,比如依赖分割的精度,分割区域内的像素点不一定全部都满足视差平面方程,引入图像分割后分割算法的时间过长不适合实时场景等,需要进一步研究和改进。
参考文献
[1] 毛星云,冷雪飞. OpenCV3编程入门[M]. 北京:电子工业出版社,2015.
[2] MATTOCCIA S. Stereo vision algorithms and applications[N].DISI University of Bplogna,2013-01-12.
[3] Yang Qingxiong.Hardefficient bilateral filtering for stereo matching[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2014,36(5):1026-1032.
[4] BRADSKI G, KAEHLER A. 学习OpenCV[M]. 于仕琪,刘瑞祯,译. 北京:清华大学出版社,2009.
[5] 赵荣椿,赵忠明,赵歆波. 数字图像处理与分析[M]. 北京:清华大学出版社,2013.
[6] 朱俊杰,杜小平,范涛涛,等. 三种图像分割算法的对比及图像分割方法的改进[J]. 计算机应用与软件,2014,31(1):194-200.