今天学习了一下RANSAC随机样本一致性算法,其在图像融合、特征点匹配方面有很强大的应用。网上已经有很多人写了关于这方面的文档,就不再造轮子了。特此罗列出来,以供后续参考。
我的数学之美(一)——RANSAC算法详解
这篇文章很基本地讲述了RANSAC算法的基本概念。RANSAC算法原理与源码解析
本篇文章讲述了在opencv特征点匹配过程中ransac算法滤除误匹配的详细思路。其中讲到:OpenCV中滤除误匹配对采用RANSAC算法寻找一个最佳单应性矩阵H,矩阵大小为3×3。RANSAC目的是找到最优的参数矩阵使得满足该矩阵的数据点个数最多,通常令h33=1来归一化矩阵。由于单应性矩阵有8个未知参数,至少需要8个线性方程求解,对应到点位置信息上,一组点对可以列出两个方程,则至少包含4组匹配点对。
RANSAC算法从匹配数据集中随机抽出4个样本并保证这4个样本之间不共线,计算出单应性矩阵,然后利用这个模型测试所有数据,并计算满足这个模型数据点的个数与投影误差(即代价函数),若此模型为最优模型,则对应的代价函数最小。
注意两点:- 目标图像也就是测试图像或者称为query set(查询集),场景图像称为train set (训练集) ,对应模板图像。一般我们都是在训练图像中,查询测试图像的特征点的匹配情况。
- 关于上面投影矩阵参数的求解问题。
一组点对(两个点)代入上面方程,则可以分解出三个方程,但实际上就是两个方程,最后一个方程是缩放参数s,可以消掉。至于s的存在主要是齐次化的结果。
学习OpenCV——KeyPoint Matching 优化方式
- 学习OpenCV——通过KeyPoints进行目标定位
介绍了sift,surf,orb描述子的一些对比,以及匹配的一些优化方法。