opencv光线强弱处理 opencv光平面标定_视觉检测

一、相机标定

张正友标定法

二、基准外参计算

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

三、光平面标定

通过两个不同位姿的标定板及在他们上的激光线条,使用最小二乘法计算出光平面的公式。

Ax+By+z+C=0

opencv光线强弱处理 opencv光平面标定_坐标转换_02


上面两张图片是两个不同位姿的标定板,下面两张图片是关灯之后分别照射在两张标定板上的激光线条。首先使用solvePnP计算出两张不同位姿的标定板的外参数R、t

Pc为相机坐标,Pw为标定板上的世界坐标。

Pc = R * ( Pw - t)

通过图片可以得到出激光线条的像素坐标,然后通过相机内参,将像素坐标转换到相机坐标当中,然后通过两张不同标定板的外参,将坐标分别变换到他们所属的标定板上的世界坐标系中去。

这个时候计算出的世界坐标z=0

接下来,要将这两个世界坐标统一到同一个坐标系下。

可以将这两个世界坐标系通过这两个标定板的外参数转换到相机坐标系下,再通过基准外参转换到基准坐标系中。这里z!=0了,这样就可以得到在同一个坐标系下的不平行的两条空间线的点集合了。

opencv光线强弱处理 opencv光平面标定_世界坐标_03

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

四、移动装置标定

通过两张不同时期拍摄的标定板图片,来计算出移动装置在基准坐标系下拍摄相邻两张图片移动的距离。

opencv光线强弱处理 opencv光平面标定_计算机视觉_04


首先分别计算两张标定板图片的外参,然后在标定板上选取一个点,将其坐标转换到基准坐标系下(先使用自身外参转换到相机坐标,再利用基准外参转换到基准坐标系下),坐标相减得到这两个点之间的距离,再除以图片拍摄间隔,就可以得到单位间隔内移动装置在基准坐标系下的移动距离。

五、激光图像中心线提取

使用Steger算法

opencv光线强弱处理 opencv光平面标定_opencv光线强弱处理_05

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

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

七、加运动偏移

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

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

opencv光线强弱处理 opencv光平面标定_世界坐标_06


下面这两张图片是拿手机拍的现场照片

opencv光线强弱处理 opencv光平面标定_世界坐标_07


opencv光线强弱处理 opencv光平面标定_视觉检测_08


代码上传至GitHub:

https://github.com/ader47/LineLaser3DScan 所用到的图片:

链接:https://pan.baidu.com/s/10KyCeIdVnwdMM1lti2q2Bg?pwd=we75

提取码:we75

opencv光线强弱处理 opencv光平面标定_计算机视觉_09