admin管理员组文章数量:1660164
使用open3d 计算点云法向量并根据法向量判断凹凸性
在某些点云处理场景中,我们不仅需要法向量,还需要法向量所指示的某些区域的点云的凹凸性。
法向量
先去github找个bunny.pcd的实验点云
读到python里面用open3d的法线估计可获得以下效果:
pcd.estimate_normals()
最小生成树
使用open3d自带的api计算法向量时会出现某些法向量时,会出现某些表面法向量反向的情况,如图:
没看过open3d的手册,不知道它算法向量为什么会出现这种反向的情况,这种结果似乎只够反映点云不需要方向的点云曲率等特征。当我们从某个方向观测点云时还有可能需要表面点云的凹凸性特征。
对于计算法向量出现反向的情况,open3d自身也给出了解法。
pcd.orient_normals_consistent_tangent_plane(100)
最小代价生成树意味着此函数是open3d应用某种贪心算法降低点云整体生成的树代价,使其最小。使用此方法能够将点云整体的法向量归到点云的同一侧。如下图:
估计向量并记录
import open3d as o3d
import numpy as np
pcd = o3d.io.read_point_cloud(".../bunny_pcd.pcd")
pcd.paint_uniform_color([1.0, 0.0, 0.0])
pcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.01, max_nn=30))
pcd.orient_normals_consistent_tangent_plane(100)
print(np.asarray(pcd.normals)[:10, :])
o3d.visualization.draw_geometries([pcd], point_show_normal=True, window_name="最小生成树向量估计",
width=1024, height=768,
left=50, top=50,
mesh_show_back_face=False) # 可视化点云和法线
处理后我们可以看到,图中所示法向量向外发散的区域即为凸起区域,而法向量向内收敛的区域即为点云的凹陷区域。
我们将曲率较大的点的临近两点连成线段,可以发现凸起点的自身法向量是背离线段的,而凹陷点的法向量是朝向线段的。记录这些单位向量矩阵,利用此特性,我们将在下一节设计分割凹凸点的逻辑。
本文标签: 凹凸
版权声明:本文标题:点云凹凸性检验(12) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729851608a1215491.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论