双目视觉+结构光三维重建原理

结构光三维重建原理

  结构光三维重建系统是由一个相机和一个投影仪组成,关于结构光三维重建系统的理论有很多,其中有一个简单的模型是把投影仪看做相机来使用,从而得到物体的三维信息。接下来我将详细介绍这个模型的原理。(这是一个相机和一个投影仪的三维重建模型)
双目视觉+结构光三维重建原理_第1张图片
  在把投影仪当相机使用之前,我们得知道如何通过两个相机的信息得到物体的三维信息。如图所示是一个双目相机系统,如果只有一个相机(以左相机为例),相机上的一个像素点可以对应三维空间中光心与相机成像点连线OLP上的无穷个点,所以仅凭一个相机的信息是无法得到空间中物体的三维信息。但是如果能有另一个相机(右相机),则物体的三维信息可以唯一确定。因为离左相机不同距离(远近)的物体,在右相机上的成像位置是不同的。例如,图中线 O L P O_LP OLP上的点,在右相机的成像位置为图中红线(极线),如果能知道物体在左相机成像位置 P L P_L PL以及物体在右相机的成像位置 P R P_R PR的话,就可以唯一确定点P的三维坐标。

  熟悉双目成像系统的小伙伴应该知道,要真正求解出物体的三维坐标值,我们需要知道左右相机的内参矩阵 K L K_L KL K R K_R KR,以及左右相机之间的外参R,T。其中R是右相机坐标系和左相机坐标系之间的旋转矩阵Rotation,T是右相机坐标系和左相机坐标系之间的平移矩阵Translation。

  下面我将推导已知三维空间中的物体在左右相机上的成像位置分别为 P L ( u L , v L ) P_L(u_L,v_L) PLuL,vL P R ( u R , v R ) P_R(u_R,v_R) PR(uR,vR)的情况下,如何解出物体的三维信息P(X,Y,Z)。(这里是已知左右成像点的像素坐标,实际上更重要的是如何匹配这两个像素点)

  由于世界坐标系的原点可以是空间中的任意一点,为了使计算简单,不妨让其与左相机坐标系的原点重合。则左相机的外参矩阵(左相机和世界坐标系的转换矩阵) R L = [ 1 0 0 0 1 0 0 0 1 ] , T L = [ 0 0 0 ] R_L=\begin{bmatrix}1 & 0& 0 \\0 & 1 & 0 \\0& 0 & 1\\\end{bmatrix},T_L=\begin{bmatrix} 0\\0\\0\\ \end{bmatrix} RL=100010001,TL=000,右相机的外参矩阵(右相机和世界坐标系的转换矩阵) R R = R , T R = T R_R=R,T_R=T RR=R,TR=T,根据相机模型我们可以得到如下方程等式:
双目视觉+结构光三维重建原理_第2张图片
  联立上述方程组,方程组中有5个未知数, s L , s R , X , Y , Z s_L,s_R,X,Y,Z sLsRXYZ,和六个方程。完全足够解出5个未知数。对于双目系统来说,最大的问题是怎么找到左相机成像点 ( u L , v L ) (u_L,v_L) (uL,vL)对应的右相机成像点 ( u R , v R ) (u_R,v_R) (uR,vR),这个方法有很多,首先通常需要依据极线约束对左右相机图像做立体矫正,把对应点在图像中二维的搜索放到一维(同一行)上,然后在根据各种代价计算找到准确匹配点,具体方法这里就不详述了。

  知道如何通过左右相机得到物体的三维信息后,我们来看怎么把投影仪看做相机,或者说看做相机的逆。相机捕捉的是物体反射的光信息,而投影仪是把光信息投射到物体上。如果我们对投影仪投射的每个像素点的光进行编码,把编码后的光投射到物体表面上,并通过对相机捕捉到的物体表面光信息进行解码,就可以知道打在物体表面的光是由投影仪那个像素发出的,也就可以知道物体表面会在虚拟的投影仪图像上的成像位置。相机图像捕获到的像素解码后就能得到投影仪图像上该像素的位置,则这两点就是对应点。

  投影光编码的方式很多,通常的编码是分别对投影图片的行和列编码,以格雷码为例,常见的格雷码编码如下图所示。
格雷码示例

格雷码示例

  通过对相机图片上拍摄的物体表面投射的列格雷码光编码及行格雷码光编码进行解码,就可以知道物体点在相机图片上成像位置 ( u c , v c ) (u_c,v_c) ucvc及其对应的投影仪虚拟的成像位置 ( u p , v p ) (u_p,v_p) upvp,则上述双目方程可以改为:
双目视觉+结构光三维重建原理_第3张图片
  其中 K c K_c Kc K p K_p Kp分别代表的是相机和投影的内参,和双目系统一样,我们不妨假设世界坐标系的原点与相机坐标系重合,则 R c R_c Rc为3x3的单位矩阵, T c T_c Tc为3x1的零向量, R p = R , T p = T , R_p=R,T_p=T, Rp=R,Tp=T,其中RT分别为投影仪坐标系对相机坐标系的旋转和平移矩阵。

  在上述方程中,一共有五个未知数 s c , s p , X , Y , Z s_c,s_p,X,Y,Z scspX,Y,Z和六个方程。实际上,六个方程可以解六个未知数,即使我们只需要知道知道 u p u_p up v p v_p vp中的一个,这也是为什么在结构光三维重建时我们通常只需要投一个方向的条纹(横条纹或者竖条纹)的原因。

  通过上述方程,我们可以解出物体的三维信息,以投影列格雷码(获得 u p u_p up)为例,物体的三维信息的解法推导如下: M c , M p M_c,M_p Mc,Mp是双目相机标定得到的)
双目视觉+结构光三维重建原理_第4张图片
  则结构光三维成像系统物体的三维解为: u c , v c u_c,v_c uc,vc是图像像素坐标, u p u_p up是通过格雷码解码得到)
在这里插入图片描述
  自此,我们就把将投影仪看成的模型推导完毕,想要真正的完成物体的三维重建,我们还需要知道如何获取相机和投影仪的标定参数,以及如何对投影光进行编码和解码,实际上除了格雷码编码外,还有很多常见光编码方式,如相移法phase,格雷码+相移法gray+phase,多频外差法等,每个编码方法都有他们的优劣。

  本文的参考文献:High-accuracy, high-speed 3D structured light imaging techniques and potential applications to intelligent robotics,这篇文章很详细的介绍了如何通过结构光系统获得物体的三维信息。

你可能感兴趣的:(双目视觉+结构光三维重建原理)