RANSAC和SAC-IA

随机采样一致性(RANSAC)—— 模型参数估计;
最大似然估计(MLESAC)—— 模型参数估计;
最小中值方差估计(LMEDS)
采样一致性初始对齐算法(SAC-IA)—— 粗对齐;

https://littlebearsama.github.io/2020/04/11/Registration/0.SAC-IA/#more

程序:(调用PCL库函数)
SAC-IA粗配准+ICP精配准

#include 

	//SAC配准
	pcl::SampleConsensusInitialAlignment<pcl::PointXYZ, pcl::PointXYZ, pcl::FPFHSignature33> scia;//采样一致性初始配准
	scia.setInputSource(cloud_src);//源点云
	scia.setInputTarget(cloud_tgt);//目标点云
	scia.setSourceFeatures(fpfhs_src);//源点云的fpfh特征值
	scia.setTargetFeatures(fpfhs_tgt);//目标点云的fpfh特征值
	//scia.setMinSampleDistance(1);//设置样本之间的最小距离
	//scia.setNumberOfSamples(2);//设置每次迭代计算中使用的样本数量,可节省时间
	//scia.setCorrespondenceRandomness(20);//在选择随机特征对应时,设置要使用的邻居的数量;也就是计算协方差时选择的近邻点个数,该值越大,协防差越精确,但是计算效率越低.(可省)
	PointCloud::Ptr sac_result(new PointCloud);
	scia.align(*sac_result);//sac-ia函数直接配准(在这个类里,输入点云是cloud_src)
	std::cout << "sac has converged:" << scia.hasConverged() << "  score: " << scia.getFitnessScore() << endl;//scia.hasConverged() 计算正确?返回true
	Eigen::Matrix4f sac_trans;
	sac_trans = scia.getFinalTransformation();//获取计算得到的旋转平移矩阵

类SampleConsensusPrerejective实现基于采样一致性的位姿估计,其高效之处在于利用类CorrespondenceRejectorPoly提前去除了错误位姿的假设;
和SampleConsensusInitialAlignment不同。

程序:(自己根据特征匹配SVD计算的源代码,根据fpfh特征匹配特征点,SVD计算旋转矩阵都可参考)
SAC-IA算法实现

你可能感兴趣的:(数学基础知识,点云处理)