看到好的东西就想转载和大家一起分享一起学习!!!


一、三维重建概述



    三维重建主要是研究如何从得到的匹配点中计算出相机的投影矩阵(如果是外部标定的话,就是求出相机的外部参数)以及如何计算出匹配点的三维坐标。



    目前研究的进展与之还相差较远。研究人员为了能够表达三维空间信息,目前较多地采用三维矢量图形来替代三维位图。主要的重构方法有如下几种:



    (1)、空间点的重建



    这是三维重构中的最基本的方法。空间任一点在两个摄像机中分别成像,得到该点在两个图像中的对应坐标,在知道两摄像机的参数矩阵的条件下,通过建立以该点的世界坐标为未知数的 4 个线性方程,可以用最小二乘法求解得该点的世界坐标。有一种简化计算的办法,选取两个内部参数完全相同的摄像机,将他们平行配置,使他们的光轴相互平行。这种方法计算相当简单,不需要进行外部参数标定。但一般情况下,两个摄像机的内部参数完全相同(包括两摄像机的拍摄状态也相同)是很难选到。摄像机安装时无法看到光轴和成像平面,故难以实施。



    (2)、空间直线、空间二次曲线的重建



    空间直线和空间曲线也是组成空间图形的主要基元。根据空间直线射影变换前后仍是直线的性质,以此来分析空间直线与图像中的直线之间的关系。空间直线在CCD上的成像可以这样认为,空间直线与摄像机光心构成的平面与成像平面的交线,两台摄像机有两个这样的平面,这两个平面的交线就是空间直线。空间二次曲线是空间二次曲面与平面的交线,因此二次曲线的平面曲线,在CCD上的成像可以认为是由空间二次曲线与光心组成的锥面与成像平面的交线。两台摄像机有两个这样的锥面,求这两个空间锥面的交线,就是空间曲线。



    (3)、全像素的三维重建



    对图像中的每个像素都进行三维重建,这当然是最理想的情况,目前要实施这种重构,需要相当严格的测量条件,且仅限于对某一具体对象,但效果并不理想。对此人们正在进行大量的研究,还有待于进一步的努力。



二、空间点的三维重建



     1、基本模型



    空间点三维重建的基本模型如图(4.1)所示,对于空间物体表面任意一点P,如果用C1摄像机观察,看到它在C1摄像机的图像点位于p1,但他们无法由p1得知P的三维位置,事实上,在O1P(O1为C1摄像机的光心)连线上任意一点P’的图像点都是p1,因此,由p1点的位置,我们只知道空间点位于O1P1与O2P2两条直线的交点,即它们的三维位置是唯一确定的。



                    

python 双目结构光 python双目三维重建_相机标定


    假如我们能够得到物体表面上所有点的三维坐标,则三维物体的形状与位置就是唯一确定的,在某些简单场合,例如三维物体时一个多面体,我们只需要知道它的各个顶点的三维坐标与相邻关系,则该多面体的形状与位置是唯一确定的。因此,用立体视觉的方法获取三维点的坐标是十分基础的。


    2、最小二乘法求解三维坐标值


    下面我们来具体介绍求解三维点坐标的 算法。在进行讨论之前,我们要明确一下几点基本假设:空间任意点P在两个摄像机C1与C2上的图像点平p1与p2已经从两个图像中分别检测出来。即已知p1与p2为空间同一点P的对应点。至于对应点是如何找到的,这属于图像配准问题。还有一个假设就是,摄像机C1与C2已标定,他们的投影矩阵分别为M1与M2,于是有:


                   

python 双目结构光 python双目三维重建_三维重建_02


     其中,(u1,v1,1)与(u2,v2,1)分别为P1与P2点在各自图像中的图像齐次坐标;(X,y,Z,1)为P点在世界坐标系下的齐次坐标;mijk为Mk的第i行第j列元素。式(4.1)与式(4.2)消去Zc1与Zc2得到关于X,Y,Z的四个线性方程:


              

python 双目结构光 python双目三维重建_相机标定_03


    由于空间点P是O1p1与O2p2的交点,它必然同时满足式(4.3),式(4.4),我们可以联立这四个式子,从而求出P点的坐标(X,Y,Z)。四个方程,三个未知数,也就是说这个方程组只有三个独立的方程,这是因为我们已经假设P1与P2点是空间同一点P的对应点,因此已经假设了直线O1p1与O2p2一定相交,或者说,这四个方程必定有解,而且解是唯一的。而实际应用中,由于数据总是有噪声的,我们可以用最小二乘法求出P的三维点坐标(X,Y,Z)。


    3、视差测距法


    以上我们介绍了空间点三维重建的一般方法,为了更清楚的了解上述过程的物理意义,下面我们讨论在一种简单的摄像机配置下的空间点重建方法,视差测距法。此方法要求选用两个内部参数完全相同的摄像机,将它们平行放置,使它们的光轴相互平行,另有一对坐标轴共线,两个成像平面共面,两摄像机的光心有一个固定的距离d,这样求解图像点的世界坐标时只涉及摄像机内参数。原理如图(4.2)所示:


                

python 双目结构光 python双目三维重建_双目视觉_04


       在上述特殊摄像机配置下,假设C1坐标系为O1x1y1z1,C2坐标系为O2x2y2z2,焦距为f,摄像机间距为d,任何空间点P的坐标在C1下为(x1,y1,z1),在C2坐标系下为(x2,y2,z2),在左摄像机中的图像点左边为(u1,v1),在右摄像机中的图像点坐标为(u2,v2)。


       根据式(4.5),式(4.6)的摄影比例关系,对于左右摄像机有如下关系:


                       

python 双目结构光 python双目三维重建_相机标定_05


       世界坐标系与摄像机坐标系的关系可表述如下:


                       

python 双目结构光 python双目三维重建_python 双目结构光_06

        

       联立上两式可得:


                        

python 双目结构光 python双目三维重建_相机标定_07


       进而可得:


                       

python 双目结构光 python双目三维重建_三维重建_08


       由式(4.5)和式(4.8)可计算的空间点的三维坐标:


                 

python 双目结构光 python双目三维重建_双目视觉_09


      式(4.9)即为双目立体视觉重构三维空间点的方法,可见,通过图像对视差和像点坐标就可以恢复出物体的三维坐标。但是由于对设备配置的要求比较苛刻,只是被应用在一些简单的视觉系统。本文采用的还是针对一般摄像机参数的三维重建方法,这样大大扩展了带云台的摄像机的视野范围,从而增强了移动机器人视觉系统的灵活性。