opencv之SURF图像匹配

1.概述

前面介绍模板匹配的时候已经提到模板匹配时一种基于灰度的匹配方法,而基于特征的匹配方法有FAST、SIFT、SURF等,上面两篇文章已经介绍过使用Surf算法进行特征点检测以及使用暴力匹配(BruteForceMatcher)和最近邻匹配(FLANN)两种匹配方法。接下来将更深一步介绍利用Surf检测到的特征点以及匹配对进行图像匹配.
利用Surf算法进行图像匹配其一般流程为:检测物体特征点->计算特征点描述子->使用BurteForceMatcher或FLANN进行特征点匹配->匹配到的特征点进行透视变换findHomography()->透视矩阵变换perspectiveTransform()->绘制匹配物体轮廓

2. OpenCV API

透视变换
findHomography()
这个函数的作用是在图像原平面和目标图像平面之间寻找并返回一个透视变换矩阵H,如下:

所以反向投影误差

最小化。如果参数metchod被设置为默认值0,改函数使用所有的点以简单的最小二乘法计算一个初始的单应估计。可以简单理解为透视变换矩阵就是把一幅图像从一个空间变换到另一个空间所需要进行旋转平移而进行加权的矩阵。
但是并不是所有的点匹配对(srcPoints_i, dstPoints_i)都适合使用刚性的透视变换(有些异常值),这样变换得到的透视矩阵误差较大。在这种情况下可以使用两种鲁棒的方法RANSAC和LMeDS,尝试使用很多对应匹配点的随机子集,使用该子集和最简单的最小二乘法估计单应性矩阵,然后计算得到的透视变换矩阵的质量/好坏(quality/goodness),然后使用最佳子集来计算单应性矩阵的初始估计矩阵和内在值/异常值(inliers/outliers)的掩码。
不管方法是否具有鲁棒性,使用Levenberg-Marquardt方法进一步精确计算单应性矩阵(如果方法具有鲁棒性仅使用内在值(inline))来减少再投影误差。
RANSAC几乎可以处理任意比例的异常值,但是它需要一个阈值来区分内在值还是异常值。LMeDS不需要任何阈值,但是只有在内在值比例大于50%的情况下才能准确计算。如果没有太多异常值,噪声有比较小的情况下使用默认方法即可
函数用来查找初始的内在和外在矩阵,透视变换矩阵确定了一个比例.无论何时如果不能估计H矩阵则函数将返回一个空矩阵

Mat cv::findHomography  (   InputArray  srcPoints,
                            InputArray  dstPoints,
                            int     method = 0,
                            double  ransacReprojThreshold = 3,
                            OutputArray     mask = noArray(),
                            const int   maxIters = 2000,
                            const double    confidence = 0.995 
                        )

srcPoints:原平面对应点,可以是CV_32FC2或vector类型的矩阵。
dstPoints:目标平面对应点,可以是CV_32FC2或vector类型的矩阵
method:用于计算矩阵的方法,可选方法上面已经介绍过有默认值0,CV_RANSAC和CV_LMEDS
ransacReprojThreshold:有默认值3,区分内在值还是异常值的阈值点,只在RANSAC方法有用,当||dstPoints-convertPointsHomogeneous(H*srcPoints)||>ransacReprojThreshold,这个点就会被认为是异常值(outlier).如果srcPoints和dstPoints是以像素为单位,则参数的取值范围一般在1-10之间。
mask:可选参数,有默认值noArray(),通过鲁棒性方法(RANSAC或LMEDS)设置输出掩码。
函数另一种定义形式如下:

Mat cv::findHomography  (   InputArray  srcPoints,
                            InputArray  dstPoints,
                            OutputArray 
  • 18
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值