立体视觉知识补充

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

现在我们有一架平衡双目摄像机,和一个棋盘和一个待重构的物体或者要拍摄的画面,我们的目的就是利用两个摄像机捕捉同一个画面或者物体图像,然后根据在两幅图像上遍历同一个世界三维点映射到两个图像平面的响应匹配点,然后利用匹配点视差和摄像机相关参数,以及图像二维点的信息就可以得到世界物体的三维坐标。1、立体标定cvStereoCalibrate(),利用两个摄像机同时捕获的不同视场来实现标定,同时获得本征矩阵E,基础矩阵F,两摄像机坐标系的旋转矩阵R和平移矩阵T或者摄像机内参数M和畸变系数distCoeffs。立体标定和单摄像机标定是有区别的。立体标定除了可以计算出摄像机的内参数和畸变系数,还可以计算出本征矩阵E,基础矩阵F,两个摄像机的旋转矩阵R和平移向量T.立体标定函数参数中需要两个着相机的内参数和畸变系数,它们即可以作为输入,也可以作为输出,这里我们让它们作为输出,由立体标定函数计算它们。因此,我们就可以手持棋盘,然后用两个摄像机同时捕捉棋盘的不同视场,对于每一个视场,我们两个摄像机都有拍摄的同一棋盘的图像对,对于两个摄像机旋转矩阵R和平移向量T,我们通过一个视场就可以求解出来,然而为了计算结果的稳定,则需要多个视场来优化结果。对于两个摄像机的内参数矩阵和畸变系数,我们至少需要10个视场。因此,我们可以通过手持棋盘,旋转和平移棋盘以获得10个视场,从而获得10幅图像对,来进行立体标定。在这一步,我们利用极线约束来检查标定的结果。(有了本征矩阵我们就可以得到基础矩阵,有了基础矩阵,我们就可以计算极线)2、立体校正cvStereoRetify(),利用相机内参数以及上一步得到R,T,得到两个摄像机极线水平对准的旋转矩阵Rl和Rr,投影矩阵P,重投影矩阵Q,为实现两幅图像水平对准准备数据。该函数名为立体校正,并没有完成真正的立体校正,而是获得了立体校正的所需要的参数。通过立体校正,我们可以获得两个摄像机的投影矩阵P,有了投影矩阵,我们可以利用相机模型公式5-19,然后在利用立体校正后的图像(特征点水平对齐)来进行三维坐标计算。然而我们可能并不这样做,因为OpenCV已经给出了计算的函数,输入视差图和重投影矩阵Q,得到三维点坐标。有时候,我们在三维重建的时候,这样做:假设我们想重建一个物体,我们用两个摄像机拍摄这个物体,如果该物体有足够的surf特征点,我们获取这两幅图像的特征点的坐标位置,然后利用立体校正得到投影矩阵,计算获取物体三维点云。这样的步骤是错误的,或者做出来可能效果也不好。因为我我们进行立体标定的目的是为了使得两幅图像水平对齐,也就是两台摄像机的光轴是平行的,即无穷远处相交。我们知道对于两幅图像,水平对齐后,像对于的特征点或者匹配点在同一图像扫描行上,这样,我们才能利用理想情况下的深度公式:Z=fT/x1-x2,f为焦距,T表示两个相机光轴之间的距离。我们可以假设,如果我们获得的两幅图像对应的匹配点,不在同一行,那么x1-x2,就会发生变化。因此,如果我们在做图像预处理时,一定要始终保持两幅图像的大小是一样的。不能随便的剪切。3、校正映射分为两个步骤:计算查找表和重投影,此步完成真值的图像的校正。1、cvInitUndistortRectifyMap()函数利用摄像机内参数M和畸变系数,以及投影矩阵P或者校正后的摄像机内参数Mrect,以及旋转矩阵T,来计算原始图像到校正后的查找表。2、cvRemap函数,利用计算得到的查找表,和拍摄得到原始图像,设置一定的插值方法,得到校正后的图像。由于左右图像都需要校正,所以该过程要进行两次。4、立体匹配到了这一步,我们就可以根据具体的情况,应用不同的特征点匹配了。OpenCV实现的块匹配算法相当于密集点匹配算法,我们也可以利用稀疏点匹配算法,如sift等。通过这些匹配点,我们就可以获得匹配点的位置,即x1和x2,我们就可以计算得到他们之间的视差,从而得到计算得到三维点坐标。对于一个物体点的坐标(X,Y,Z),我们关心的更多的是Z,Z就是所谓的深度,通俗一点:Z是两个摄像机透镜中心(光心)所在平面到物体点所在平面之间的距离。(推导见:相机模型)因为我们计算的过程中操作的的大部分是像素,那么我们得到距离也是用像素来度量的。5、现实世界单位和像素的关系这个问题是个头疼的问题,我感觉只有等待自己亲自验证了,才能肯定的回答,但是我在这里分析一下先。1)世界物体的三维点,一般选择的应该是左摄像机的投影中心为坐标系的原点(数学模型中的)。视差是左摄像机对应的匹配点的x坐标减去右相机对应的匹配点的x坐标。我们知道,如果知道了视差和重投影矩阵,以及匹配点就可以根据公式求解出三维点坐标。我们将主要公式列出:(Q中除了c'x来至于右相机,其他参数均是左相机,Tx为为左摄像机投影中心到右摄像机投影中的平移向量的x分量)如果Q是由Pl和Pr联合求解的得到的话,那么Q中cx和cy等参数都应该是校正后的摄像机参数了。如果那样的话,主光线在无穷远处相交,则cx=c'x,既然我们使用的校正后的摄像机内参数,那么cx就必然等于c'x了,那为什么还会列出上面的Q表达式呢,直接将Q矩阵的右下角设置为0不就好了吗?难道它也在告诉我们,我们使用Q时也可以在用校正前的摄像机内参数求解?这不得而知了。2)我们知道摄像机的内参数是根据单应性求解得到的。为了理解,我们引入下图:在棋盘平面上,我们定义一个三维坐标系,棋盘平面上的一个内角点就是一个世界物理点,这个三维坐标系中,棋盘位于xoy平面内,那么棋盘上的点的z坐标就是0值。我们知道从棋盘上的点(X,Y,0),映射到图像平面内的点(x,y),如果没有摄像机内参数的影响,即摄像机是完美的,也或者说摄像机的内参数矩阵是单位阵。那么三维点(其实是平面内的一点)经过一定的旋转R和平移t,就可以到达图像平面内的一点。但是实际上摄像机并不是完美的,那么这个单应性矩阵中,就含有摄像机的内参数。摄像机通过求解单应性求解内参数。单应性矩阵由摄像机内参数、旋转矩阵和平移向量构成,其中摄像机内参数矩阵是不变量,旋转和平移是由不同视场决定。那么我们采用不同的棋盘格子的大小,那么该格子的大小将影响哪些呢?其实将影响平移向量的结果。旋转矩阵OpenCV中说到的是R=[r1,r2,r3],三个矢量两两正交,并且模是相等的。那么我们就可以将其系数提出,那么R就为正交矩阵。其实我感觉构造R的时候,R就是一个正交矩阵。一个正交矩阵乘上一个向量,那么该向量的模是不变的,这也是线性代数中学的正交变换。那么棋盘各自的大小的信息成分,就转化到了平移向量身上1、线性模型可用针孔模型来近似表示任一点P(Xc,Yc,Zc)在像平面的投影位置,也就是说,任一点P(Xc,Yc,Zc)的投影点p(x,y)都是OP(即光心(投影中心)与点P(Xc,Yc,Zc)的连线)与像平面的交点如上一篇文章中的图2.2。对应比例关系可得:(说明:Xc的c下表表示camera相机,上述公式是在相机坐标系内,利用三角形相似原理,即x/f=Xc/Z,其中上述公式的单位为毫米,f表示焦距单位毫米)上式可以用齐次坐标与矩阵的形式表示为:将上一篇文章中的(2.3)和(2.4)代入(2.6)式就可以得到点P的世界坐标与其投影坐标(u,v)之间的关系为:(说明:上述公式中完成了从世界坐标系到图像坐标系的转变,中间经过了相机坐标系的过度,Xw中的w表示world世界,单位为毫米,而u,v是的单位为像素,即完成了从毫米——像素的转换。)其中ax=f/dx,ay=f/dy;M是3×4的矩阵—投影矩阵,M1完全由相机的内参数ax,ay,u0,v0决定,(u0,v0)为主点坐标,ax,ay分别表示图像u轴和v轴上的尺度因子,M2则完全由相机的外部参数决定。而相机标定就是确定相机的内外参数。由式(2.7)可知,若已知相机的内外参数,则相当于已知投影矩阵M.当已知M和空间点P的坐标:矢量Xw=(Xw,Yw,Zw,1)T,(矢量Xw上面有一个矢量标识杠,T表示矢量的转置)。式(2.7)可以给出三个方程,消去Zc就可以得到其投影点p的坐标(u,v)(其实也就是我用一个相机就可以拍摄一个物体的图片了)。但是由于M为3×4不可逆矩阵,当点P的投影坐标(u,v)和投影矩阵M为已知时,我们只能得到关于Xw,Yw,Zw的两个线性方程,即射线OP的方程,由上一篇图2.2我们可以看出,位于射线OP上的所有空间点的投影点(即图像点)都是p点。所以不能唯一确定空间点P的世界坐标矢量Xw.所以,为了得到空间物体的三维世界坐标,就必须有两个或更多的相机构成立体视觉系统模型才能实现。2、非线性相机模型在实际的成像过程中,考虑镜头的失真,一般都存在非线性畸变,所以线性模型不能准确描述成像几何关系。非线性畸可用下列公式描述:若考虑非线性畸变,则对相机标定时需要使用非线性优化算法。而有研究表明引入过多的非线性参入(如离心畸变和薄棱畸变)不仅不能提高精度,还会引起解的不稳定。一般情况下径向畸变就足以描述非线性畸变,所有本课题只是考虑径向畸变。则将式(2.9)中的径向畸变代入式(2.8)可得:OpenCV中讲解:从制作上讲,从制作一个”球形“透镜比制作一个数学上理想的透镜更容易。故产生了径向畸变。从机械方面讲,也很难把透镜和成像仪保持平衡。故产生了切向畸变。1、径向畸变对径向畸变,成像仪中心(光学中心)是畸变为0,随着向边缘移动,畸变越来越严重。故我们可以用在r=0处的泰勒级数展开的前几项来定量描述。对于便宜的网络摄像机,我们通常使用前两项,其中通常第一项为k1,而第二项为k2。对畸变很大的摄像机,比如鱼眼透镜,我们使用第三个径向畸变项k3。通常成像仪某点的径向位置按下式调节:这里(x,y)是畸变点在成像仪上的原始位置,(xcorrected,ycorrected)表示矫正后的新位置。2、切向畸变切向畸变是由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的。径向畸变可以有两个额外的参数p1和p2来描述,如下:因此总共有5个我们需要的畸变参数。由于在OpenCV程序中5个参数是必需的,所以它们被放置到一个畸变向量中,这是一个5×1的矩阵,按顺序依次包含k1,k2,p1,p2和k3。3、平行双目立体视觉模型通过针孔成像模型的分析可知,为了由像点坐标唯一的确定世界三维坐标,就必须通过两个或者多个相机来共同完成。通过两个相隔一定距离的相机来实现对3D场景的成像,就是双目成像,也称为立体视觉成像。相机拍摄景物时,先把两部相机的光轴汇聚于感兴趣的物体上,则两个光轴的交点称为汇聚点,而该点到基线中心的距离称为汇聚距离。当汇聚的距离有限时,双目立体视觉系统统称为汇聚式双目立体视觉模型;当汇聚距离无线远时,双目立体视觉系统就被成为平行式双目立体视觉模型。本文研究的是平行双目立体视觉系统,下面着重介绍一下平行双目立体视觉模型。如图2.3所示,当目标距离远远大于焦距时,可假定透镜中心与像平面的距离等于摄像机的焦距f(=OlCl=OrCr)。两光轴平行且距离(即基线)为2h。世界坐标系定义为OXYZ,左右图像平面都与相机平面XOY平行,其中Ol、Or分别为左图像与右图像的中心(即左右图像局部坐标系的原点,Xl,Xr分别表示左右相机局部坐标系的X轴),Cl和Cr分别为左右相机的光心,Z轴表示到摄像机(在Z=0处)的距离。X轴表示“水平”距离(Y轴朝负面而去,没有出现,即满足右手坐标准则)。X=0是右相机光心位置。光心即投影中心。假设三维空间点P(X,Y,Z)的像在左、右两个像平面上的投影分别是Pl(xl,yl)和Pr(xr,yr)(其中xl,yl,xr,yr分别表示投影点在每个图像局部坐标系即2.1节所讲的图像坐标系O1xy中的坐标)。由小孔成像原理可知:P,Cl,Pl三点共线,则由三角相似,可得:(这里我只是把内容以图片的形式贴出来,不在手写了,论文中下面部分存在是错误的)下面内容摘自:西安工业大学基于双目立体视觉的图像匹配与三维重建张海波5、基于双目立体视觉技术的三维重建摄像机通过透视变换将物体的三维信息转换为二维图像,

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功