高斯曲率和平均曲率适用于粗糙表面吗?
Is Gaussian & Mean Curvatures Applicable for Rough Surfaces?
对于我正在进行的项目,我已经成功地对道路图像数据执行了 SFM 程序,并且能够生成包含点云坐标(X、Y、Z)、RGB 值的 .ply 文件,和法线(nx、ny、nz)。
现在,我有兴趣根据我拥有的数据计算每个点的曲率值。我遇到过 Surface Curvature MATLAB Equivalent in Python,但据说该实现仅在 X、Y 和 Z 是二维数组时才有效。
如果路面非常粗糙,高斯曲率和平均曲率是否适用?给定大小为 NX3 的 (X,Y,Z) 坐标数据和大小为 NX3 的 (nx,ny,nz) 法线数据,我应该如何找到曲率? Python 中是否有当前的实现?
我实际上是在写 Python library for working with point clouds。
使用原始点云,我知道的唯一 "curvature" 概念是使用从每个点的邻域获得的特征值计算的概念。
如果这是你的意思,这里有一个示例代码:
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
的新内容:
对于我正在进行的项目,我已经成功地对道路图像数据执行了 SFM 程序,并且能够生成包含点云坐标(X、Y、Z)、RGB 值的 .ply 文件,和法线(nx、ny、nz)。
现在,我有兴趣根据我拥有的数据计算每个点的曲率值。我遇到过 Surface Curvature MATLAB Equivalent in Python,但据说该实现仅在 X、Y 和 Z 是二维数组时才有效。
如果路面非常粗糙,高斯曲率和平均曲率是否适用?给定大小为 NX3 的 (X,Y,Z) 坐标数据和大小为 NX3 的 (nx,ny,nz) 法线数据,我应该如何找到曲率? Python 中是否有当前的实现?
我实际上是在写 Python library for working with point clouds。
使用原始点云,我知道的唯一 "curvature" 概念是使用从每个点的邻域获得的特征值计算的概念。
如果这是你的意思,这里有一个示例代码:
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
的新内容: