什么是激光三角法
单目+线结构光
注意:这个激光器发射出的是一个激光平面,也叫光刀面,激光平面照射到物体上就形成了一道线激光
一组3D激光传感器由一束激光组成,它将激光平面(以浅灰色显示的光片)投射到场景中的物体上。激光散射在场景中激光平面与物体相交的点上,形成特征线(深灰色)。照相机从不同的角度捕捉线条。相机内传感器的方向由矩形表示。
坐标系间的转换
世界坐标系、相机坐标系、图像坐标系、像素坐标系
世界坐标系->相机坐标系
相机坐标系->图像坐标系
步骤:相机标定->激光平面标定->三维重建
相机标定:详见
相机标定的目的就是获得相机内参矩阵和畸变参数等一系列参数,相机标定的方法有很多,这里我们一般使用的是张正友标定法详见。
激光平面标定
目的
获得激光平面在相机坐标系下的平面方程Ax+By+Cz+D=0,从而可以获得图像线激光上像素点的深度。
注意:平面方程是在相机坐标系下定义的,所以一旦激光平面标定完成之后,激光器和相机的相对位置就必须固定不动了。
流程
相机标定->提取激光线->激光线上的点转化到相机坐标系->拟合激光平面
提取激光线:
方法:极值法、阈值法、灰度质心法
这三个方法都可以用这一个图来解释,首先图像中的激光线是由一定的宽度的,而且激光线的中心亮度最大,激光线从中心到两侧边缘亮度逐渐减小。
1.极值法就是寻找图像中每一行的最大值作为激光线的光条中心。
2.阈值法就是首先设定一个阈值T,然后从图像的两侧向中间寻找灰度值为T的像素点A、B,最后取A、B的中心作为激光线的光条中心。
3.灰度质心法就是用到了重心公式,把图像的灰度值当作质量,灰度值越大,也就是质量越大,找到图像中每一行的重心当作激光线的光条中心。
这三个方法其实都非常容易受到噪声的干扰,所以需要进一步的改进方法。
激光线上的点转化到相机坐标系
接下来的这一步,将激光线上的像素点的像素坐标转化到相机坐标系下是重点,因为我们最后需要激光平面的方程就是定义在相机坐标系下的,所以需要将刚才提取到的激光线像素坐标转化到相机坐标系下。
首先需要明确的是,在相机标定过程中定义的世界坐标系是以标定板所在的平面为z=0(xoy平面)的平面,也就是说标定板平面在世界坐标系下的平面方程为z=0,接下来需要求的是标定板平面在相机坐标系下的方程。
通过相机标定,我们能得到世界坐标系到相机坐标系的R、T,这里的R和T是从世界坐标系到相机坐标系的,求逆后得到相机坐标系到世界坐标系下的R、T。
将公式展开之后把第三行提取出来,然后把z=0带入就可以求出相机坐标系下标定板平面的方程了。得到这个方程之后,我们就可以求出打在标定板平面上的激光线上的点在相机坐标系下的3维坐标了。
\(\begin{eqnarray} \left( \begin{matrix} x_w\\y_w\\z_w \end{matrix} \right) &=&R^{-1}\left( \begin{matrix} x_c\\y_c\\z_c \end{matrix} \right)+(-T)\\ &=&\left( \begin{matrix} r_{11} & r_{12} & r_{13}\\ r_{21} & r_{22} & r_{23}\\ r_{31} & r_{32} & r_{33} \end{matrix} \right) \left( \begin{matrix} x_c\\y_c\\z_c \end{matrix} \right)+\left( \begin{matrix} t_x\\t_y\\t_z \end{matrix} \right)\\ &=&\left( \begin{matrix} r_{11}x_c+r_{12}y_c+r_{13}z_c+t_x\\ r_{21}x_c+r_{22}y_c+r_{23}z_c+t_y\\ r_{31}x_c+r_{32}y_c+r_{33}z_c+t_z \end{matrix} \right) \end{eqnarray}\)
因此\(r_{31}x_c+r_{32}y_c+r_{33}z_c+t_z = 0\),将\(z_w=0\)代入即为标定板在相机坐标系下的方程得到这个方程之后,我们就可以求出打在标定板平面上的激光线上的点在相机坐标系下的三维坐标了。
拟合激光平面
最后通过刚才求出的很多激光线上的点在相机坐标系下的三维坐标,通过最小二乘法拟合即可得到激光平面方程。
三维重建
以上相机标定和激光平面标定都是激光三角法的准备工作,接下来才正式进入三维重建的过程。
对扫描拍摄到的图像进行三维重建,这个过程也分为三个步骤。
1.首先是提取激光线,也就是之前提到的三个方法:极值法、阈值法、灰度质心法
2.然后根据标定得到的激光平面方程,可以求得激光线上的点在相机坐标系下的三维坐标,每一帧图像都可以得到一条激光线上的三维点坐标,但都是相机坐标系下的坐标,需要转化到世界坐标系下,所以需要进行多帧拼接,也就是把所有相机坐标系下求得的三维点转化到一个世界坐标系下,这里定义第一帧图像的相机坐标系定义为世界坐标系,接下来每一帧图像都需要变换到这个世界坐标系下,也就是求外参R、T,这里需要根据仪器的不同求出不同的R、T,以旋转扫描为例,在仪器运转过程中相机只会发生旋转运动,所以只需要求旋转矩阵R即可,根据相机坐标系的定义,z轴指向镜头的前方,y轴指向镜头的上方,所以旋转扫描是围绕y轴旋转,对应的旋转矩阵R就是这样的。
3.最终将所有相机坐标系下的三维点都变换到世界坐标系下,得到的所有三维点坐标就是重建物体的三维模型。