Open3D点云库 C++学习笔记

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

几何篇(四)


前言

本章节将主要介绍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()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫大的救赎计划

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值