SIFT特征(五)

本文详细介绍了如何利用OpenCV中的FeatureDetector实现SIFT特征检测,并通过匹配和RANSAC算法进行目标识别。首先提取模板图像和场景图像的SIFT特征点,然后通过KNN匹配和比值检验筛选正确匹配,最后利用RANSAC计算单应矩阵排除错误匹配,从而确定目标物体的位置。
摘要由CSDN通过智能技术生成

经过前面四个章节的介绍,我们已经知道了如何从一幅图像中提取稳定的SIFT特征。接下来,我们将针对OpenCV中提供的FeatureDetector函数来说明具体如何实现SIFT特征检测,以及如何使用检测到的SIFT特征点进行目标识别。

对于目标检测问题,通常是给定模板图像(如book.jpg)(数据库,可包含一张或多张模板图像提取的SIFT特征点),希望从场景图片(如scene.jpg)(待检测场景)中检测出模板物体的位置及相应变换矩阵。场景中包含的模板物体通常由于相机参数的改变,光照、噪声、遮挡等因素的影响产生改变。而SIFT特征点对于这些改变恰好具有较好的稳定性。

scene.jpg book.jpg

基于SIFT特征点进行物体检测的基本步骤包括,
a. 分别提取模板图像和场景图像的SIFT特征点,及每个特征点生成的128维度的特征向量。
b. 特征点匹配。 对于场景图像提取的每个特征点,在模板图像中寻找最优匹配和次优匹配特征点,如果最优匹配与次优匹配的比值过大,则认为是错误匹配对。
c. 使用RANSAC计算两个图像平面变换的单应矩阵,筛选不符合当前变换的“局外”匹配点(outliers)。

6.1 特征点匹配
关于如何提取场景图像以模板图像的SIFT特征点及特征向量,这里不再赘述。

对于场景图像中检测的特征点,我们希望从模板图像中寻找可能的匹配点,可以通过特征向量的欧式距离计算最近邻的方法获得。但是对于场景中的背景特征点,极有可能是无法在数据库中找到对应点的,或者部分特征点有可能被错误匹配,那么就必须确定一种筛选方法将错误匹配点删除。

最简单的思路是确定一个距离阈值,凡是大于该阈值的匹配认为是错误匹配,但是所有特征点选择统一的阈值度量并不鲁棒。更优的决策是对于每个特征点,计算在数据库中的最优匹配和次优匹配(欧氏距离最小及排名第二小的匹配点)距离。通常情况下,正确匹配点的最优正确匹配应明显地区别于其他错误匹配,而对于错误匹配点,由于描述特征的多维度,在计算距离排序时可能存在前若干个距离相近且较大的错误匹配。所以可以通过计算每个特征点的最优匹配和次优匹配的距离比值,如果该比值小于某个给定的阈值(最优匹配距离要明显大于次优匹配距离),则认为该匹配点是被正确匹配的,否则被认为是错误匹配的。(详见代码part 2部分)

6.2 RANSAC计算单应矩阵筛选特征点
6.2.1 单应矩阵
在计算机视觉中,平面的单应性被定义为从一个二维平面到另一个二维平面的投影映射,包括平移、放射、尺度变换,试图找到一个投影矩阵,该投影矩阵可以将一个平面的所有点,匹配到另一个平面中。例如,照相机标定可以采用棋盘格平面来辅助完成,在这个过程中,从棋盘格平面到摄像机投影平面的映射反应的是平面的单应性;又比如,空间平面在两个摄像机下的投影图像之间具有点一一对应的关系(见下图),这种对应关系也可以通过单应矩阵来进行表达。

这里写图片描述

具体描述为,设 π 是不通过两摄像机任一光心的空间平面,它在两个摄像机下的图像分别记为 I I ,如上图所示。令 X 是平面 π 上的任意一点,它在两个摄像机下的像分别为 m m 。空间平面 π 到两个像平面之间存在两个单应矩阵 H1 H2 ,使得 m=H1X m=H2X ,这两个单应矩阵 H1 H2 实现了空间平面 π 到对应像平面之间的一一变换。同时,空间平面中的任一点投影到两投影面上的两点之间也存在单应关系,他们之间的变换可以表达为 m=Hm ,其中 H=H2H11 ,即平面在两个摄像机下的投影图像之间存在一个二维映射变换,矩阵 H 实现了从第一个平面到第二个平面的一一变换。在我们的检测例子中,模板图像和场景图像中的目标区域同样存在着这种单应关系,我们的目标正是通过计算两者的单应矩阵来排除错误匹配点。

单应矩阵 H 是大小为3*3的矩阵,对于左右像上的对应点的齐次坐标表示为 p1=[x1,y1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值