基于双目立体视觉的目标物测距研究
2020-03-02杨晨曦华云松
杨晨曦 华云松
摘 要: 为了获取目标物体在空间中的三维信息,本文在双目立体测量原理的基础上,采取OpenCV和Matlab相结合的方法,设计了一个基于双目立体视觉的目标物体测距系统。该系统采取张定友棋盘标定法,使用Matlab内置的工具箱完成双目相机标定,采用SGBM(Semi-Global Block Matching)立体匹配算法在VS2017环境下结合 Opencv3.4.1库,对左右相机获得的图像进行立体匹配,生成视差图,将二维空间点重投影到三维空间中,实现二维坐标到三维坐标的转换,即可得到物体的三维点坐标。最终实现通过鼠标点选被测物体视差图后输出选定的空间三维坐标。实验结果显示,该系统的测量精度较高,并且在140 cm距离的测量精度最高。
关键词: 双目视觉;目标测距;三维测量;相机标定;立体匹配;重投影
中图分类号: TP317.4 文献标识码: A DOI:10.3969/j.issn.1003-6970.2020.01.028
本文著录格式:杨晨曦,华云松. 基于双目立体视觉的目标物测距研究[J]. 软件,2020,41(01):128132
【Abstract】: To get the spatial three-dimensional information of the target object in space, this paper takes the approach of stereo vision measuring principle and designs a target object ranging system based on binocular stereo system. This system is accomplished by the combination of Opencv and Matlab. The binocular camera calibration was accomplished by using the built-in toolbox of Matlab based on the Zhang Dingyou chessboard calibration method. By conducting SGBM (Semi-global Block Matching) stereo matching algorithm adopted in VS2017 environment and Opencv3.4.1, images obtained by left and right cameras are matched in stereo, then parallax map is generated, 2d space points are re-projected into 3d space, 2d coordinates are converted into 3d coordinates, and 3d point coordinates of objects can be obtained. Finally, select the parallax map of the measured object through the mouse and output the selected three-dimensional coordinates. Experimental results show that the measurement accuracy of the system is high, and the measurement accuracy is the highest at the distance of 140 cm.
【Key words】: Binocular vision; Target ranging; Three-dimensional measurement; Camera calibration; Stereo matching; Reprojection
0 引言
機器视觉作为一种人工智能识别系统,广泛应用于医学、工业、军事、农业等方向[1-3]。双目立体视觉测量系统在工业制造、科学研究等领域中已成为了一种不可或缺的基础工具[4],其可以在不接触目标物的前提下获取目标物体的立体信息。双目立体视觉测量方法具有高效率、高精度、简单结构、低成本等优点,相机标定、立体校正、立体匹配和三维重建是该技术的核心工作。
双目视觉系统采用张定友提出的棋盘标定法,通过双目相机拍摄获取左右目图像,利用MATLAB完成双目相机的标定,通过相机标定得到相关参数,在VS2017环境下结合Opencv3.4.1,利用SGBM[5](Semi-Global Block Matching)算法实现左右图像对的匹配,再进行视差计算生成视差图,最后再将二维坐标点重投影至三维空间内获得图像点的三维坐标[6]。
1 双目立体视觉测距离原理
双目视觉测量原理:利用位于不同位置的两个平行放置的相机获取被测物体的二维图像,通过三角几何原理计算图像像素之间的位置偏差(即视差),获取被测物体的三维信息,即P点的三维坐标。相机放置如图1所示。
P为空间中的一个目标点, , 是两个相机,相机焦距f,b为基线。要想得到P点的三维坐标,只需要求得P点在相机 中的成像点 及在相机 中的成像点 的坐标。当双目相机同时观察P点时,P点在左右相机内的成像点坐标分别为 , ,则根据图1可利用三角形相似定律可得。
即若在左相机平面中任选一点对应右相机平面上有且只有一点与之对应,则可以确定该点在相机坐标系的坐标,进而确定该点在空间中的坐标值。
2 相机标定
2.1 相机标定原理
双目立体视觉测量被测物体的三维信息,会涉及到各个坐标系的转换,该系统需要用到的坐标系包括:世界坐标系、图像坐标系、像素坐标系和相机坐标系[7-9]。基本方案是通过选定的相机模型,通过事先检测获得的点的图像坐标和世界坐标,计算相机的模型参数,从而得到相机的投影矩阵[10-11]。
图像坐标系分为图像平面坐标系和平面像素坐标系。图像平面坐标系的单位是物理单位,通常以毫米为单位,图像像素坐标系是以像素为单位,它们的转换关系如下。
世界坐标系是将空间中任意一点定义为坐标原点的坐标系,相机坐标系是以镜头光心为原点建立的直角坐标系,其中图像坐标系的 轴与 轴分别平行于 轴与 轴, 轴与图像平面垂直。如图2所示。
2.2 摄像机标定
本文通过Matlab工具箱得到相机内外参数和畸变参数。为了获得较为准确的标定信息,采取先单目标定再双目标定的方法,并且通过改变标定板的位置、摆放角度以及标定板和相机之间距离的方式,拍摄了17对共34张标定图,双目相机标定所用的标定板的棋盘格大小为24×24 mm,角点数为9×6,图像大小为1280×960。其实现过程如下。
(1)在matlab里输入calib_gui分别读入左右相机拍摄的17对棋盘格照片,分别对左右相机进行标定。如图3所示。
(2)成功读入所选照片后,点击Matlab工具箱中Extract grid comers键,选取标定图片的角点,如图4所示。
(3)选取角点之后,点击工具箱中的Calibration键,对单个相机进行标定,并依次对左右相机按上述步骤进行操作,得出对应相机的内参数。
(4)单目相机标定后,输入指令stereo_gui可以出现双目标定工具箱,依次读入左右相机的参数后对双目相机进行标定,最终得到平移向量 和旋转向量R,即可求得两相机之间的位置关系。
3 立体校正
当左右两相机的图像平面完全共面时,此时进行行对准,立体匹配就会只在行间进行搜索,这样就可以过滤掉无法匹配的点。但是实际情况下中,由于摆放误差的存在,两个相机几乎很难完整的共面以及行对准,所以,对左右图像进行校正[12]就是不可避免的一个环节。OpenCV中的cvStereoRectify函数可以达到对图像进行立体校正的效果,将相机标定后的相机内参数,畸变参数,旋转矩阵和平移向量输入到此函数中,得到行对准校正后的旋转矩阵,左右相机投影矩阵P以及重投影矩阵Q。然后分别对左右图像调用函数cvInitUndistortRectifyMap,该函数返回映射矩阵,再对图像进行校正,最后调用函数cvRemap,得到非畸变图像。图6所示为经过立体校正后的左右图像,这样只需在同一行上搜索匹配的点即可。
4 立体匹配
在双目立体视觉系统中,立体匹配[13]是一个关键技术,它是通过两个相机同时获取同一场景的立体图像,寻求左右图像之间一一对应的关系,匹配两个图像上对应的点,从而得到视差图。立体匹配有多种方式,根据立体匹配的几何约束和场景约束,匹配算法可以分为基于局部、全局、半全局的匹配算法,局部匹配算法快速简单,但是得到的视差图粗糙,易造成误匹配且对噪声敏感;全局匹配算法[14]精度高,计算相比于局部匹配复杂。半全局的匹配算法结合了两者的优势,使算法性能在视差精度和计算复杂度上达到一个中和的、较好的效果[15]。
本文选用的SGBM算法是基于互信息计算匹配代价,根据相邻像素点之间的视差梯度[16-17]信息,为初始匹配代价施加不同的惩罚项,采用平滑约束[18],引用动态规划算法[19]搜索最优路径,求解视差。
式(8)中,和分别是扫描线上的像素点,为左扫描线上的点处的灰度,为右扫描线上的采样点线性内插得到的;②匹配代价的聚合:通过沿8个方向扫描线上分别计算匹配代价,每个路径的间隔為45°,然后将所有扫描线路径的匹配代价进行聚合;③视差的计算:通过迭代得到计算视差,用随机的视差影像来校正右图像,然后再进行匹配,获得新的视差图;④视差的优化处理:左右图像匹配后,利用右图像的点去匹配左图像中对应的点,如果两次匹配的视差不相同,则将该误匹配[20-21]的点剔除。
5 实验结果
通过选取左右相机拍摄的各17张棋盘格图 片进行相机标定实验,所得到的内外参数如表1所示。
在进行了相机标定之后,即可求得目标的坐标值。该系统是通过点击鼠标来确定选定的点,点的位置可能会存在不同,但由于取的点在一个平面内,所以只求Z坐标即可,即通过测量目标点距离光心的距离来验证实验结果的准确度。通过5组试验的结果可知,在物体距离相机光心的距离在140 cm时误差是最小的。随着距离的增大或减小,测量的精度都在降低。测量结果如表2所示。
6 结论
本文基于双目立体视觉的测量原理,主要研究了如何用双目视觉测量物体的深度信息。对摄像机标定,立体校正,立体匹配等技术进行了研究,在Matlab中实现了双目相机的标定,并在VS2017环境下结合Opencv3.4.1实现了该系统。该系统可以生成待测物体的视差图,通过点击视差图上对应的点得到空间中对应的三维坐标。通过多次实验可知,该方法在测量距离相机140 cm时测量精度较高,待测物接近相机或者远离相机时测量精度降低。
参考文献
[1] 张国福, 沈洪艳. 机器视觉技术在工业检测中的应用综述[J]. 电子技术与软件工程, 2013(22): 111-111.
[2] 师红宇, 任小玲. 基于机器视觉的棉花异性纤维识别方法[J]. 软件, 2018, 39(2): 32-34.
[3] 李沫. 视觉检测系统在汽车仪表自动化测试方面的应用[J]. 软件, 2018, 39(5): 126-128.
[4] 彭俊善. 基于數字图像处理技术建筑工地钢筋计数的方法[D]. 深圳大学, 2017.
[5] Hirschmüller H. Stereo Processing by Semiglobal Matching and Mutual Information[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2007, 30(2): 328-341.
[6] 董默, 赵若晗, 周志尊, 等. 医学图像三维重建系统设计与应用[J]. 软件, 2018, 39(1): 87-90.
[7] 马颂德, 张正友. 计算机视觉: 计算机理论与算法基础[M]. 北京: 科学出版社, 1998: 72-75.
[8] 曲学军, 张璐, 张凌云. 基于新的成像模型的摄像机标定与三维重建[J]. 仪器仪表学报, 2011, 32(8): 1830-1836.
[9] 夏茂盛, 孟祥磊, 宋占伟, 等. 基于双目视觉的嵌入式三维坐标提取系统[J]. 吉林大学学报: 信息科学版, 2011, 29(1): 61-66.
[10] 于勇, 张晖, 林茂松. 基于双目立体视觉三维重建系统的研究与设计[J]. 计算机技术与发展, 2009, 19(6): 127-131.
[11] 匡斌, 何超明. 磁共振成像虚拟扫描技术的发展及趋势浅谈[J]. 磁共振成像, 2011, 2(3): 218-223.
[12] 张曙, 华云松. 基于双目立体视觉的目标物定位研究[J]. 软件导刊, 2018.
[13] 张力, 黄影平. 实时双目立体视觉系统的实现[J]. 电子科技, 2016(3).
[14] 郭龙源, 罗百通, 欧先锋, 等. 自适应窗口和半全局立体匹配算法研究[J]. 成都工业学院学报, 2017(1).
[15] 孙道辉, 孙丽君, 陈天飞. 基于OpenCV的双目立体匹配方法[J]. 软件导刊, 2018, 17(09): 92-94+100.
[16] 解则晓, 陆文娟. 基于图像相似几何特征的双目匹配算法[J]. 中国激光, 2014, 41(5).
[17] 洪奔奔, 管声启, 任浪, 等. 基于特征提取与匹配的带钢缺陷检测[J]. 软件, 2018, 39(9): 31-34.
[18] 徐欢欢. 基于能量函数的图像分割方法的研究[D]. 中国科学技术大学, 2009.
[19] 黄松梅, 毕远伟, 许晓. 双目立体匹配算法的研究与实现[J]. 鲁东大学学报: 自然科学版, 2018(1): 25-30.
[20] 林森, 殷新勇, 唐延东. 双目视觉立体匹配技术研究现状和展望[J]. 科学技术与工程, 2017(30): 140-152.
[21] 胡雨豪,刘波. 基于机器视觉的四轴飞行器自主巡航算法改进[J]. 软件, 2018, 39(2): 52-56.