【问题标题】:Aligning two clouds using two manually selected points使用两个手动选择的点对齐两个云
【发布时间】:2014-07-22 09:39:05
【问题描述】:

我正在维护使用 PCL 的软件。我自己在 PCL 方面的经验并不多,我只尝试了一些示例并试图理解官方的 PCL-Ducumentation(不幸的是主要是稀疏的 doxygen 生成的文本)。我的印象是,只有 PCL 贡献者才能真正有效地使用库。

我必须在软件中修复的一个功能是对齐两个云。云是两个物体,应该堆叠在一起,中间有一层(实际任务是计算层的体积)。

我希望图片能很好地解释任务。从要堆叠的两侧(一个从上面,另一个从下面)扫描对象。在两个云上,用户手动选择两个点。然后,我希望 PCL 中应该有一个方法来对齐两个云,提供两个云和点的坐标。仅在 X-Y 平面中需要对齐。

很遗憾,我不知道应该为此使用哪个函数,部分原因是 IHMO 的 PCL 文档非常简陋,部分原因是缺乏经验。

我绝望的想法是使用 P1 作为两者的原点来堆叠云,然后使用 P11、P21 和 P12、P22 之间的计算角度手动旋转第二个云。这行得通,但由于这个任务在我看来很常见,我希望 PCL 能够为此提供专用功能。

您能否指出一个合适的 API 函数、code-sn-p、示例、类似项目或有助于理解 PCL API 和用法的好书?

非常感谢!

【问题讨论】:

    标签: point-cloud-library


    【解决方案1】:

    我认为这个问题不需要PCL。形成正确的线性方程并求解它很简单。

    如果您想使用 PCL 而不必过多担心数学问题(不过,如果上述内容对您来说是个谜,那么学习一些计算几何会非常有用),这是我的建议。

    大多数 PCL 操作都适用于 3D 点云。我从您的问题中了解到,您只有 2D 点云,或者您不关心 3 维。在这种情况下,如果我是你,我会将这些点表示为 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 算法的主力),但只要您有足够的点来确定变换它应该可以工作。

    【讨论】:

    • 正如我所提到的,我已经从其他人那里得到了代码,并假设实现使用了最好的方法。很高兴知道,在处理点云时不使用 PCL 并没有什么坏处。我的云是 3D 的,但 XY 平面是平行的 - 因此对于两个点集的对齐 Z 可以设置为任何相等的值(例如 0)。非常感谢您指向TransformationEstimationSVD-class。我没有意识到这一点。谷歌搜索它产生了一个有用的链接:link。似乎是一个解决方案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    相关资源
    最近更新 更多