结构光三维重建系统是由一个相机和一个投影仪组成,关于结构光三维重建系统的理论有很多,其中有一个简单的模型是把投影仪看做相机来使用,从而得到物体的三维信息。接下来我将详细介绍这个模型的原理。
在把投影仪当相机使用之前,我们得知道如何通过两个相机的信息得到物体的三维信息。
如图所示是一个双目相机系统,如果只有一个相机(以左相机为例),相机上的一个像素点可以对应三维空间中光心与相机成像点连线OLP上的无穷个点,所以仅凭一个相机的信息是无法得到空间中物体的三维信息。但是如果能有另一个相机(右相机),则物体的三维信息可以唯一确定。因为离左相机不同距离的物体,在右相机上的成像位置是不同的,例如,图中线OLP上的点,在右相机的成像位置为图中红线,如果能知道物体在左相机成像位置PL以及物体在右相机的成像位置PR的话,就可以唯一确定物体三维位置P。
熟悉双目成像系统的小伙伴应该知道,要真正求解出物体的三维坐标值,我们需要知道左右相机的内参矩阵KL和KR,以及左右相机之间的外参R,T。其中R是右相机坐标系和左相机坐标系之间的旋转矩阵,T是右相机坐标系和左相机坐标系之间的平移矩阵。
下面我将推导已知三维空间中的物体在左右相机上的成像位置分别为PL(uL,vL)和PR(uR,vR)的情况下,如何解出物体的三维信息P(X,Y,Z)。
由于世界坐标系的原点可以是空间中的任意一点,为了使计算简单,不妨让其与左相机坐标系的原点重合。则左相机的外参矩阵(左相机和世界坐标系的转换矩阵)
,
右相机的外参矩阵(右相机和世界坐标系的转换矩阵),
根据相机模型我们可以得到如下方程等式:
联立上述方程组,方程组中有5个未知数,sL,sR,X,Y,Z,和六个方程。完全足够解出5个未知数。对于双目系统来说,最大的问题是怎么找到左相机成像点(uL,vL)对应的右相机成像点(uR,vR),这个方法有很多,首先通常需要依据极线约束对左右相机图像做立体矫正,把对应点在图像中二维的搜索放到一维(同一行)上,然后在根据各种代价计算找到准确匹配点,具体方法这里就不详述了。
知道如何通过左右相机得到物体的三维信息后,我们来看怎么把投影仪看做相机,或者说看做相机的逆。相机捕捉的是物体反射的光信息,而投影仪是把光信息投射到物体上。如果我们对投影仪投射的每个像素点的光进行编码,把编码后的光投射到物体表面上,并通过对相机捕捉到的物体表面光信息进行解码,就可以知道打在物体表面的光是由投影仪那个像素发出的,也就可以知道物体表面会在虚拟的投影仪图像上的成像位置。
投影光编码的方式很多,通常的编码是分别对投影图片的行和列编码,以格雷码为例,常见的格雷码编码如下图所示。
列格雷码示例
通过对相机图片上拍摄的物体表面投射的列格雷码光编码及行格雷码光编码进行解码,就可以知道物体在相机图片上成像位置(uc,vc)及其对应的投影仪虚拟的成像位置(up,vp),则上述双目方程可以改为:
其中Kc和Kp分别代表的是相机和投影的内参,和双目系统一样,我们不妨假设世界坐标系的原点与相机坐标系重合,则
,Rp=R,Tp=T,其中R,T分别为投影仪坐标系对相机坐标系的旋转和平移矩阵。
在上述方程中,一共有五个未知数sc,sp,X,Y,Z,和六个方程。实际上,六个方程可以解六个未知数,即使我们只需要知道知道up和vp中的一个,这也是为什么在结构光三维重建时我们通常只需要投一个方向的条纹(横条纹或者竖条纹)的原因。
通过上述方程,我们可以解出物体的三维信息,以投影列格雷码(获得up)为例,物体的三维信息的解法推导如下:
则结构光三维成像系统物体的三维解为:
自此,我们就把将投影仪看成的模型推导完毕,想要真正的完成物体的三维重建,我们还需要知道如何获取相机和投影仪的标定参数,以及如何对投影光进行编码和解码,实际上除了格雷码编码外,还有很多常见光编码方式,如相移法,格雷码+相移法,多频外差法等,每个编码方法都有他们的优劣。今后我将对一一介绍以上内容。
本文的参考文献是High-accuracy, high-speed 3D structured light imaging techniques and potential applications to intelligent robotics,这篇文章很详细的介绍了如何通过结构光系统获得物体的三维信息。Ps:这篇文献中给出的三维解有印刷错误,笔者在这篇文章中给出了正确解,感兴趣的小伙伴也可以自己推导。
本文仅做学术分享,如有侵权,请联系删文。