点云的一致法线计算

Day*_*mer 4 3d graphics point-clouds point-cloud-library open3d

python 或 c++ 中是否有一个库能够以一致的方式估计点云的法线?以一致的方式,我的意思是法线的方向在表面上全局保留。

例如,当我使用 python open3d 包时:

downpcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(
    radius=4, max_nn=300))
Run Code Online (Sandbox Code Playgroud)

我得到的结果不一致,其中一些法线指向内部,而其余的则指向外部。

非常感谢估计法线(黑线表示外部定向法线)

Jin*_*hao 8

更新好消息!

\n

平面算法现已在 Open3D 中实现!
\n源代码文档

\n

你打电话就可以了pcd.orient_normals_consistent_tangent_plane(k=15)
\n并且k是 knn 图参数。

\n
\n

原答案:

\n

就像 Mark 所说,如果你的点云来自多个深度图像,那么你可以open3d.geometry.orient_normals_towards_camera_location(pcd, camera_loc)在将它们连接在一起之前调用(假设你使用的是Open3D的 python 版本))。

\n
\n

但是,如果您没有该信息,您可以使用切平面算法:

\n
    \n
  1. 为您的点云构建 knn-graph。
    \n图形节点是点。如果一个点是另一个点的 k 最近邻,则两点相连。
  2. \n
  3. 为图中的边分配权重。
    \n与边(i, j)相关的权重计算为1 - | n i \xe2\x8b\x85 n j |
  4. \n
  5. 生成结果图的最小生成树。
  6. \n
  7. 将树以初始节点为根,\n以深度优先顺序遍历树,为每个节点分配\n与其父节点一致的方向。
  8. \n
\n

实际上上述算法来自Hoppe 1992\nSIGGRAPH 论文Surface Reconstruction from Unorganized Points的第 3.3 节。该算法也是开源的

\n

据我所知,该算法不能保证完美的方向,但它应该足够好。

\n