Graphics 点云的一致正态计算 有Python或C++中的一个库,它能够以一致的方式估计点云的法线吗? 以一致的方式,我的意思是法线的方向在曲面上全局保留
例如,当我使用python open3d包时: 我得到了一个不一致的结果,其中一些法线指向内部,而其余的指向外部Graphics 点云的一致正态计算 有Python或C++中的一个库,它能够以一致的方式估计点云的法线吗? 以一致的方式,我的意思是法线的方向在曲面上全局保留,graphics,3d,point-cloud-library,point-clouds,open3d,Graphics,3d,Point Cloud Library,Point Clouds,Open3d,例如,当我使用python open3d包时: 我得到了一个不一致的结果,其中一些法线指向内部,而其余的指向外部 非常感谢如果您知道从何处捕获每个点的视点,可以使用它来确定法线的方向。 我假设情况并非如此——因此,考虑到您的情况,这似乎是无懈可击且采样均匀的,网格重建是有希望的 PCL库在应用程序中提供了许多备选方案。为了正常估计,我将从以下两个方面开始: 虽然简单,但它们应该足以生成单个相干网格 一旦有了网格,每个三角形就定义了一条法线(叉积)。需要注意的是,网格不仅仅是独立面的集合。
非常感谢如果您知道从何处捕获每个点的视点,可以使用它来确定法线的方向。 我假设情况并非如此——因此,考虑到您的情况,这似乎是无懈可击且采样均匀的,网格重建是有希望的 PCL库在应用程序中提供了许多备选方案。为了正常估计,我将从以下两个方面开始:
pcl::PolygonMesh
是一个“”。这意味着每个三角形面由一组有序的顶点定义,这些顶点定义了方向:
顶点顺序=>叉积顺序=>定义明确的法线
您可以使用网格(最近邻)的法线,也可以计算低分辨率网格并仅使用它来确定云的方向。更新:好消息强>
切线平面算法现在在Open3D中实现这个和那个 您只需调用pcd.orient\u normals\u consistent\u tangent\u plane(k=15)
k
是knn图参数
原始答案: 正如Mark所说,如果您的点云来自多个深度图像,那么您可以调用
open3d.geometry。在将它们连接在一起之前(假设您使用的是python版本的)
但是,如果您没有这些信息,可以使用切平面算法:
为点云构建knn图。
图形节点是点。如果一个点是另一个的k近邻,则两个点是连接的
为图表中的边指定权重。
与边缘(i,j)相关的权重计算为1-|ni⋅ nj|
生成结果图的最小生成树。
在初始节点上生成树,
按深度优先顺序遍历树,为每个节点分配一个
与母公司方向一致的方向。
实际上,上述算法来自1992年的第3.3节
签名纸。算法也同样适用
AFAIK算法并不能保证一个完美的方向,但它应该足够好
downpcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(
radius=4, max_nn=300))