方案1
使用 compute_point_cloud_distance
: 它计算源点云中的每个点到目标点云中最近点的距离。距离近的点就是重叠点,距离远的点就是非重叠点
方案2
把两个点云变成2个集合set 数据类型,然后求集合的交集就行了,交集就是重叠点,非交集部分就是非重叠点
import open3d as o3d
import numpy as np
source = o3d.io.read_point_cloud("1.pcd")
target = o3d.io.read_point_cloud("2.pcd")
dists = source.compute_point_cloud_distance(target) # 它计算源点云中的每个点到目标点云中最近点的距离。
dists = np.asarray(dists)
ind = np.where(dists < 0.01)[0]
inlier_cloud = cloud.select_by_index(m_ind) # 重叠点云
outlier_cloud = cloud.select_by_index(m_ind, invert=True) # 非重叠点云