特征点匹配——使用基础矩阵、单应性矩阵的RANSAC算法去除误匹配点对

转载 2018年04月15日 09:58:32

不管是我在之前的博文中提到的SIFT、ORB等算法,其实真正匹配的结果都不会特别好,一旦视角上的变化比较大或者出现之前图像中没有出现的区域,就很容易产生误匹配。但是在实际应用中这些误匹配的点并没有对最终的匹配结果造成很大的影响,这是因为一般在进行匹配以后,都进行了去除误匹配点对的操作,这篇博文主要介绍的就是一种比较有名的RANSAC算法。 
那么,首先来看一下这个算法。

一、RANSAC算法介绍

RANSAC(Random Sample Consensus)算法是一种简单且有效的去除噪声影响,估计模型的一种方法。与普通的去噪算法不同,RANSAC算法是使用尽可能少的点来估计模型参数,然后尽可能的扩大得到的模型参数的影响范围。 
RANSAC算法的具体描述是:给定NN个数据点组成的集合PP,假设集合中大多数的点都是可以通过一个模型来产生的,且最少通过nn个点(n<Nn<N)可以拟合出模型的参数,则可以通过以下的迭代方式拟合该参数。 
对下面的操作执行kk次: 
(1)从PP中随机选择nn个数据点; 
(2)用这nn个数据点拟合出一个模型MM; 
(3)对PP中剩余的数据点,计算每个点与模型MM的距离,距离超过阈值的则认定为局外点,不超过阈值的认定为局内点,并记录该模型MM所对应的局内点的值mm; 
迭代kk次以后,选择mm最大的模型MM作为拟合的结果。 
因为在实际应用中NN的值通常会很大,那么从其中任选nn个数据点的组合就会很大,如果对所有组合都进行上面的操作运算量就会很大,因此对于kk的选择就很重要。通常情况下,只要保证模型估计需要的nn个点都是点的概率足够高即可。因此设wwNN个数据中局内点的比例,zz为进行kk次选取后,至少有一次选取的nn个点都是局内点的概率。则有

z=1(1wn)kz=1−(1−wn)k
其中1wn1−wn表示一次选取不都是局内点的概率,(1wn)k(1−wn)k表示k次选取中没有一次都是局内点的概率。 
则有
k=log(1z)log(1wn)k=log(1−z)log(1−wn)

这里zz一般要求满足大于95%即可。

二、单应性矩阵介绍

通过上面我们了解到了RANSAC算法,那么如何应用RANSAC算法去除误配点呢。首先,我们来介绍一下单应性矩阵。 
单应性矩阵描述的是针对同一事物,在不同的视角下拍摄的两幅图像之间的关系。假设这两幅图像之间是透视变换,则单应性矩阵也就是透视变换矩阵HH定义如下:

H=h11h21h31h12h22h32h13h231H=[h11h12h13h21h22h23h31h321]

则有
xy1=h11h21h31h12h22h32h13h231xy1[x′y′1]=[h11h12h13h21h22h23h31h321][xy1]

因此要恢复出HH中的8个参数,至少需要4对匹配点,过程如下: 


这里写图片描述 

那么就可以每次从所有的匹配点中选出4对,计算单应性矩阵HH,然后选出内点个数最多的作为最终的结果。计算距离方法如下: 

这里写图片描述 

三、基础矩阵介绍

对于基础矩阵的介绍在我之前的博文里已经介绍过 三维重建(一)外极几何,基础矩阵及求解,使用RANSAC方法也与上面单应性矩阵的方法相同。 

这里需要注意的是,使用单应性矩阵的方法去除误匹配点对更加严格,也就是说得到的结果更加精确,但是相对于基础矩阵的方法来讲,最后得到的匹配点数目也更少。

转载自:https://blog.csdn.net/lhanchao/article/details/52849446,非常感谢!

surf特征+FLANN特征匹配+knn筛选匹配点+单应性矩阵映射

surf特征+FLANN特征匹配+knn筛选匹配点+单应性矩阵映射 #include "stdafx.h" #include #include #include #include "opencv...
  • panda1234lee
  • panda1234lee
  • 2013-09-02 10:16:52
  • 10904

Opencv实现:SIFT特征提取+RANSAC剔除误匹配点

最近整理一下利用SIFT特征提取方法和RANSAC(随机抽样一致性方法)进行剔除无匹配点的内容,将实现过程进行记录。 程序注释的非常清楚了,新手也能很快看懂。...
  • liuhaitaowq
  • liuhaitaowq
  • 2016-09-11 14:24:23
  • 8334

RANSAC去除误匹配算法

  • 2010年07月12日 16:26
  • 222KB
  • 下载

特征匹配和单应性

使用 OpenCV 中的蛮力(Brute-Force)匹配和 FLANN 匹配。 1:Brute-Force 匹配的基础 蛮力匹配器是很简单的。首先在第一幅图像中选取一个关键点然后依次与第二幅图像...
  • chuhang_zhqr
  • chuhang_zhqr
  • 2016-04-04 23:21:26
  • 1799

特征点匹配及消除误匹配点

Mastering OpenCV with Practical Computer Vision Projects 中的第三章里面讲到了几种特征点匹配的优化方式 ...
  • m0_37598482
  • m0_37598482
  • 2017-11-28 14:13:26
  • 987

RANSAC笔记

刚来实验室那会儿,每周组会汇报,师兄报告时,和老板讨论,总听到“那就对数据RANSAC一下”……当时我怯生生的问了一下师兄,啥叫RANSAC?现在也不记得师兄咋解释的,后来自己也经常调用matlab里...
  • u013207865
  • u013207865
  • 2015-11-01 19:16:59
  • 2393

RANSAC算法实现去除误匹配并计算拼接矩阵-随笔

1.RANSAC算法实现去除误匹配并计算拼接矩阵流程 (1) 从样本集中随机抽选一个RANSAC样本,即4个匹配点对(至少4个匹配点对,才能计算出3*3变换矩阵); (2) 计算当错误...
  • u011028345
  • u011028345
  • 2017-10-31 14:17:01
  • 248

四点求解单应性矩阵

网上有很多关于单应性矩阵的求解方法,但都没有说明怎样用四点求解单应性矩阵或者源码详细说明很少。这里说说自己的理解。     首先贴出matlab代码function H = solveHomo(pts...
  • hudaliquan
  • hudaliquan
  • 2016-08-04 19:18:18
  • 3689

opencv的单应矩阵相机标定

给定同一相机在不同角度拍摄的不同照片,如果标定计算机的内参(焦距、主点)、外参(主要是旋转矩阵) opencv的图片拼接demo stitching_detailed中有示例 主要过程: 1.surf...
  • sonysuqin
  • sonysuqin
  • 2017-03-21 14:03:02
  • 1814

【CS】尺度不变特征变换匹配算法SIFT(3):RANSAC剔除错误匹配点

尺度不变特征变换匹配算法SIFT(3) 直接通过SIFT特征提取的结果并不是非常乐观,存在比较多的错误匹配,那么为了剔除这些点,我们可以使用RANSAC方法。...
  • chentravelling
  • chentravelling
  • 2015-11-14 14:27:26
  • 3627
收藏助手
不良信息举报
您举报文章:特征点匹配——使用基础矩阵、单应性矩阵的RANSAC算法去除误匹配点对
举报原因:
原因补充:

(最多只允许输入30个字)