我有一个来自kinect融合的点 Cloud ,并使用Point Cloud Library成功地分割地平面(ax by c * z d = 0)(我得到了地平面的pcl :: ModelCoefficients中的a,b,c,d) . 现在我需要将笛卡尔坐标转换为新的笛卡尔坐标,使地平面成为X-O-Y平面(0 * x 0 * y z = 0) . 我想我可以通过这个API做到(但我不知道如何):http://docs.pointclouds.org/trunk/group__common.html#transformPointCloud
My Answer :看看这个PCL api:http://docs.pointclouds.org/1.7.2/a02405.html#ga4375e99ec2ae368eec9379f506568611
我成功解决了这个问题!
2 回答
我无法打开您的API链接,但您猜测可以使用简单的转换来转换平面:
你应该添加你的所有点向量{a * d,b * d,c * d} - 通过cz = 0将你的点移动到平面ax
那么你应该在角度[{a,b,c}点{0,0,1}]上绕轴[{a,b,c}交叉{0,0,1}]找到旋转矩阵并转换你的点数这个矩阵http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToMatrix-在这里你可以看到如何从轴和角度找到旋转矩阵
此功能需要相机姿势,即表格的4x4矩阵
这里,R是3×3旋转矩阵,t是3×1平移向量,0 - 是1×3的零向量,1是单位(标量) .
您应该以这样的方式设计此矩阵,即新坐标系中的Z轴将与平面的法向量共线 . 新的X轴和Y轴是任意的,唯一的限制是它们必须形成正交基 .
This link解释了如何导出矩阵R.