我有一个点云,我已经执行了平面检测。现在我想对场景进行三角测量。
我已经有了每架飞机的三角剖分,看起来像这样:
我想用来Point Cloud Library
GreedyProjectionTriangulation
重建场景。所以我想调整干预重建的不同功能。
我挖掘了gp3.h
and的代码gp3.hpp
(可以在 中找到pcl/surface/include/pcl/surface
)并阅读了相关的出版物。到目前为止,我已经做到了这一点:
- 我的飞机的每个点都应该在一开始就被标记为边缘 - 使用矢量很容易做到这一点
state_
。 - 我们用函数添加平面的三角形,这
addTriangles
没问题。 - 我不知道如何强制执行边缘。有一个
doubleEdges
向量,但我并不真正了解它是如何工作的。似乎每次迭代都会重置一个点。 - 我必须将我的平面点推到
fringe_queue_
向量中,但这个addFringe
函数很奇怪,因为它要求 2 个参数,我不明白为什么。 - 我不明白向量
part_
的用途。
我目前的结果是这样的:
图像上不是很清楚,但由于我不知道如何强制边缘,所以我遇到了重叠三角形的问题。
编辑
我继续挖掘代码。我确定了关键部分可能是什么。为了避免代码墙,你可以在这里找到有趣的部分——它大约在 gp3.hpp 的第 180 和 285 行之间。
我不明白什么sfn_
和ffn_
是为了什么。我的直觉是sfn_[R_]
返回 的第二个边缘邻居,R_
并ffn_[R_]
返回 的第一个边缘邻居。R_
所以是这样的:
如果我是对的,我可以很容易地做到这一点,因为我的飞机轮廓按正确的顺序排序。
我仍然不知道如何强制执行属于我的平面的三角形的边缘。查看代码,我认为关键在doubleEdges
向量中,但我不知道如何修改这部分以使其与我的问题相关。