sift特征检测与匹配

一 实验背景

1.sift算法介绍

1.1sift算法特点

1.sift特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性。
2.独特性好,信息量丰富,适用于在海量特征库进行快速、准确的匹配。
3.多量性,即使是很少几个物体也可以产生大量的SIFT特征
4.高速性,经优化的SIFT匹配算法甚至可以达到实时性
5.扩招性,可以很方便的与其他的特征向量进行联合。

1.2sift算法可以解决的问题

目标的旋转、缩放、平移;图像仿射投影变换 ;弱光照影响;部分目标遮挡;杂物场景;噪声

1.3 sift算法实现具体步骤

算法实质:在不同尺度空间上查找特征点(关键点)
主要工序:
(1)提取关键点
(2)对关键点附加详细的信息(局部特征)也就是所谓的描述器
(3)通过两方特征点(附带上特征向量的关键点)的两两比较找出相互匹配的若干对特征点,也就建立了景物间的对应关系。
在这里插入图片描述

2.关键点相关概念

2.1关键点(特征点)

所谓关键点,就是在不同尺度空间的图像下检测出的具有方向信息的局部极值点。
sift中要查找的关键点是十分突出的点,不会因光照、尺度、旋转等因素的改变而消失。两幅图像中有相同的景物,那么使用某种方法分别提取各自的稳定点,这些点之间会有相互对应的匹配点。

2.2尺度空间

尺度空间理论最早于1962年提出,其主要思想是通过对原始图像进行尺度变换,获得图像多尺度下的空间表示。 从而实现边缘、角点检测和不同分辨率上的特征提取,以满足特征点的尺度不变性。在一定范围内,人眼可以分辨出物体的大小,但计算机并未具有相同的能力,因此在未知场景中,计算机视觉不能够提供物体的尺度大小,所以采用的方法是:将物体不同尺度下的图像都提供给计算机这样计算机就能够对一个物体的不同尺度有一个统一认识,也就是说,要考虑图像在不同尺度下都存在的特点。尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上的形成过程。并且尺度越大图像越模糊。

3.高斯模糊

3.1高斯函数

在这里插入图片描述

3.2高斯模糊

高斯模糊是在Adobe Photoshop等图像处理软件中广泛使用的处理 效果,通常用它来减小图像噪声以及降低细节层次。这种模糊技术生成 的图像的视觉效果是好像经过一个半透明的屏幕观察图像。
在这里插入图片描述
高斯模板大小的选择:
在这里插入图片描述
通常,图像处理程序只需要计算(6σ+1)(6σ-1)

4.高斯金字塔

高斯金字塔的构建过程可构成两步:
(1)对图像做高斯平滑
(2)对图像做降采样
在这里插入图片描述
高斯图像金字塔共o组,s层,则有:
在这里插入图片描述
最后可将组内和组间尺度归为:
在这里插入图片描述

5.关键点检测-DOG

5.1LOG

LOG算子即由高斯函数梯度算子GoG构建
在这里插入图片描述
LOG算子与高斯核函数的关系:
在这里插入图片描述
通过推导可以看出,LOG算子与高斯核函数的差有直接关系,由此引入一种新的算子DOG,即高斯差分算子。

5.2DOG

原理:
在这里插入图片描述
DOG在计算上只需相邻尺度高斯平滑后图像相减。
对应DOG算子,我们要构建DOG金字塔:

在这里插入图片描述
通过高斯差分图像可以看出图像上的像素值变化情况。(如果没有变化,也就没有特征。特征必须是变化尽可能多的点。)DOG图像描绘的是目标的轮廓。

基本步骤:
(1)将原始图像做高斯卷积
(2)将处理后的图像做高斯差分,此时可输出金字塔类型图
(3)找候选极值点
(4)通过构造Hessian矩阵去除边缘响应

局部极值检测:
关键点是由DOG空间的局部极值点组成的。为了寻找DOG函数的极值点,每一个像素点要和它的所有相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。
在这里插入图片描述
中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9*2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。
从上面的描述中可以知道,每组图像的首末两层是无法进行比较取得极值的。为了满足尺度变换的连续性,在每一组图像的顶层继续使用高斯模糊生成3幅图像,高斯金字塔每组有S+3层图像,DoG金字塔的每组有S+2组图像。这样产生的极值点并不全都是稳定的特征点,因为某些极值点响应较弱,而且DOG算子会产生较强的边缘响应。

