PCL - ICP代碼研讀(十九 ) - CorrespondenceRejectorDistance實現

PCL - ICP代碼研讀(十九 ) - CorrespondenceRejectorDistance實現

前言

getRemainingCorrespondences函數是CorrespondenceRejector類別的核心,由CorrespondenceRejector的子類別各自實作。

它接受original_correspondences作為輸入,使用一定的判斷條件拒絕掉部分點對,最後將結果保存到remaining_correspondences裡。

注意到它是一個virtual函數,所以CorrespondenceRejector的各子類別會有不同的實現方式。

本篇對應到correspondence_rejection_distance.cpp這個檔案。

getRemainingCorrespondences函數

CorrespondenceRejectorDistance這個類別的名稱就可以看出來,它是以點對的距離為拒絕的標準。

CorrespondenceRejectorDistance::getRemainingCorrespondences的具體實現如下:接受original_correspondences作為輸入,拒絕掉其中距離平方超過max_distance_的點對,最後將結果保存到remaining_correspondences裡。

#include <pcl/registration/correspondence_rejection_distance.h>

//
void
pcl::registration::CorrespondenceRejectorDistance::getRemainingCorrespondences(
    const pcl::Correspondences& original_correspondences,
    pcl::Correspondences& remaining_correspondences)
{
  unsigned int number_valid_correspondences = 0;
  remaining_correspondences.resize(original_correspondences.size());
  for (const auto& original_correspondence : original_correspondences) {
    if (data_container_) {

調用DataContainer::getCorrespondenceScore計算配對original_correspondence的距離平方,檢查是否小於max_distance_(距離平方的閾值),最後把符合資格者填入remaining_correspondences

      // score小於max_distance_的才加入remaining_correspondences
      if (data_container_->getCorrespondenceScore(original_correspondence) <
          max_distance_) {
        remaining_correspondences[number_valid_correspondences] =
            original_correspondence;
        ++number_valid_correspondences;
      }
    }

else分支的邏輯與if分支大同小異:

    else {
      // correspondence中距離小於max_distance_的才加入remaining_correspondences
      if (original_correspondence.distance < max_distance_) {
        remaining_correspondences[number_valid_correspondences] =
            original_correspondence;
        ++number_valid_correspondences;
      }
    }
  }
  remaining_correspondences.resize(number_valid_correspondences);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值