基于OpenCV的双目立体视觉测距
- 格式:doc
- 大小:15.50 KB
- 文档页数:4
第三章图像预处理
能够去除高频信号时又保留有用的信号。
(3)二维高斯函数的参数or决定了它的平滑程度,盯越大平滑程度就越好。
(4)二维高斯函数卷积可分两步来进行,即通过两个一维高斯滤波器逐次沿水平和垂直方向进行卷积来实现。
由于二维高斯函数具有以上优点,它在图像处理中特别是在除去服从正态分布的噪声方面发挥了重要作用
3.4基于OpenCV的图像预处理
为了降低图像噪声或失真,通常采用较为简单的“平滑处理"来处理图像。
平滑处理的方法很多,Op饥CV中有关图像平滑就提供了5种不同的操作方法,所有操作都可通过函数cvSmooth()来实现,函数声明如下:
voidcvSmooth(
constCvArr*SIC,
CvAn,*dst,
intsmoothtype=CV_GAUSSIAN,
intpan吼l--3,
intparam2--O,
doubleparanL3=0,
doubleparam4=O
);
其中参数src是平滑操作的输入图像,参数dSt为输出结果,cvSmoothO函数中包含的paraml,param2,param3,param4等4个参数的含义取决于参数s疆noothtype的取值,这些值的含义如表3.1所示:
24。
OpenCV学习笔记(11)OpenCV+MFC的双目视觉测距与景深实现之问题探讨展开全文OpenCV学习笔记(11)OpenCV+MFC的双目视觉测距与景深实现之问题探讨学习OpenCV快3个月了,主要是根据课题需要实现双目视觉测距、景深重建和目标(障碍物)检测。
目前已经能实现摄像头定标和校正、双目匹配、获取视差图和环境景深图像,但是在测距方面还没有精确实现,主要是还没彻底弄清楚摄像头定标,有几个问题希望能和大家探讨下:1、进行摄像头定标时,棋盘方格的实际大小 square_size (默认为 1.0f )的设置对定标参数是否有影响?具体地,假如棋盘方格大小的 3 cm,那么 square_size 就应该设置为 30.0f 吧?另外,定标所得的摄像头内参数,即焦距和原点坐标,其数值单位都是一致的吗?怎么把焦距数值换算为实际的物理量?2、在使用cvStereoCalibrate 进行双摄像头定标时,flags 的设置怎样才是最优?我目前的设置是 CV_CALIB_FIX_ASPECT_RATIO +CV_CALIB_FIX_PRINCIPAL_POINT +CV_CALIB_SAME_FOCAL_LENGTH同样地,怎么把定标得到的两个摄像头之间的平移矩阵参数Transaction_matrix 转换为实际的物理量?其中的 Tx 值应该是两个摄像头成像原点之间的距离,根据公式 Z = f*Tx/(d-(Cxl-Cxr)) 来测算目标距离。
3、关于 cvStereoRectify 函数在双目校正(Stereo Rectification)上,我目前使用的是BOUGUET 方法,即cvStereoRectify 函数,因为要获取景深图像,所以cvStereoRectify 函数要输出一个变换矩阵Q,并且最后的参数flag 我设置为0,而不是CV_CALIB_ZERO_DISPARITY。
这样设置应该没问题吧?(1)校正后得到的变换矩阵Q,Q[0][3]、Q[1][3]存储的是校正后左摄像头的原点坐标(principal point)cx和cy,Q[2][3]是焦距,Learning OpenCV 书中说是“Here the parameters are from theleft image”,但为什么与 cvStereoCalibrate 得到的左摄像头内参数据不同呢?(2)如上图公式所示,按照 Learning OpenCV P435给出的 Q 矩阵,计算距离Z 的公式是带负号的,但这与P436 给出的对应公式刚好是反号了的!4、关于双目匹配求取视差图OpenCV提供了两个函数来进行双目匹配、获取视差:cvFindStereoCorrespondenceBM 和cvFindStereoCorrespondenceGC。
学习笔记:使⽤opencv做双⽬测距(相机标定+⽴体匹配+测距).最近在做双⽬测距,觉得有必要记录点东西,所以我的第⼀篇博客就这么诞⽣啦~双⽬测距属于⽴体视觉这⼀块,我觉得应该有很多⼈踩过这个坑了,但⽹上的资料依旧是云⾥雾⾥的,要么是理论讲⼀⼤堆,最后发现还不知道怎么做,要么就是直接代码⼀贴,让你懵逼。
所以今天我想做的,是尽量给⼤家⼀个明确的阐述,并且能够上⼿做出来。
⼀、标定⾸先我们要对摄像头做标定,具体的公式推导在learning opencv中有详细的解释,这⾥顺带提⼀句,这本书虽然确实⽼,但有些理论、算法类的东西⾥⾯还是讲的很不错的,必要的时候可以去看看。
Q1:为什么要做摄像头标定?A: 标定的⽬的是为了消除畸变以及得到内外参数矩阵,内参数矩阵可以理解为焦距相关,它是⼀个从平⾯到像素的转换,焦距不变它就不变,所以确定以后就可以重复使⽤,⽽外参数矩阵反映的是摄像机坐标系与世界坐标系的转换,⾄于畸变参数,⼀般也包含在内参数矩阵中。
从作⽤上来看,内参数矩阵是为了得到镜头的信息,并消除畸变,使得到的图像更为准确,外参数矩阵是为了得到相机相对于世界坐标的联系,是为了最终的测距。
ps1:关于畸变,⼤家可以看到⾃⼰摄像头的拍摄的画⾯,在看矩形物体的时候,边⾓处会有明显的畸变现象,⽽矫正的⽬的就是修复这个。
ps2:我们知道双⽬测距的时候两个相机需要平⾏放置,但事实上这个是很难做到的,所以就需要⽴体校正得到两个相机之间的旋转平移矩阵,也就是外参数矩阵。
Q2:如何做摄像头的标定?A:这⾥可以直接⽤opencv⾥⾯的sample,在opencv/sources/sample/cpp⾥⾯,有个calibration.cpp的⽂件,这是单⽬的标定,是可以直接编译使⽤的,这⾥要注意⼏点:1.棋盘棋盘也就是标定板是要预先打印好的,你打印的棋盘的样式决定了后⾯参数的填写,具体要求也不是很严谨,清晰能⽤就⾏。
之所⽤棋盘是因为他检测⾓点很⽅便,and..你没得选。
《基于双目立体视觉的测距算法研究》篇一一、引言随着计算机视觉技术的快速发展,双目立体视觉在机器人导航、自动驾驶、三维重建等领域得到了广泛应用。
其中,测距技术作为双目立体视觉的核心技术之一,其准确性和实时性直接影响到整个系统的性能。
本文旨在研究基于双目立体视觉的测距算法,以提高测距的准确性和稳定性。
二、双目立体视觉基本原理双目立体视觉通过模拟人眼立体视觉的原理,利用两个相机从不同角度获取同一场景的图像,然后通过图像处理技术恢复出场景的三维信息。
其基本原理包括摄像机标定、图像获取、特征提取、立体匹配和三维重建等步骤。
三、测距算法研究现状目前,基于双目立体视觉的测距算法主要包括基于特征匹配的测距算法和基于深度学习的测距算法。
其中,基于特征匹配的测距算法通过提取图像中的特征点,然后利用立体匹配技术计算特征点在两个相机中的视差,从而得到物体的距离信息。
而基于深度学习的测距算法则通过训练深度学习模型,从图像中直接学习出距离信息。
四、本文提出的测距算法本文提出了一种基于特征匹配和深度学习的混合测距算法。
该算法首先通过摄像机标定获取相机的内外参数,然后利用特征提取算法提取图像中的特征点。
接着,采用一种改进的立体匹配算法对特征点进行匹配,得到视差图。
最后,结合深度学习模型对视差图进行优化,得到更加准确的距离信息。
五、算法实现与实验结果在算法实现方面,我们采用了OpenCV等开源库进行图像处理和摄像机标定。
在特征提取和立体匹配方面,我们使用了一种改进的SIFT算法和基于区域的立体匹配算法。
在深度学习模型方面,我们采用了卷积神经网络(CNN)对视差图进行优化。
在实验方面,我们使用了多种场景下的实际图像进行测试。
实验结果表明,本文提出的混合测距算法在各种场景下均能取得较好的测距效果,且准确性和稳定性均优于传统的基于特征匹配的测距算法和基于深度学习的测距算法。
六、结论与展望本文提出了一种基于双目立体视觉的混合测距算法,通过结合特征匹配和深度学习的优势,提高了测距的准确性和稳定性。
《基于双目立体视觉的测距算法研究》篇一一、引言在自动化技术、智能驾驶和机器人技术等应用领域中,精确的测距算法是关键技术之一。
双目立体视觉作为一种有效的视觉测距技术,在三维空间信息的获取中得到了广泛的应用。
本文旨在研究基于双目立体视觉的测距算法,为相关领域提供理论依据和技术支持。
二、双目立体视觉原理双目立体视觉原理基于人类双眼的视觉感知机制。
通过两个相机从不同角度获取同一场景的图像,利用图像处理技术对两幅图像进行匹配、计算视差,从而得到场景的三维信息。
双目立体视觉的测距原理主要依赖于视差计算和三角测量法。
三、双目立体视觉测距算法研究1. 算法流程基于双目立体视觉的测距算法主要包括图像获取、相机标定、图像预处理、特征提取、特征匹配和视差计算等步骤。
首先,通过两个相机获取同一场景的左右图像;然后,进行相机标定和图像预处理,包括去除噪声、灰度化等;接着,提取左右图像中的特征点;通过特征匹配算法,找到对应点对;最后,利用三角测量法计算视差,得到目标物体的深度信息。
2. 关键技术(1)相机标定:通过标定板获取相机的内外参数,为后续的图像处理提供基础。
(2)特征提取与匹配:提取左右图像中的特征点,并采用合适的匹配算法找到对应点对。
特征提取与匹配是双目立体视觉测距算法的关键步骤,直接影响测距精度。
(3)视差计算与三角测量法:根据对应点对计算视差,然后利用三角测量法得到目标物体的深度信息。
视差计算需要精确的匹配和算法优化,以提高测距精度。
四、算法优化与实验分析为了提高双目立体视觉测距算法的精度和鲁棒性,本文从以下几个方面进行了优化:1. 优化特征提取与匹配算法:采用更加稳定的特征提取与匹配算法,提高对应点对的准确性。
2. 引入机器学习与深度学习技术:利用机器学习和深度学习技术对双目立体视觉测距算法进行优化,提高算法的鲁棒性和适应性。
3. 实验分析:通过实验验证了本文提出的双目立体视觉测距算法的有效性和准确性。
实验结果表明,本文算法在各种场景下均能实现较高的测距精度。
虽然最近注意力已经不可遏制地被神经科学、大脑记忆机制和各种毕业活动吸引过去了,但是还是觉得有必要把这段时间双目视觉方面的进展总结一下。
毕竟从上一篇博文发表之后,很多同仁发E-mail来与我讨论,很多原来的疑团,也在讨论和一步步的试验中逐渐解决了。
开篇之前,首先要感谢maxwellsdemon和wobject,没有和你们的讨论,也就没有此篇的成文。
说到双摄像头测距,首先要复习一下测距原理,把Learning OpenCV翻到416和418页,可以看到下面两幅图图1. 双摄像头模型俯视图图2, 双摄像头模型立体视图图1解释了双摄像头测距的原理,书中Z的公式如下:在OpenCV中,f的量纲是像素点,Tx的量纲由定标棋盘格的实际尺寸和用户输入值确定,一般总是设成毫米,当然为了精度提高也可以设置为0.1毫米量级,d=xl-xr的量纲也是像素点。
因此分子分母约去,z的量纲与Tx相同图2解释了双摄像头获取空间中某点三维坐标的原理。
可以看到,实际的坐标计算利用的都是相似三角形的原理,其表达式就如同Q矩阵所示。
空间中某点的三维坐标就是(X/W, Y/W, Z/W)。
因此,为了精确地求得某个点在三维空间里的距离,我们需要获得的参数有焦距f、视差d、摄像头中心距Tx。
如果还需要获得X坐标和Y坐标的话,那么还需要额外知道左右像平面的坐标系与立体坐标系中原点的偏移cx 和cy。
其中f, Tx, cx和cy可以通过立体标定获得初始值,并通过立体校准优化,使得两个摄像头在数学上完全平行放置,并且左右摄像头的cx , cy和f相同(也就是实现图2中左右视图完全平行对准的理想形式)。
而立体匹配所做的工作,就是在之前的基础上,求取最后一个变量:视差d(这个d一般需要达到亚像素精度)。
从而最终完成求一个点三维坐标所需要的准备工作。
在清楚了上述原理之后,我们也就知道了,所有的这几步:标定、校准和匹配,都是围绕着如何更精确地获得f, d, Tx, cx 和cy而设计的。
基于OpenCV3.2+VS2013双目测距1、摄像头标定1.1、通查询资料和博客大概有两种方式:(1)利用OpenCV自带的校正程序(2)利用MATLAB工具来标定1.2该工程是利用MATLAB工具来标定:(1)固定好摄像头,尽量保证两个摄像头是水平放置,并调好两个摄像的焦距,使其清晰度是一样的。
(2)准备30张图片,两个摄像头各15张同时拍摄,此处采用的MATLAB中自带的棋盘格打印在A4纸张上,并粘贴到硬纸板上,尽量保持纸板是平整的以保证棋盘水平。
(3)利用Python3.5+OpenCV3.2编写代码实现拍照,代码中按下键盘K键及拍摄照片并分别保存在left和right文件中。
(4)软件环境:MATLAB2015、Eclipse_Neon.3、OpenCV3.2(5)语言:Python3.5、C++(6)MATLAB工具包下载网址:/download/shamozhihuong/101705681.3、MATLAB标定过程(1)将左右图片拷贝到MATLAB tool文件夹下(2)打开MATLAB,运行calib_gui,并点击standard(3)点击image names,并在MATLAB命令行输入left(4)再输入jpg(也就是图片的主名称和图片格式)(5)依次点击Read images,Extract grid corners,然后命令行点击回车,再输入5,5再回车。
(6)顺时针用鼠标点击四个角点,并按图中x,y的方向测量实物棋盘的实际尺寸,并输入到命令行中,并依次标记完后面的所有图。
(7) 点击Calibration,show Extrinsic,save并将生成的calib_Results.mat,改名为calib_ Results _left.mat(8)再标定右摄像头,和左边摄像头的标定是一样的。
(9) 重复left的标定步骤,把生成的Calib_Results.mat,改为Calib_Results_right.mat2、立体匹配(1)运行stereo_gui.m,然后点击Load left and right calibration files 再在命令行输入Calib_Results_left.mat,和Calib_Results_right.mat(2)点Run stereo calibration,show extrinsics of stereo rig,save stereo cailb results(3)记录数据,写入到程序中3、双目校正,运行结果图4、完整代码下载链接(1)摄像头标定棋盘PDF/download/shamozhihuong/10170559(2) MATLAB双目标定工具/download/shamozhihuong/10170568(3)双目摄像头标定拍照源码:/download/shamozhihuong/10170539(4)基于OpenCV3.2+VS2013双目测距源码:/download/shamozhihuong/10170531 5、硬件连接淘宝链接:https:///index.htm?spm=2013.1.w5002-14240154075.2.7680934784qAuM。
基于OpenCV的双目立体视觉测距
基于OpenCV的双目立体视觉测距
论文导读::
双目立体视觉模型。
摄像机标定。
立体匹配采用OpenCV库中的块匹配立体算法。
目前的测距方法主要有主动测距和被动测距两种方法。
论文
关键词:
双目立体视觉,摄像机标定,立体匹配,测距
(一)引言基于计算机视觉理论的视觉测距技术是今后发展的一个重要方向,它在机器人壁障系统、汽车导航防撞系统等领域有着广泛的应用前景。
目前的测距方法主要有主动测距和被动测距两种方法。
论文采用的是被动测距法。
被动测距法是在自然光照条件下,根据被测物体本身发出的信号来测量距离,主要包括立体视觉测距法、单目测距法、测角被动测距法等。
立体视觉测距法是仿照人类利用双目感知距离信息的一种测距方法,直接模拟人的双眼处理景物,简便可靠,但该方法的难点是选择合理的匹配特征和匹配准则。
双目立体视觉系统采用两台摄像机同时从两个不同视点获取同一景物的多幅图像,即立体图像对,通过测量景物在立体图像对中的视差,再利用双目视觉成像原理就可以计算出目标到摄像机的距离。
立体匹配采用OpenCV库中的块匹配立体算法,在得到摄像机参数和匹配点后再利用最小二乘法即可算出三维信息。
(二)双目立体视觉模型首先介绍双目视觉所涉及到三个坐标系:
世界坐标系、摄像机坐标系和图像坐标系。
世界坐标系中的点坐标记为,摄像机坐标系用表示。
图像坐标为摄像机所拍摄到的图像的二维坐标,一般有两种表示方法:
是以像素为单位的图像坐标,是以毫米为单位的图像坐标。
建立以毫米为单位的图像坐标是因为坐标只表示了像素在数字图像中的行数和列数,并没有表示出该像素在数字图像中的物理位置论文范文。
图1为平行双目视觉模型,即参数相同的两个摄像机平行放置,两光
轴互相平行且都平行于z 轴,x 轴共线摄像机标定,两摄像机光心的距离为
B(即基线距)。
图中O
1、O2为左右两摄像机的焦点,I1 、I2为左右摄像机的像平面,P1 、P2 分
别是空间点P在左右像平面上的成像点,f是摄像机的焦距。
若视差d 定义为?P1- P2?,则点P到立体视觉系统的距离为:
图1 平行双目视觉模型
(三)摄像机标定摄像机标定是为了建立三维世界坐标与二维图像坐标之间的
一种对应关系。
系统采用两个摄像机进行图像采集,设定好两个摄像机之间的距离(即基线距),用摄像机同时采集放在摄像机前的标定物。
摄像机标定采用的是张正友的标定方法,棋盘格大小为30mm30mm,角点数为117。
标定板的规格如图2所示。
图2 平面标定板规格张正友的标定方法需要摄像机从不同角度拍摄标定板
的多幅图像。
由于两个摄像机是向前平行放置的,且基线距固定,所以只需摆放标定板的位置变化即可。
摄像机为针孔成像模型,则空间点与图像点之间的映射关系为:
为方便计算,使标定板所在平面的Z坐标均为0,即Z=0的平面,则上式可变为:
其中,A为摄像机的内参矩阵,为摄像机外参矩阵,s为尺度因子。
令,,则上
式可写为:
其中,为透视投影矩阵,它是标定板上的点和其像点之间的映射。
在已知空
间点和其对应像点后,可根据最小二乘方程,采用Levenberg-Marquardt算法求解
得到H矩阵,并求出摄像机的内外参数矩阵。
一般摄像机都存在镜头畸变,且畸变会影响标定结果,特别是径向畸变,因此只考虑一阶和二阶的径向畸变。
(四)立体匹配
1.立体匹配算法立体匹配是通过寻找同一空间景物在不同视点下投影图像中
像素间的一一对应关系。
立体匹配是匹配两个不同的摄像机拍摄得到图像的三维点。
立体匹配采用的是OpenCV提供的块匹配立体算法vFindStereoCorrespondeneBM,该算法使用了一个叫绝对误差累计的小窗口(SAD)来查找立体校正后左右两幅图像之间的匹配点。
这个算法只查找两幅图像之间的强匹配点(即强纹理)。
块
匹配立体算法有以下三个步骤:
1.预过滤,使图像亮度归一化并加强图像纹理。
沿着水平极线用SAD窗口进行匹配搜索。
3.再过滤,去除坏的匹配点。
匹配过程通过在整幅图像滑动SAD窗口来完
成。
对左图像上的每个特征而言,搜索右图像中的对应行以找到最佳匹配。
校正之后,每一行就是一条极线,因此右图上的匹配位置就一定会在左图像的相同行上(即具有相同的坐标)。
如果特征有足够多的可检测的纹理,并位于右摄像机的视图内,就可以找出对应的匹配位置论文范文。
视差效果图视差图是经过左右图像的对应点匹配后得到的,从视差图可以看
出匹配的效果。
若图像中的匹配点比较稠密(即匹配点多),则得到的视差图和原图相似度就大;若图像中的匹配点比较稀疏,则得到的视差图和原图相似度就小。
论文采用的匹配方法得到的视差图如图3所示,图4为原图。
图3 视差图图4 原图
(五)双目视觉测距
1.双目立体视觉测距算法在已知摄像机的内外参数的情况下,计算得到透视
投影矩阵摄像机标定,根据图像坐标系与世界坐标系的关系,则可以求出距离信
息。
在双目视觉中,摄像机同时拍摄到同一个物体不同角度的两张图像,由同一点在两幅图像中位置信息可计算出它在世界坐标中的三维坐标。
根据式和式,消去比例系数k1和k
2,可得到如下四个方程组:
其中,是世界坐标系下P点的坐标,和是P点在左右图像上的像点。
由于标定误差及图像噪声的存在,以上四个方程为非线性的,因此可用最小二乘法求出P点的三维坐标。
实验结果论文采用一个摄像机进行实验,按照图一的方法,现在左位置点拍摄一幅图像,此时标定板位置保持不变,然后让摄像机只在X轴方向移动基线的距离,在Y和Z轴方向都没有移动,再在右位置点拍摄一幅图像,在左右拍摄点都拍摄图像后,再换标定板的摆放方式,继续在左右拍摄点拍摄得到左右图像,依此类推。
实验采用左右各9幅图像来标定,图像大小为2304*1728,得到的标定结果如下:
,外参数为:
,
加压站的优化设计_特性曲线
基于SRAM型FPGA测试技术的研究_故障覆盖率
(完)。