去除边缘响应:
DOG函数的峰值点在横跨边缘的方向上有较大的主曲率,而在垂直边缘的方向有较小的主曲率。主曲率可以通过计算在该点位置尺度的2*2的Hessian矩阵得到,导数由采样点相邻差来估计:
在这里插入图片描述
D的主曲率和H的特征值成正比。令 α ,β为特征值,则
在这里插入图片描述在两特征值相等时值达到最小,随r的增长而增长。Lowe论文中建议r取10。
在这里插入图片描述
这时将关键点保留,反之剔除。

6.关键点方向分配

我们通过求每个极值点的梯度来为极值点赋予方向。
像素点的梯度表示:
在这里插入图片描述
确定关键点的方向采用梯度直方图统计法,统计以关键点为原点,一定区域内的图像像素点对关键点方向生成所做的贡献。

方向分配实现步骤:
(1)确定计算关键点直方图的高斯函数权重函数参数。
(2)生成含有36柱的方向直方图,梯度直方图范围0-360°,其中每10°一个柱。由半径为图像区域生成。
(3)对方向直方图进行两次平滑。
(4)求取关键点方向。
(5)对方向直方图的Taylor展开式进行二次曲线拟合,精确关键点方向。

7.关键点描述

描述的思路是通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。
以旋转之后的主方向为中心取8x8的窗口,左图中点为当前关键点的位置,每一个小格都代表了特征点邻域所在的尺度空间的一个像素,箭头方向代表了像素梯度方向,箭头长度代表该像素的幅值。然后在每个4x4的小块上绘制8个方向的梯度直方图,计算每个梯度方向的累加值,即可形成一个种子点,如右图所示,每个特征的由4个种子点组成,每个种子点有8个方向的向量信息,这种邻域方向性信息联合增强了算法的抗噪能力,同时对于含有定位误差的特征匹配也提供了比较理性的容错性。
在这里插入图片描述
在这里插入图片描述
旋转后的新坐标:在这里插入图片描述
Lowe实验结果表明:描述子采用4×4×8=128维向量表征综合效果最优(不变性与独特性)

8.关键点匹配

分别对模板图和实时图建立关键点描述子集合。目标的识别是通过两点集内关键点描述子的比对来完成。具有128维的关键点描述子的相似性度量采用欧式距离。
在这里插入图片描述
穷举匹配:
在这里插入图片描述
关键点的匹配可以采用穷举法来完成,但耗费时间太多,一般都采用一种叫kd数的数据结构来完成搜索。搜索的内容是以目标图像的关键点为基准,搜索与目标图像的特征点最邻近的原图像特征点和次邻近的原图像特征点。
kd树是一个平衡二叉树:
在这里插入图片描述

9.消除错配点(RANSAC)

RANSAC的全称是“RANdom SAmple Consensus(随机抽样一致)”。它可以从一组包含“局外点”的观测数据集中,通过迭代方式估计数学模型的参数。它是一种不确定的算法,也就是说它有一定的概率得出一个合理的结果,所以为了提高概率必须提高迭代次数。RANSAC是一种鲁棒性的参数估计方法。实质上就是一个反复测试不断迭代的过程。

(1)基本思想

首先根据具体问题设计出某个目标函数,然后通过反复提取最小点集估计该函数中参数的初始值,利用这些初始值把所有的数据分为“内点”和“外点”,最后用所有的内点重新计算和估计函数的参数。

(2)基本步骤

① 随机选择四对匹配特征
② 根据DLT计算单应矩阵 H (唯一解)
③ 对所有匹配点,计算映射误差ε= ||pi’, H pi||
④ 根据误差阈值,确定inliers(例如3-5像素)
⑤ 针对最大inliers集合,重新计算单应矩阵 H

(3)RANSAC示例:直线拟合

① 给定若干二维空间中的点,求直线 y=ax+b ,使得该直线对空间点的拟合误差最小
在这里插入图片描述
② 随机选择两个点,根据该点构造直线。给定阈值,计算inliers数量
在这里插入图片描述
③ 重复②步骤
在这里插入图片描述
在这里插入图片描述
④ 循环迭代,其中inliers最大的点集即为最大一致集,最后将该最大一致集里面的点利用最小二乘拟合出一条直线。

