一、RANSAC特征匹配算法简介
  RANSAC算法是RANdom SAmple Consensus的缩写,意为随机抽样一致。表面上的意思就是从匹配样本中随机取样,寻找一致的样本点。RANSAC算法是根据一组包含异常数据的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。它是在1981年由Fischler和Bolles最先提出。
  在利用已有算法进行特征点匹配时,常存在的一个问题就是误匹配的问题,这些误匹配的点对匹配的效果产生很大的影响,所以我们需要利用一定的方法剔除误匹配的特征点,在实际应用中,我们常会用到RANSAC算法来消除两两匹配图像的误匹配点,这个算法现在在图像配准以及拼接上得到了广泛的应用。
  RANSAC算法的核心思想就是在匹配的特征点中随机取4个特征点,通过计算和不断迭代,寻找到最优的参数模型,在这个最优模型中,能匹配上的特征点最多。

二、RANSAC算法的原理
  RANSAC算法需要寻找一个最优单应性矩阵H,矩阵大小为3×3。利用RANSAC算法找到的最优单应性矩阵H需要使得满足该矩阵的匹配特征点最多。由于常常令h33=1来归一化矩阵,所以单应性矩阵H只有8个未知参数,所以至少需要8个线性方程才能进行求解,而对应到点位置信息上,一组特征匹配点可以得到两个线性方程,因此至少需要4组特征匹配点对才能求解得到单应性矩阵H。




由特征求距离python构建邻接矩阵_RANSAC算法


  其中(x,y)表示目标图像角点位置,(x’,y’)为场景图像角点位置,s为尺度参数。
  RANSAC算法从匹配数据集中随机抽出4个样本,并保证这四个样本之间不共线。然后计算出其单应性矩阵,然后利用这个模型测试所有数据,并计算满足这个模型数据点的个数与投影误差(即代价函数)。若此模型为最优模型,则对应的代价函数最小,计算代价函数的公式如下:



由特征求距离python构建邻接矩阵_迭代_02


三、RANSAC算法的步骤
  (1)随机从特征点匹配的数据集中随机抽出4个样本数据 (此4个样本之间不能共线),然后计算出变换矩阵H,记为模型M;
  (2)计算数据集(所有特征匹配点)中所有数据与模型M的投影误差,若数据的投影误差小于设定的阈值,则将该数据加入内点集 I ;
  (3)如果当前内点集 I 元素的个数大于最优内点集 I_best , 则更新 I_best = I,同时更新迭代次数k(最优内点集不一样,对应的更新迭代次数k也就不同,下面会有k的计算公式);
  (4)如果计算的迭代次数大于k(由I_best计算得到),则退出 ; 否则迭代次数加1,并重复上述步骤。
  注释:迭代次数在不大于最大迭代次数k的情况下,迭代次数加1。一旦大于最大迭代次数k,计算停止,迭代结束。其中需要说明的是最大迭代次数k是由最优内点集 I_best 所决定,一旦最优内点集发生改变,最大迭代次数k就会发生改变。其计算公式如下:



由特征求距离python构建邻接矩阵_迭代_03


  其中,p为置信度,一般取0.995,w为内点的比例,m为计算模型所需要的最少样本数=4。

四、实例
未完待续