open3d registration_ransac_based_on_feature_matching 算法理解

点云配准详解
本文深入探讨了使用open3d进行点云配准的过程,详细解析了RegistrationRANSACBasedOnFeatureMatching函数的工作原理,包括如何通过特征匹配寻找点云间的对应关系,以及如何计算最优的配准变换。

0.写在前面

1.最近在做open3d的点云配准,这里附上RegistrationRANSACBasedOnFeatureMatching的源码和一些注释
2.还没看参数checkers的作用

1.主要思想

  1. 通过kdtree在target_feature中查找距离source_feature中每个点最近的点,结果储存在similar_features
  2. 这些相距最近的点对保存在ransac_corres中
  3. 根据这些点对计算源点云到目标点云的变换矩阵transformation
  4. 应用transformation,将source向target变换
  5. 返回结果RegistrationResult(用fitness和inlier_rmse来评价好坏)

在这里插入图片描述

2.点云的输入是否可以省略

1.用来定义similar_features的大小
2.计算近邻中心点编号(source_sample_id)
3.需要根据两个点云来计算变换矩阵(最关键)

3.点云特征的作用

直接在点云中查找哪些点是对应的点十分困难,
因此通过这些点对应的特征,计算最近邻的点,以此来查找对应点云中对应的点

3.附上代码及注释

RegistrationResult RegistrationRANSACBasedOnFeatureMatching(
        const geometry::PointCloud &source,
        const geometry::PointCloud &target,
        const Feature &source_feature,
        const Feature &target_feature,
        double max_correspondence_distance,
        const TransformationEstimation &estimation
        /* = TransformationEstimationPointToPoint(false)*/,
        int ransac_n /* = 4*/,
        const std::vector<std::reference_wrapper<const CorrespondenceChecker>>
                &checkers /* = {}*/,
        const RANSACConvergenceCriteria &criteria
        /* = RANSACConvergenceCriteria()*/) {
   
   
    if (ransac_n < 3 || max_correspondence_distance <= 0.0) {
   
   
        return RegistrationResult();
    }

    RegistrationResult result;
    int total_validation = 0;
    bool finished_validation = false;
    int num_similar_features = 1;
    //存储各个点的最近邻点
    std::vector<std::vector<int>> similar_features(source.points_.size());

#ifdef _OPENMP
#
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值