第一步,我们做一个参考平面的点云平面到平面z=zc的旋转。可以按如下步骤进 行: 1>选择参考平面对应点云中的Z坐标的中值z0,然后选择一个大概的中点x0,y0. 2>拟合点云的参考平面方程ax+by+cz+d=0;平面的法向量为(a,b,c) 3>选择(x0,y0,z0)作为旋转中心,将平面的法向量旋转到(0,0,1), 即平面z=z0; 4>将平面z=z0,平移到z=zc; 第二步,我们完成一个x,y方向上的平移和旋转,即一个欧式变换。可以按如下 方式进行: 条件是在参考平面的图像(x,y,z=zc)和点云(x1,y1,z1=zc)上,我们找到至 少三对不共线的对应点。实现如下: 将图像简化为Img(x,y),将点云简化为PC(x1,y1)。 建立如下坐标转换关系 xrrtx ?????? 1112x1 ?????? y?rrty ?????? 2122y1 ?????? 10011 ?????? rrcos??sin? ???? 1112 ? ???? rrsin?cos? ?2122??? ,theta是逆时针旋转的角度。 xcos??sin?tx ?????? x1 ?????? y?sin?cos?ty ?????? y1 ?????? 10011 ?????? ,存在三个参数。 求解方法:非线性最小二乘 如此一来,可以将点云中(x,y)和图像中的(x,y)对应起来。从而实现了配准。 但是这还是有局限的。相机和深度传感器的光心轴存在夹角,那么这种标定方式只能 在标定平面上取得较高的精度,其他深度情况下,就不准了。这也是为啥kinect的匹 配结果在过近或者过远时误差会大。但其实上也可以根据深度进行补偿回来的。但计 算量就大了!关于用什么方法来补偿,这又是一个值得好好分析的问题啊! |
|