0.写在前面
1.最近在做open3d的点云配准,这里附上RegistrationRANSACBasedOnFeatureMatching的源码和一些注释
2.还没看参数checkers的作用
1.主要思想
- 通过kdtree在target_feature中查找距离source_feature中每个点最近的点,结果储存在similar_features
- 这些相距最近的点对保存在ransac_corres中
- 根据这些点对计算源点云到目标点云的变换矩阵transformation
- 应用transformation,将source向target变换
- 返回结果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
#
点云配准详解

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

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



