点云到点云的距离可以简单地使用最近邻距离计算。问题是最近的邻居不一定是由云表示的表面上的实际最近点。特别是在我们的例子中:参考云的密度很低。在这种情况下,使用了插值技术(伪代码):
from scipy import interpolate
import numpy as np
ref_point_cloud = np.load("ref_point_cloud.npy").item() # Grid
f = interpolate.interp2d(ref_point_cloud['x'], ref_point_cloud['y'], ref_point_cloud['z'], kind='linear', copy=False, bounds_error=True)
#### Read dense point cloud (point_cloud_dense) code here ####
for point in point_cloud_dense:
distance = abs(f(point(x), point(y)) - ref_point_cloud['z'])
插值似乎是一种耗时的技术,但它确实有效。是否有更省时的技术来计算点相对于参考点云的距离?
最终目标:使用仅包含地面点的参考点云,从密集的 MLS 点云中移除地面点。距离阈值将决定一个点是否属于地面。
参考: https://www.cloudcompare.org/doc/wiki/index.php?title=Cloud-to-Cloud_Distance https://pointclouds.org/documentation/tutorials/kdtree_search.html
答案 0 :(得分:0)
你可以得到 k 个最近的邻居,在它们上面安装一个平面并计算点到平面的距离。