欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Open3d学习计划——10(KDTree)

程序员文章站 2022-07-13 09:55:01
...

Open3d学习计划——10(KDTree)

欢迎大家关注“点云PCL”公众号,进入群聊一起学习。
学习计划 9 由另一位小伙伴翻译,题目为:Open3d 学习计划——9(ICP配准)需要学习的朋友可以点击题目进入。

KDTree

Open3d使用FLANN构建KDTree以便进行快速最近邻检索。

从点云中建立KDTree

下面的代码读取一个点云并且构建一个KDTree。这是下面最邻近查询的需处理步骤。

print("Testing kdtree in open3d ...")
print("Load a point cloud and paint it gray.")
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)

Testing kdtree in open3d …
Load a point cloud and paint it gray.

寻找邻域点

我们选择了1500个点作为锚点(anchor point),并将其涂为红色。

print("Paint the 1500th point red.")
pcd.colors[1500] = [1, 0, 0]

Paint the 1500th point red.

使用 search_radius_vector_3d

类似的,我们能够使用 search_radius_vector_3d 去查询所有的和锚点距离小于给定半径的点,将其涂成绿色。

print("Find its neighbors with distance less than 0.2, paint green.")
[k, idx, _] = pcd_tree.search_radius_vector_3d(pcd.points[1500], 0.2)
np.asarray(pcd.colors)[idx[1:], :] = [0, 1, 0]

Find its neighbors with distance less than 0.2, paint green.

print("Visualize the point cloud.")
o3d.visualization.draw_geometries([pcd], zoom=0.5599,
                                  front=[-0.4958, 0.8229, 0.2773],
                                  lookat=[2.1126, 1.0163, -1.8543],
                                  up=[0.1007, -0.2626, 0.9596])

Visualize the point cloud.

Open3d学习计划——10(KDTree)

Note:
除了KNN搜索(search_knn_vector_3d)和RNN搜索(search_radius_vector_3d)以外,Open3d还提供了混合搜索函数(search_hybrid_vector_3d)。它最多返回K个和锚点距离小于给定半径的最邻近点。这个函数结合了KNN和RNN的搜索条件,在某些文献中也被称作RKNN搜索。在许多情况下它有着性能优势,并且在Open3d的函数中大量的使用.

关于翻译大家有更好的意见欢迎评论一起学习!!!

欢迎大家关注“点云PCL”公众号,进入群聊一起学习。

Open3d学习计划——10(KDTree)

相关标签: open3d python