我实际上正在编写一个用于处理点云的 Python 库。
使用原始点云,我知道的唯一“曲率”概念是使用从每个点的邻域获得的特征值计算的概念。
如果这就是你的意思,这里有一个示例代码:
from pyntcloud import PyntCloud
cloud = PyntCloud.from_file("Box.ply")
这是里面的示例点云Box.ply
:
计算曲率的步骤是:
获取每个点的 k 邻域:
k_neighbors = cloud.get_neighbors(k=10)
k
使用它的(在本例中为 10 个)邻居计算每个点的特征值:
ev = cloud.add_scalar_field("eigen_values", k_neighbors=k_neighbors)
根据这些特征值计算曲率:
cloud.add_scalar_field("curvature", ev=ev)
使用新的标量字段保存云:
cloud.to_file("out.ply")
out.ply
这是根据分配给每个点的曲率值着色的点云内部(白色是较高的曲率值):
这是一个关于如何过滤点云以仅保留曲率值高于平均值的点的示例:
curvature = cloud.points["curvature(K(16))"]
cloud.points = cloud.points[curvature > curvature.mean()]
cloud.to_file("out.ply")
以及新的内容out.ply
: