我正在维护使用PCL的软件。我自己对PCL没有多少经验,我只尝试了一些例子并尝试了解官方PCL-Ducumentation(不幸的是,主要是稀疏的,生成氧气的文本)。我的印象是,只有PCL贡献者才能有效地使用该库。
我必须在软件中修复的一个功能是对齐两个云。云是两个对象,应该与中间的层堆叠在一起(实际任务是计算图层的体积)。
我希望图片很好地解释了这个任务。从要堆叠的侧面扫描物体(一个从上面,另一个从下面)。在两个云上,用户手动选择两个点。然后,我希望在PCL中应该有一个平均值来对齐两个云,提供两个云和点的坐标。仅在X-Y平面中需要对齐。
不幸的是,我无法找到我应该使用哪种功能,部分原因是PCL文档是IHMO真的很谦虚,部分原因是缺乏经验。
我绝望的想法是使用P1作为两者的原点来堆叠云,然后使用P11,P21和P12,P22之间的计算角度手动旋转第二个云。这是有效的,但由于这项任务在我看来非常普遍,我期望PCL为此提供专用功能。
你能指点我一个正确的API函数,代码片段,示例,类似项目或帮助理解PCL API和用法的好书吗?
非常感谢!
答案 0 :(得分:2)
我认为这个问题不需要PCL。形成正确的线性方程并解决它很简单。
如果你想使用PCL而不必过多担心数学(不过,如果以上对你来说是个谜,那么研究一些计算几何将会非常有用),这是我的建议。
大多数PCL操作都适用于3D点云。我从你的问题中了解到你只有二维点云,或者你不关心第三维。在这种情况下,如果我是你,我会将这些点表示为3D点云,并将z维度设置为零。
您只需要两个带有3个点的点云,因为这是您为变换估算算法提供的点数。云中的前2个点将是用户选择的点。第三个是你所选择的任何一点你知道在两个云中是相同的。你需要第三个,否则如果它是一个正在计算的通用变换,变换仍然是模糊的。你可以计算这样一个点,因为你已经知道了2个点,你知道所有的点都在一个共同的平面上(因为你通过丢失z值来投影它们)。只是不要选择与其他两点共线。例如,在两点之间的中间和垂直方向上的2cm(确保朝正确的方向前进)。
然后您可以使用estimateRigidTransformation函数来查找变换。 http://docs.pointclouds.org/1.7.0/classpcl_1_1registration_1_1_transformation_estimation_s_v_d.html
这个函数也适用于过度确定的问题(它是PCL中ICP算法的主力),但只要你有足够的点来确定它应该有效的变换。