线激光三维重建

线激光三维重建_第1张图片

一、相机标定

张正友标定法

二、基准外参计算

通过OpenCV的solvePnp()函数计算出相机到基准坐标系的外参数Rb、tb
Pc = Rb ( Pb - tb

三、光平面标定

通过两个不同位姿的标定板及在他们上的激光线条,使用最小二乘法计算出光平面的公式。
Ax+By+z+C=0
线激光三维重建_第2张图片
上面两张图片是两个不同位姿的标定板,下面两张图片是关灯之后分别照射在两张标定板上的激光线条。

首先使用solvePnP计算出两张不同位姿的标定板的外参数R、t
Pc为相机坐标,Pw为标定板上的世界坐标。
Pc = R * ( Pw - t)
通过图片可以得到出激光线条的像素坐标,然后通过相机内参,将像素坐标转换到相机坐标当中,然后通过两张不同标定板的外参,将坐标分别变换到他们所属的标定板上的世界坐标系中去。
这个时候计算出的世界坐标z=0
接下来,要将这两个世界坐标统一到同一个坐标系下。
可以将这两个世界坐标系通过这两个标定板的外参数转换到相机坐标系下,再通过基准外参转换到基准坐标系中。这里z!=0了,这样就可以得到在同一个坐标系下的不平行的两条空间线的点集合了。
线激光三维重建_第3张图片

接着通过这些点的集合利用最小二乘法,可以计算出光平面的方程。
最小二乘法拟合平面

四、移动装置标定

通过两张不同时期拍摄的标定板图片,来计算出移动装置在基准坐标系下拍摄相邻两张图片移动的距离。
线激光三维重建_第4张图片
首先分别计算两张标定板图片的外参,然后在标定板上选取一个点,将其坐标转换到基准坐标系下(先使用自身外参转换到相机坐标,再利用基准外参转换到基准坐标系下),坐标相减得到这两个点之间的距离,再除以图片拍摄间隔,就可以得到单位间隔内移动装置在基准坐标系下的移动距离。

五、激光图像中心线提取

使用Steger算法
线激光三维重建_第5张图片

六、线激光坐标转换、计算深度

通过图片可以得到每条激光条纹的像素坐标,将他们转换到基准坐标系下(先使用内参转换到相机坐标,再使用基准外参转换到基准坐标系下),可以得到基准坐标系下的x、y
然后带入基准坐标系下的光平面方程Ax+By+z+C=0 可以解出z

七、加运动偏移

定义第一张图片偏移为0
则第二张图片要再计算出的基准坐标的基础上加一个运动偏移得到真实的基准坐标
则第三张图片要再计算出的基准坐标的基础上加两个运动偏移得到真实的基准坐标
则第四张图片要再计算出的基准坐标的基础上加三个运动偏移得到真实的基准坐标
… … … … … … … … … …

这样就得到物体表面点云了。

线激光三维重建_第6张图片
下面这两张图片是拿手机拍的现场照片
线激光三维重建_第7张图片
线激光三维重建_第8张图片
代码上传至GitHub:
https://github.com/ader47/LineLaser3DScan
所用到的图片:
链接:https://pan.baidu.com/s/10KyCeIdVnwdMM1lti2q2Bg?pwd=we75
提取码:we75
线激光三维重建_第9张图片

你可能感兴趣的:(计算机视觉,视觉检测)