几何篇(四)
前言
本章节将主要介绍K-d树和八叉树。
一、K-d树
Open3D 使用FLANN构建 KDTrees 以快速检索最近的邻。其搜索方式主要包括两种,一种是根据数量搜索,另一种是根据半径来搜索。
代码如下:
auto new_cloud_ptr = std::make_shared<geometry::PointCloud>();//读入点云数据,并判断是否读入成功
if (io::ReadPointCloud("../data/fragment.ply", *new_cloud_ptr)) {
utility::LogInfo("Successfully read {}", "../data/fragment.ply");
} else {
utility::LogWarning("Failed to read {}", "../data/fragment.ply");
return 1;
}
Eigen::Vector3d color(0.5,0.5,0.5); //把点云设置为灰色
new_cloud_ptr->open3d::geometry::PointCloud::PaintUniformColor(color);//把点云设置为灰色
//最大个数的搜索方法
geometry::KDTreeFlann kdtree;
int num =200; //最近邻个数
kdtree.SetGeometry(*new_cloud_ptr);
std::vector<int> new_indices_vec(num);//最近邻对应的点云索引序号
std::vector<double> new_dists_vec(num);//最近邻离中心点的距离
kdtree.SearchKNN(new_cloud_ptr->points_[1500], num, new_indices_vec, //将第1500个点设置为搜索的中心点
new_dists_vec);
for (size_t i = 0; i < new_indices_vec.size()

本文介绍了K-d树和八叉树的基本概念及在3D点云数据中的应用,包括K-d树的两种搜索方法(基于数量和基于半径),以及八叉树的空间划分原理和遍历操作。
最低0.47元/天 解锁文章
4485

被折叠的 条评论
为什么被折叠?



