基于Open3D的点云处理5-点云之间的距离计算

计算在一片点云中的每一个点在另一片点云中最近点的距离:

  • 常规写法,通过k-d Tree进行搜索每个点的最近点;

[k, idx, dist] = k_dTree.search_knn_vector_3d(pc2.points[i],k) #通过k-d Tree进行搜索最近点;
# k返回点个数
# idx 返回点索引
# dist 返回点距离

  • open3d 提供了直接计算点云与点云之间距离的函数

compute_point_cloud_distance()

import open3d as o3d
import numpy as np
#首先读取原始点云和求异点云
pc1 = o3d.io.read_point_cloud("./data/1.ply",remove_nan_points=True,remove_infinite_points=True)#原始点云
pc2 = o3d.io.read_point_cloud("./data/2.ply",remove_nan_points=True,remove_infinite_points=True)#求异点云
dist = pc2.compute_point_cloud_distance(pc1)
idx = [i for i,distance in enumerate(dist)  if distance>0.5 ]
#最后将点云中相同的部分和不同的部分分别取出来进行显示
same_part = pc2.select_by_index(idx)
diff_part = pc2.select_by_index(idx,invert=True)
same_part.paint_uniform_color([1,0,0])
diff_part.paint_uniform_color([0,0,1])
o3d.visualization.draw_geometries([same_part,diff_part])

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zfjBIT/article/details/130914207