OpenCV中的solvePnPRansac函数和findHomography函数都具有RANSAC特性,该特性使算法对少量的错误数据鲁棒。
这两个函数利用RANSACPointSetRegistrator
类实现RANSAC算法,但这个类并没有对外开放,因此只能通过阅读OpenCV源代码学习RANSAC算法的实现和使用。
类的实现在ptsetreg.cpp中,可通过调用precomp.hpp文件中的createRANSACPointSetRegistrator
函数使用。此外,该文件还提供了createLMeDSPointSetRegistrator
函数调用最小中值算法。
关于RANSAC的介绍详见这篇博客
createRANSACPointSetRegistrator
函数的原型为
Ptr<PointSetRegistrator> createRANSACPointSetRegistrator(const Ptr<PointSetRegistrator::Callback>& cb,
int modelPoints, double threshold,
double confidence = 0.99, int maxIters = 1000);
参数cb
类型为PointSetRegistrator::Callback
,是要传入的被包装的估计算法对象,被RANSAC类调用以进行试探的估计过程;参数modelPoints
设定计算模型需要的最少数据点;参数threshold
设定区分内点和外点的阈值;参数confidence
设定返回正确值的概率(决定抽样次数);参数maxIters
设定最大走样次数。后三个参数与solvePnPRansac
函数中的意义