pclpy OC-Tree “体素内的邻居搜索”、“K 最近邻搜索”和“半径内的邻居搜索”
一、算法原理
1.介绍
八叉树是一种用于组织稀疏 3-D 数据的基于树的数据结构。
八叉树是一种基于树的数据结构,用于管理稀疏 3-D 数据。每个内部节点正好有八个子节点。在本教程中,我们将学习如何使用八叉树在点云数据中进行空间分区和邻居搜索。
2.“体素内的邻居搜索”、“K 最近邻搜索”和“半径内的邻居搜索”
体素内的邻居搜索
这里使用的第一种搜索方法是“体素内的邻居搜索”。它将搜索点分配给相应的叶节点体素并返回点索引向量。这些指数与落在同一体素内的点有关。因此,搜索点和搜索结果之间的距离取决于八叉树的分辨率参数。
# 体素最近邻搜索
pointIdxVec = pclpy.pcl.vectors.Int()
if octree.voxelSearch(searchPoint, pointIdxVec) > 0:
print('Neighbors within voxel search at (', searchPoint.x,
'', searchPoint.y,
'', searchPoint.z, ')\n')
for i in range(len(pointIdxVec)):
print(" ", cloud.x[pointIdxVec[i]],
" ", cloud.y[pointIdxVec[i]],
" ", cloud.z[pointIdxVec[i]], "\n")
K 最近邻搜索
在此示例中,K 设置为 10。“K 最近邻搜索”方法将搜索结果写入两个单独的向量。第一个 pointIdxNKNSearch
将包含搜索结果(索引引用关联的 PointCloud
数据集)。第二个向量保存搜索点和最近邻居之间的相应平方距离。
# # k最近邻搜索
k = 10
pointIdxNKNSearch = pcl.vectors.Int()
pointNKNSquaredDistance = pcl.vectors.Float()
print('K nearest neighbor search at (', searchPoint.x,
'', searchPoint.y,
'', searchPoint.z,
') with k =', k)
if octree.nearestKSearch(searchPoint, k, pointIdxNKNSearch, pointNKNSquaredDistance) > 0:
for i in range(len