(4)参数

用w表示每次从数据集中选取一个局内点的概率,如下式所示:
w = 局内点的数目 / 数据集的数目
通常情况下,我们事先并不知道w的值,但是可以给出一些鲁棒的值。假设估计模型需要选定n个点,w的n次方是所有n个点均为局内点的概率;1-w^n是n个点中至少有一个点为局外点的概率,此时表明我们从数据集中估计出了一个不好的模型。
(1-wn)k表示算法永远都不会选择到n个点均为局内点的概率,它和1-p相同。因此,
1-p = (1 - wn)k
我们对上式的两边取对数,得出
在这里插入图片描述
如果希望成功率提高,p = 0.99,当n不变时,k越大,p越大;当 w 不变时,n越大,所需的k就越大,通常,w位置,所以选小一点比较好。
为了得到更可信的参数,标准偏差或它的乘积可以被加到k上。k的标准偏差定义为:
在这里插入图片描述

二 实验内容

1. 构造数据集

针对自己所处环境,拍摄多张照片(来自不同场景),构造出一个小数据集
如下图所示:
在这里插入图片描述

2. 提取每张图片的sift特征并展示特征点

实验代码:
在这里插入图片描述
结果如下:
图1
在这里插入图片描述
图2
在这里插入图片描述
图3
[在这里插入图片描述
图4
在这里插入图片描述
图5
![在这里插入图片描述
图6
在这里插入图片描述
图7
在这里插入图片描述
图8
在这里插入图片描述
图9
在这里插入图片描述
图10
在这里插入图片描述
图11
在这里插入图片描述
图12
!在这里插入图片描述
图13
在这里插入图片描述
图14
在这里插入图片描述
图15
在这里插入图片描述
小结:
提取出的关键点主要分布在一些比较突出的点。如:
角点:结果显示测出的sift特征点与测出的角点有很大一部分是重合的。
暗区域的亮点或暗区域的亮点:图13,14,15是在晚上拍的,大部分区域属于暗区域,而测出的特征点几乎都是分布在有灯的地方,即亮区域。
还可以看出边缘点也是容易提取出关键点的位置。
并且特征提取的速度与图片的大小有关,图片越小,结果越快。图片越大,结果越慢,甚至有些无法检测出。
对于同一场景,白天的照片和晚上的照片检测出的特征点相差较大,说明光照对于sift特征是有一定影响的。

3. 计算给定两张图片的sift特征匹配结果

实验代码:

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SIFT(尺度不变特征变换)是一种常用的图像特征检测匹配算法。它的实质是在不同尺度空间上查找特征点,主要包括以下几个步骤\[1\]: 1. 提取关键点:通过在不同尺度下对图像进行下采样,构建图像金字塔,并在每个采样图像上进行特征检测。 2. 描述关键点:对每个特征点附加详细的信息,也就是所谓的描述子。描述子可以理解为一个用来描述特征点的向量,后面的特征匹配就是对每个特征点之间描述子是否相似的判断。 3. 特征匹配:通过对两方特征点的两两比较,找出相互匹配的若干对特征点,建立景物间的对应关系。 其中,SIFT算法是一种常用的特征检测算法。它采用FAST特征检测算法来检测特征点,FAST算法定义了特征点的条件,即某个像素点和它周围领域足够多的像素点处于不同区域。对于灰度图,特征点处的灰度值与周围足够多像素的灰度值不同。然后,采用BRIEF描述子来描述每个特征点,BRIEF描述子是用来描述特征点的向量。最后,通过对描述子的相似性进行判断,实现特征点的匹配\[2\]。 总结起来,SIFT特征检测匹配是通过在不同尺度空间上查找特征点,并对特征点进行描述和匹配,从而实现图像间的对应关系。这种算法具有尺度不变性和旋转不变性等优点,因此在图像处理和计算机视觉领域得到广泛应用\[3\]。 #### 引用[.reference_title] - *1* *3* [sift特征检测匹配](https://blog.csdn.net/zencci/article/details/104702649)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [特征点的检测匹配(ORB,SIFT,SURFT比较)[opencv-python]](https://blog.csdn.net/weixin_43151193/article/details/125222481)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值