点云凹凸性检验(1/2)

使用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)  # 可视化点云和法线

处理后我们可以看到,图中所示法向量向外发散的区域即为凸起区域,而法向量向内收敛的区域即为点云的凹陷区域。

我们将曲率较大的点的临近两点连成线段,可以发现凸起点的自身法向量是背离线段的,而凹陷点的法向量是朝向线段的。记录这些单位向量矩阵,利用此特性,我们将在下一节设计分割凹凸点的逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

K.K. Salamander

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值