双目视觉地图像立体匹配系统说明书文档.docx
《双目视觉地图像立体匹配系统说明书文档.docx》由会员分享,可在线阅读,更多相关《双目视觉地图像立体匹配系统说明书文档.docx(25页珍藏版)》请在冰豆网上搜索。
双目视觉地图像立体匹配系统说明书文档
双目视觉的图像立体匹配系统文档
1引言
计算机视觉技术的发展将光与影的艺术和计算机的逻辑性紧密结合起来,而双目立体视觉技术更将这种结合从平面二次元上升到立体的角度,为我们的生产生活提供了新的技术和工具,例如已经被普遍运用的3D电影技术,研发中的虚拟现实、谷歌视觉眼镜、汽车自动驾驶技术,即将上市的淘宝虚拟实景购物等,不断改变着我们的生活,另外双目立体视觉在军事、医学、工业等领域都有其重要的作用,是机器感知物体几何层级的基础,因此对双目视觉的理论研究成为推动立体视觉乃至计算机视觉技术在各个领域创造更高价值的重要因素。
在双目视觉的研究和运用中,最重要的一个阶段无疑为将平面图像转化为可计算机可识别的立体模型,这里将用到立体匹配技术,目前双目视觉研究领域用到的立体匹配算法及其衍生算法有很多种,算法的效率和匹配精度将直接影响到算法运用的响应时间和准确度[1],当今各种视觉智能设备的发展需要将立体匹配过程直接嵌入到单片机中,这种场景下,算法的效率和匹配精度将直接决定不同运算性能的嵌入式设备的选择和产品推广后的用户体验度,也将直接决定设备成本,因此研究出更加速度快、精度高的立体匹配算法在各领域都具有划时代的重要意义。
2系统方案设计
2.1双目视觉的图像立体匹配系统
说起立体视觉系统,要从人的双眼说起,人眼是一个典型的双目视觉系统,每只眼睛是一个摄像机,两只平行的眼睛是两台平行的摄像机,因为两只眼睛的位置不同,看到的图像是有差异的,这个差异就是立体视觉的基础,视觉信号传入大脑,大脑利用其强大的匹配能力,就可以基本确定图像中的物体的立体信息,或者叫做图像的深度信息。
随着人们知识和生产生活的发展,需要通过仿真立体视觉的原理,让计算机获取到图像从2D向3D发展,即获取图像的深度信息,以实现一些和空间视觉有关的需求,这就出现了机器立体视觉技术。
图2.1立体视觉原理示意图
如图2.1是一张立体视觉原理示意图,O1和O2为两台摄像机,物体上的点p12分别对应左右图像上点p1和p2,通过算法找到图像左右图像上对应的点p1、p2,这个过程则是立体匹配。
求解p1、p2、p12构成的三角形,我们就能得到点p12的坐标,也就能得到p12的深度[6],如图2.2所示。
图2.2标准双目视觉系统投影成像示意图
其中,点
和点
分别是左右两个摄像头的光学中心位置,即两个摄像头成像坐标系的光学原点,f为左右两个摄像头的焦距,在这里,点A(X,Y,Z)以
为坐标中心,左摄像头成像坐标系为坐标系,由相似三角形的性质,有:
(21)
则
(22)
因此找到点A在左右图像上对应的
和
则是重中之重,一个好的立体匹配算法对双目视觉系统起到了决定性作用,我们将在本文接下来的章节对最有代表性的算法做具体介绍。
双目立体视觉之间模拟了人眼视觉构造,因此双目视觉在各个领域都具有广泛的运用,比如机器人导航领域,双目视觉可以被运用在汽车自动驾驶,机器人自动导航;在虚拟现实领域,通过对双目视觉的研究,人们可以虚拟出立体视觉,极大丰富了人类生活;在航空航天领域,双目视觉已经运用在飞行器自动导航和飞行器避障;在工业上,双目视觉被运用在机械自动化制造,工业监测等方面。
一个完整的双目立体视觉系统通常包括图像获取、摄像机标定、图像矫正、立体匹配和深度恢复五个方面:
(1)图像获取通过模拟双目的方式,利用平行的两台摄像机对左右眼图像进行获取。
(2)立体标定通过图像特征点获取,建立摄像机的几何成像模型
(3)图像矫正把实际中非共面行对准的两幅图像,校正成共面行对准,因为当两个图像平面是完全共面行对准时,计算立体视差是最简单的[7]
(4)立体匹配通过算法对图像进行立体匹配,建立图像的立体模型。
深度恢复通过匹配结果,恢复图像的立体感。
2.2双目视觉的图像立体匹配系统框图
在进行图像的立体匹配之前,需要得到可匹配的图像,既使得左右双眼图片在平面上完全行对准,这时计算立体视觉差是最简单的,而这种行对准图像是可以通过图像校正完成的,但由于每对摄像机的参数(位置、畸变等)不同,在校正时需要拿到摄像头的标正值,因此在校正前需要对摄像头进行标定。
总的流程图如图3.1所示:
图3.1系统设计框图
通过采集左右摄像头的图像和标定图像进行反复对比标定,得到图像的标定参数,进而进行图像校正,校正后的图像即可通过立体匹配算法进行深度匹配。
3设备选型及硬件系统详细设计
3.1设备选型
本系统选用不同型号的两个摄像头作为双目视觉采集摄像机。
3.2硬件系统设计
系统所用硬件系统配置如下:
PC:
四核i5处理器、4Gb内存、显示卡2GRAM
4软件设计及测试
4.1开发环境
编译器:
VS2015、MATLAB2015B
视觉库:
OpenCV3.0
4.2概要设计
4.2.1流程图
4.2.2主要函数及实现功能
4.3详细设计
4.3.1图像采集
本论文采用MATLAB对双目图像进行采集,摄像机用到是视觉平行的两台摄像头,如图4.1所示:
图4.1图像采集用的双目摄像头
说明:
将摄像头使用USB连接线与电脑相连接,使用matlab在同一时间对图像进行采集,为了摄像头标定参数无变化,整个实验过程中需要保持摄像头位置不变,否则实验会不准确。
4.3.2立体标定
在实际拍摄中,有的摄像头会产生畸变,且采集到的图像极线相交,为了降低后续图像匹配的难度,我们需要得到两个摄像头的焦距、主点坐标、倾斜系数、畸变系数以及它们之间的旋转矢量,现多采用张定友棋盘格标定法对摄像头进行标定,他利用了摄像头拍摄的图像与实物间存在线性关系,表达式如下:
(4.2)
其中,K代表摄像机的内参数矩阵,[uv1]表示实物投影到图像平面上的齐次坐标,[r1 r2 r3]和t是摄像机的外参数,分别代表以摄像机为中心的坐标系相对世界坐标系的旋转矩阵和平移向量。
采用棋盘格能够得到多个角点的位置,解方程组得到摄像机的内外参数[15]。
Opencv3.0和MATLAB的标定都采用了张定友定标法,因为MATLAB标定工具箱较OpenCV3.0标定结果更为准确,因此,本文采用MATLAB对摄像机进行进行标定,本文用14*14,以20mm为边长的黑白棋盘格进行标定,如图4.3所示:
图4.314*14,20mm为边长的棋盘格标定图像
标定具体步骤如下:
(1)使用左右摄像头采集同一时间下同一标定板图像,采集过程中,应让标定图像处于摄像头视野的中间位置
(2)分别读取摄像头图像对两个摄像头进行单独标定,本文采集了15张标定图完成标定,每个摄像头的标定结果单独储存。
(3)将左右摄像头mat文件读入MATLAB的标定工具箱,进行立体标定。
标定图像如下图4.4和4.5
图4.4左摄像头标定图像集
图4.5右摄像头标定图像集
单摄像头标定结果
表4.1左摄像头标定结果
参数
结果
焦距
主点
倾斜系数
畸变
像素误差
[937.38917.06]±[10.688.93]
[409.05279.03]±[11.6314.39]
[0.00]±[0.00]
[-0.186431.695050.011210.022100.00000]±[0.065980.595570.005550.004470.00000]
[0.155280.19454]
表4.2右摄像头标定结果
参数
结果
焦距
主点
倾斜系数
畸变
像素误差
[927.22907.05]±[11.028.93]
[337.29280.35]±[13.0615.06]
[0.00]±[0.00]
[-0.01803-0.433910.009650.014150.00000]±[0.059570.367020.005970.004840.00000]
[0.426020.53865]
如图4.6和4.7分布表示标定时棋盘标定板和两个摄像机的位置关系:
图4.6棋盘标定板与左摄像机位置关系
图4.7棋盘标定板与右摄像机位置关系
立体标定结果
读取左右摄像机的标定参数,进行立体标定后,其结果如表4.3所示:
表4.3立体摄像头标定结果
摄像头
参数
结果
左摄像头
焦距
主点
倾斜系数
畸变
[919.29901.54]±[6.886.35]
[402.30258.05]±[11.2410.12]
[0.00]±[0.00]
[-0.01803-0.433910.009650.014150.00000]±[0.059570.367020.005970.004840.00000]
右摄像头
焦距
主点
倾斜系数
畸变
[919.29901.54]±[6.886.35]
[402.30258.05]±[11.2410.12]
[0.00]±[0.00]
[-0.231972.36790-0.002650.017690.00000]±[0.066210.793310.003990.003760.00000]
双目摄像头
旋转矢量
转化矢量
[0.048870.018640.01890]±[0.014960.016100.00116]
[101.424.24-11.01]±[0.650.775.33]
双摄像机与棋盘标定板的位置关系如图4.8所示:
图4.8双摄像机与棋盘标定板的位置关系
4.3.3校正
为了在立体匹配时,左右摄像机图像的平面是行对准的,需要对图像进行校正,而图像校正,使用OpenCV3.0图像库里的bouguet算法比较适合,采用bouguet算法比利用摄像机标定参数,对图像进行校正[16],其过程如图4.9所示:
图4.9图像校正过程
实现过程如下:
分别读取立体标正后的标定参数,之后使用OpenCV3.0自带的库进行消除畸变和图像校正
矫正的结果分别对比4.10和4.11可知,如图4.10和4.11分别为左摄像机和右摄像机校正前后的图像对比:
图4.10左右摄像机校正前
图4.11左右摄像机校正后
4.3.4立体匹配
经过校正后的图像左右平面为行对准的,之后即可使用不同的立体匹配算法对左右图像进行立体匹配,为了之后做算法的效率和匹配精度的性能分析,本文在算法运行的同时,通过打印时间戳的方法获取其运行时长。
并通过操作系统监控其对内存、cpu的占用情况。
基于图像分割的置信传播立体匹配算法匹配
图4.12算法流程图
局部匹配求初始视差图
由于优化方式不同,立体匹配通常可以分为局部匹配和全局匹配算法[17]。
本文首先采用局部匹配算法求得初始视差图。
要判断两个像素点的相似度,仅凭单个像素显然是不够的。
当两个像素块反映同一个场景时,这两个像素块的像素值就会比较相似。
最常见的图像块是边长为奇数的正方形,关键点位置就是正方形的中心,可通过比较两个块内像素的匹配代价函数,来衡量两个正方形图像块的相似度。
经典的局部匹配代价函数有绝对误差和算法SAD、误差平方和算法SSD和归一化积相关算法NCC。
(3.2)
其中,
、
分别表示(i,j)处子图、模板的平均灰度值。
算法SAD和SSD实现较简单,运行时间短,但容易受到光线等影响,影响匹配精度,因此本文采用NCC算法求初始视差图。
得到初始视差值后,为剔除匹配不正确的点,本文采用一致性校验法校验视差图,即先以左摄像头采集图片作为目标图片,右摄像头采集图片作为待匹配图,在右图求得与左图像素点匹配的点后,再以右摄像头图片作为目标图片,在左图求得与右图像素点匹配的点,若两次匹配后找到的点一致,则视为正确的匹配点,若不一致,则一定至少有一次匹配是错误的,则剔除该点得到的视差值。
(二)利用meanshift分割图片的分割结果拟合各像素块
经过meanshift分割图片后视各图片模块在同一平面,根据各区域内校验后仍为正确的视觉点,计算出各区域内的视觉方程,并组成视觉模板集。
(三)通过置信传播算法,进行全局最优分配
第二步中获取的视觉平面模板只是根据各个区域内部视差分布而获得的,并没有考虑区域间的相互作用,存在较大误差,之后需要使用置信传播算法对其进行全局匹配,将每个视觉模板作为一个节点,利用全局的置信传播进行不断的迭代推算,直到最终收敛。
利用surf算子的特征提取立体匹配算法匹配
图4.13算法流程图
(一)直方图均衡化
普通摄像头拍摄的照片常常会出现这样的情况,在某些强度值出现的频率比其他强度值高,呈现出来的照片会是灰蒙蒙的。
通常情况下,一张图片各像素的强度值都均衡分布,才会被认为是一张质量高的图片。
在这种情况下,便需要用直方图均衡化使图片的直方图居于平稳。
但是直方图均衡化也有它的缺点,就是容易模糊掉有的像素点,而在图像本真像素非常重要的双目视觉立体匹配中,我们无法确定直方图均衡化对匹配的影响是否会利大于弊。
于是本文用OpenCV3.0中提供的equalizeHist函数进行直方图均衡化处理,比较均衡化前后对立体匹配的影响。
(a)直方图均衡化前立体匹配结果
(b)直方图均衡化后立体匹配结果
图4.14直方图均衡化前后立体匹配结果的比较
分别对A、B、C三组不同立体图像对进行试验,所得结果如下,其中,A
(1)、B
(1)、C
(1)分别为直方图均衡化前的匹配结果,A
(2)、B
(2)、C
(2)为对应的立体图像对直方图均衡化后的匹配结果。
表4.5直方图均衡化前后立体匹配结果比较
实验图片
总特征点数
正确匹配数
正确率
A
(1)
A
(2)
B
(1)
B
(2)
C
(1)
C
(2)
16
51
9
12
22
46
10
45
8
11
15
36
62.5%
88.24%
88.89%
91.67%
68.18%
78.26%
由表4.5可得,直方图均衡化后surf算子特征点匹配数增多,正确率提高。
(二)匹配特征点后优化,排除匹配错误的点,得到离散的视差图,通过双线性插值得到最终视差图。
特征点优化利用的是RANSAC算法,该算法利用少量数据集,对特定的数学实体进行估算,利用不少于8个匹配对来估算基础矩阵,剩下的匹配对均以这个基础矩阵为标准来衡量,不满足时则舍弃。
因此当8个匹配对自身正确率不高时,留下的支撑对也会越来越少,因此找到正确的8个匹配对很重要。
本文利用OpenCV3.0的findFundamentalMat()函数找到正确的基础矩阵。
运行效果如下图所示:
(a)RANSAC优化前匹配结果
(b)RANSAC极线优化后匹配结果
图4.15RANSAC优化前后对比
去掉匹配错误的点后,就可以求特征点的视差了,由于之前已经完成校正,因此两张图的极线是平行的,可直接通过特征点横坐标相减得到视差值,此时的视差值还是离散的,需根据实物的数学形态等进行插值,即可得到最终的视差图。
4.4结构化实现
4.4.1代码
4.4.2测试
本次设计一共进行了四组实验,前三组利用middlebury[16]网站得到的标图分别用两种算法进行匹配,第四组实验使用双目摄像头采集图片,经过相同的标定、校正过程,最后两种不同的算法实现匹配,
四组对照试验组的匹配结果如下。
1、基于图像分割的置信传播立体匹配算法匹配结果
第一组:
左视图右视图匹配图
图4.16第一组试验结果图
第二组:
左视图右视图匹配图
图4.17第二组试验结果图
第三组:
左视图右视图匹配图
图4.18第三组试验结果图
第四组:
左视图右视图匹配图
图4.19第四组试验结果图
2、SURF算子的特征提取立体匹配算法匹配结果
第一组:
左视图右视图匹配图
图4.20第一组试验结果图
第二组:
左视图右视图匹配图
图4.21第二组试验结果图
第三组:
左视图右视图匹配图
图4.22第三组试验结果图
第四组:
左视图右视图匹配图
图4.23第三组试验结果图
5总结
近些年来,计算机视觉技术飞速发展,被广泛运用在工业、医学、军事、生活领域,双目视觉是计算机视觉技术的一个重要分支,在计算机视觉的研究领域慢慢从2D向3D转换的同时,双目视觉的理论研究成为新技术的产生提供理论基础,作为双目视觉最基本的一环:
立体匹配技术,研究其实现方式既匹配效率和匹配精度等问题对促进双目视觉在研究领域和工业领域的发展将具有重大的意义。
本文主要介绍了双目视觉的图像立体匹配系统的实现过程。
本文在搭建双目视觉视觉采集系统之后,基于MATLAB和VS平台,结合OPENCV视觉库,使用双摄像头对双目图像进行标定、校正,然后分别使用基于图像分割和置信传播的立体匹配算法、基于SURF算子的特征提取匹配算法的立体匹配算法对图像进行立体匹配。
参考文献
[1]周武面向智能移动机器人的同时定位与地图创建研究[A]
[2]SebastianThrun谷歌无人驾驶汽车编程[M]
[3]刘伟光双目视觉立体匹配算法研究[A]
[4]杨苗基于双目立体视觉的3D检测系统优化研究[A]
[5]刘冬冬基于双目视觉和CamShift算法的目标检测与跟踪[A]
[6]罗丹廖志贤基于OpenCV的双目立体视觉测距[J]大众科技2011年4期
[7]吕顺华多视频多图像实时配准[A]
[8]李乾坤面向内容安全监控的视频指纹提取方法研究[A]
[9](美国)布拉德斯基学习OpenCV[M]清华大学出版社
[10](美国)布拉德斯基学习OpenCV[M]清华大学出版社
[11]OpenCV官方网站http:
//opencv.org[OL]
[12]郗瑶颖基于立体视觉的指尖定位与人机交互技术研究[A]
[13]李金凤立体匹配算法的研究[A]
[14]董小铨基于双目视觉的人体运动跟踪及三维重建的研究[A]
[15]韩超双目立体视觉匹配的研究[A]