相对于参考点云计算点的距离

6

使用最近邻距离可以简单地计算点云与点云之间的距离。问题在于,最近邻不一定是云所代表的表面上实际最近的点。特别是在我们的情况下:参考云具有低密度。在这种情况下,使用插值技术(伪代码):

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

enter image description here

2个回答

0

我认为你的方法是正确的,但你需要将interpolate.interp2d向量化。假设point_cloud_dense的类型是pcl.PointCloud.PointXYZ

distances = abs(f(point_cloud_dense.x, point_cloud_dense.y) - ref_point_cloud['z'])

注意: point_cloud_dense.x / point_cloud_dense.y 返回一个一维的numpy数组。

0
您可以获取k个最近邻居,对其进行平面拟合并计算点到平面的距离。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接