open3d-KDTree使用

open3d-KDTree使用

从PCD文件中读取点云并建立KDTree
#读取pcd文件
pcd = o3d.io.read_point_cloud("../../TestData/Feature/cloud_bin_0.pcd")
#将点云颜色设为相同
pcd.paint_uniform_color([0.5,0.5,0.5])
#建立KDTree
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]
	#查询第i个点的k个近邻
	[k,idx,_] = pcd_tree.search_knn_vector_3d(pcd.points[i],k)
	#将第i个点的k-1个近邻点的颜色设置为绿色
	o3d.np.asarray(pcd.colors)[idx[1:],:] = [0,1,0]
	#注意idx是从1到最后,表示,跳过了第0个点,第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]
	#查询第i个点的近邻
	[k,idx,_] = pcd_tree.search_radius_vector_3d(pcd.points[i],dis)
	#将第i个点的近邻点的颜色设置为绿色
	o3d.np.asarray(pcd.colors)[idx[1:],:] = [0,1,0]
	#注意idx是从1到最后,表示,跳过了第0个点,第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]
	#查询第i个点的近邻
	[k,idx,_] = pcd_tree.search_hybrid_vector_3d(pcd.points[i],dis,k)
	#将第i个点的近邻点的颜色设置为绿色
	o3d.np.asarray(pcd.colors)[idx[1:],:] = [0,1,0]
	#注意idx是从1到最后,表示,跳过了第0个点,第0个点为查询点本身
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值