open3d-KDTree使用
从PCD文件中读取点云并建立KDTree
pcd = o3d.io.read_point_cloud("../../TestData/Feature/cloud_bin_0.pcd")
pcd.paint_uniform_color([0.5,0.5,0.5])
pcd_tree = o3d.geometry.KDTreeFlann(pcd)
KNN最近邻搜索
def search_knn_vector_3d(pcd,pcd_tree,k,i):
'''
输入参数:
pcd:点云数据
pcd_tree:建立的KDTree
k:近邻数量
i:KNN搜索的当前点的index
'''
pcd.colors[i] = [1,0,0]
[k,idx,_] = pcd_tree.search_knn_vector_3d(pcd.points[i],k)
o3d.np.asarray(pcd.colors)[idx[1:],:] = [0,1,0]
RNN最近邻搜索
def search_radius_vector_3d(pcd,pcd_tree,dis,i):
'''
输入参数:
pcd:点云数据
pcd_tree:建立的KDTree
dis:搜索半径
i:RNN搜索的当前点的index
'''
pcd.colors[i] = [1,0,0]
[k,idx,_] = pcd_tree.search_radius_vector_3d(pcd.points[i],dis)
o3d.np.asarray(pcd.colors)[idx[1:],:] = [0,1,0]
混合最近邻搜索
def search_hybrid_vector_3d(pcd,pcd_tree,k,dis,i):
'''
输入参数:
pcd:点云数据
pcd_tree:建立的KDTree
k:最近邻的个数
dis:搜索半径
i:RNN搜索的当前点的index
'''
pcd.colors[i] = [1,0,0]
[k,idx,_] = pcd_tree.search_hybrid_vector_3d(pcd.points[i],dis,k)
o3d.np.asarray(pcd.colors)[idx[1:],:] = [0,1,0]