使用最近邻距离可以简单地计算点云与点云之间的距离。问题在于,最近邻不一定是云所代表的表面上实际最近的点。特别是在我们的情况下:参考云具有低密度。在这种情况下,使用插值技术(伪代码):
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点云中删除地面点。一个距离阈值将决定一个点是否属于地表。
Refs: https://www.cloudcompare.org/doc/wiki/index.php?title=Cloud-to-Cloud_Distance https://pointclouds.org/documentation/tutorials/kdtree_search.html