`
taotaogo1980
  • 浏览: 84216 次
社区版块
存档分类
最新评论

SIFT算法概述

阅读更多

    <span></span>
<div style="padding-bottom: 0px; background-color: rgb(255,255,255); margin: 5px; padding-left: 0px; padding-right: 0px; font-family: Arial,Verdana,sans-serif; font-size: 12px; padding-top: 0px;">

SIFT算法小结

1 SIFT 发展历程

SIFT算法由D.G.Lowe 1999年提出,2004年完善总结。后来Y.Ke将其描述子部分用PCA代替直方图的方式,对其进行改进。

2 SIFT 主要思想

SIFT算法是一种提取局部特征的算法,在尺度空间寻找极值点,提取位置,尺度,旋转不变量。

3 SIFT算法的主要特点:

a) SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性。

b) 独特性(Distinctiveness)好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配<sup>[23]</sup>。

c) 多量性,即使少数的几个物体也可以产生大量SIFT特征向量。

d) 高速性,经优化的SIFT匹配算法甚至可以达到实时的要求。

e) 可扩展性,可以很方便的与其他形式的特征向量进行联合。



4SIFT算法步骤:

1)检测尺度空间极值点

2)精确定位极值点

3)为每个关键点指定方向参数

4)关键点描述子的生成

5SIFT算法详细

▲尺度空间的生成

尺度空间理论目的是模拟图像数据的多尺度特征。

高斯卷积核是实现尺度变换的唯一线性核[],于是一副二维图像的尺度空间定义为:

<img src="http://hi.csdn.net/attachment/201110/24/0_1319469748vf9v.gif" alt="">(1)

其中<span><img src="http://hi.csdn.net/attachment/201110/24/0_13194698136X4y.gif" alt=""></span>是尺度可变高斯函数,

<img src="http://hi.csdn.net/attachment/201110/24/0_1319469850Yvb7.gif" alt="">(2)

(x,y)是空间坐标,<img src="http://hi.csdn.net/attachment/201110/24/0_1319469916VJZz.gif" alt="">是尺度坐标。

为了有效的在尺度空间检测到稳定的关键点,提出了高斯差分尺度空间(DOG scale-space)。利用不同尺度的高斯差分核与图像卷积生成。

<img src="http://hi.csdn.net/attachment/201110/24/0_1319469932ce5e.gif" alt="">(3)

DOG算子计算简单,是尺度归一化的LoG算子的近似。

图像金字塔的构建:图像金字塔共O组,每组有S层,下一组的图像由上一组图像降采样得到。

图1由两组高斯尺度空间图像示例金字塔的构建, 第二组的第一副图像由第一组的第一副到最后一副图像由一个因子2降采样得到。

图2 DoG算子的构建:

<img alt="" src="http://hi.csdn.net/attachment/201110/24/0_1319465137PeOC.gif"><br>

<br>

图1 Two octaves ofa Gaussian scale-space image pyramidwith s =2 intervals. The first image in thesecond octave is created by down sampling the second to last image in the previous

<img alt="" src="http://hi.csdn.net/attachment/201110/24/0_1319465686B2Bh.gif"><br>

图2 The difference of two adjacent intervalsin the Gaussian scale-space pyramid create an interval in the difference-of-Gaussianpyramid (shown in green).



▲空间极值点检测

为了寻找尺度空间的极值点,每一个采样点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。如图3所示,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。

<img alt="" src="http://hi.csdn.net/attachment/201110/24/0_1319468255nJv1.gif"><br>

[size=16px;]图3 DoG尺度空间局部极值检测<br><br>[/size]



▲ 构建尺度空间需确定的参数

<span><img src="http://hi.csdn.net/attachment/201110/24/0_1319469916VJZz.gif" alt=""></span>-尺度空间坐标

O-octave坐标

S- sub-level坐标

<img src="http://hi.csdn.net/attachment/201110/24/0_1319469916VJZz.gif" alt="">和O、S的关系,<img src="http://hi.csdn.net/attachment/201110/24/0_1319470128lA6p.gif" alt="">

其中<img src="http://hi.csdn.net/attachment/201110/24/0_1319470144Ey1j.gif" alt="">是基准层尺度。o-octave坐标,s- sub-level 坐标。注:octaves的索引可能是负的。第一组索引常常设为0或者-1,当设为-1的时候,图像在计算高斯尺度空间前先扩大一倍。

空间坐标<span style="font-style: italic;">x</span>是组octave的函数,设<img src="http://hi.csdn.net/attachment/201110/24/0_1319470191494u.gif" alt="">是0组的空间坐标,则

<img src="http://hi.csdn.net/attachment/201110/24/0_13194702164Lit.gif" alt=""><br>

如果<img src="http://hi.csdn.net/attachment/201110/24/0_1319470243Ho69.gif" alt="">是基础组o=0的分辨率,则其他组的分辨率由下式获得:

<img src="http://hi.csdn.net/attachment/201110/24/0_131947027433QU.gif" alt=""><br>

注:在Lowe的文章中,Lowe使用了如下的参数:

<img src="http://hi.csdn.net/attachment/201110/24/0_13194702907FV7.gif" alt="">

在组o=-1,图像用双线性插值扩大一倍(对于扩大的图像<img src="http://hi.csdn.net/attachment/201110/24/0_13194703106Mp3.gif" alt="">)。

▲ 精确确定极值点位置

通过拟和三维二次函数以精确确定关键点的位置和尺度(达到亚像素精度),同时去除低对比度的关键点和不稳定的边缘响应点(因为DoG算子会产生较强的边缘响应),以增强匹配稳定性、提高抗噪声能力。



边缘响应的去除

一个定义不好的高斯差分算子的极值在横跨边缘的地方有较大的主曲率,而在垂直边缘的方向有较小的主曲率。主曲率通过一个2x2 的Hessian矩阵H求出:

<img src="http://hi.csdn.net/attachment/201110/24/0_1319470414t3Ny.gif" alt="">(4)

导数由采样点相邻差估计得到。

D的主曲率和H的特征值成正比,令<img src="http://hi.csdn.net/attachment/201110/24/0_1319470508RU5G.gif" alt="">为最大特征值,<img src="http://hi.csdn.net/attachment/201110/24/0_1319470519P1vO.gif" alt="">为最小的特征值,则

<img src="http://hi.csdn.net/attachment/201110/24/0_1319470544N2bz.gif" alt="">

令<img src="http://hi.csdn.net/attachment/201110/24/0_1319470573m1LP.gif" alt="">则

<img src="http://hi.csdn.net/attachment/201110/24/0_1319470652NV7n.gif" alt=""><br>

(r + 1)<sup>2</sup>/r的值在两个特征值相等的时候最小,随着r的增大而增大,因此,为了检测主曲率是否在某域值r下,只需检测

<img src="http://hi.csdn.net/attachment/201110/24/0_1319470689HXhD.gif" alt=""><br>

在Lowe的文章中,取r=10。



▲ 关键点方向分配

利用关键点邻域像素的梯度方向分布特性为每个关键点指定方向参数,使算子具备旋转不变性。

<img src="http://hi.csdn.net/attachment/201110/24/0_1319470718B5Ff.gif" alt="">(5)

式(5)为(x,y)处梯度的模值和方向公式。其中<span style="font-style: italic;">L</span>所用的尺度为每个关键点各自所在的尺度。

在实际计算时,我们在以关键点为中心的邻域窗口内采样,并用直方图统计邻域像素的梯度方向。梯度直方图的范围是0~360度,其中每10度一个柱,总共36个柱。直方图的峰值则代表了该关键点处邻域梯度的主方向,即作为该关键点的方向。图4是采用7个柱时使用梯度直方图为关键点确定主方向的示例。

<img alt="" src="http://hi.csdn.net/attachment/201110/24/0_1319468402sZze.gif">

图4 由梯度方向直方图确定主梯度方向

在梯度方向直方图中,当存在另一个相当于主峰值80%能量的峰值时,则将这个方向认为是该关键点的辅方向。一个关键点可能会被指定具有多个方向(一个主方向,一个以上辅方向),这可以增强匹配的鲁棒性<sup>[53]</sup>。

至此,图像的关键点已检测完毕,每个关键点有三个信息:位置、所处尺度、方向。由此可以确定一个SIFT特征区域(在实验章节用椭圆或箭头表示)。

▲ 特征点描述子生成

首先将坐标轴旋转为关键点的方向,以确保旋转不变性。

<img alt="" src="http://hi.csdn.net/attachment/201110/24/0_1319468531gZgN.gif"><br>



图5 由关键点邻域梯度信息生成特征向量

接下来以关键点为中心取8×8的窗口。图5-4左部分的中央黑点为当前关键点的位置,每个小格代表关键点邻域所在尺度空间的一个像素,箭头方向代表该像素的梯度方向,箭头长度代表梯度模值,图中蓝色的圈代表高斯加权的范围(越靠近关键点的像素梯度方向信息贡献越大)。然后在每4×4的小块上计算8个方向的梯度方向直方图,绘制每个梯度方向的累加值,即可形成一个种子点,如图5右部分所示。此图中一个关键点由2×2共4个种子点组成,每个种子点有8个方向向量信息。这种邻域方向性信息联合的思想增强了算法抗噪声的能力,同时对于含有定位误差的特征匹配也提供了较好的容错性。

实际计算过程中,为了增强匹配的稳健性,Lowe建议对每个关键点使用4×4共16个种子点来描述,这样对于一个关键点就可以产生128个数据,即最终形成128维的SIFT特征向量。此时SIFT特征向量已经去除了尺度变化、旋转等几何变形因素的影响,再继续将特征向量的长度归一化,则可以进一步去除光照变化的影响。

当两幅图像的SIFT特征向量生成后,下一步我们采用关键点特征向量的欧式距离来作为两幅图像中关键点的相似性判定度量。取图像1中的某个关键点,并找出其与图像2中欧式距离最近的前两个关键点,在这两个关键点中,如果最近的距离除以次近的距离少于某个比例阈值,则接受这一对匹配点。降低这个比例阈值,SIFT匹配点数目会减少,但更加稳定。

 
0
0
分享到:
评论

相关推荐

    SIFT算法详解步骤演讲资料

    一、SIFT算法概述 SIFT算法的核心在于寻找图像中的兴趣点,这些兴趣点在不同的尺度和旋转下都能保持稳定。它包括四个主要步骤:尺度空间极值检测、关键点定位、方向分配和关键点描述。 二、尺度空间极值检测 SIFT...

    SIFT算法源码_修正版

    #### 一、SIFT算法概述 SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)算法是由David Lowe在1999年提出的一种用于图像特征检测与描述的方法。它能从图像中检测出一系列稳定的特征点,并计算出这些...

    SIFT算法c++实现

    1. **SIFT算法概述** SIFT算法主要分为四个步骤:尺度空间极值检测、关键点定位、关键点主方向确定和关键点描述符计算。 2. **尺度空间极值检测** SIFT算法首先通过高斯差分金字塔来构建尺度空间,寻找局部最大值...

    SIFT SURF算法的比较

    #### 二、SIFT算法概述 **SIFT(Scale-Invariant Feature Transform)**是由David Lowe在1999年提出的。它是一种基于关键点检测的特征提取方法,具有以下特点: 1. **尺度不变性**:能够检测不同尺度下的图像特征。 ...

    matlab实现sift算法的图像拼接

    一、SIFT算法概述 SIFT算法主要包括以下几个步骤: 1. **尺度空间极值检测**:通过高斯差分金字塔构建尺度空间,寻找尺度空间中的局部最大值点作为关键点。 2. **关键点定位**:对初步检测出的关键点进行精确定位,...

    SIFT算法实现快速图像匹配

    #### 二、SIFT算法概述 SIFT算法由David G. Lowe于1999年提出,并在后续的研究中不断改进和完善。该算法的主要目标是在不同尺度和视角下检测到图像中的稳定特征点,并为这些特征点生成独特且可比较的描述符,从而...

    matlab的SIFT匹配算法研究

    1. SIFT算法概述 SIFT算法主要包括四个主要步骤:尺度空间极值检测、关键点定位、关键点方向赋值和关键点描述符计算。 2. 尺度空间极值检测 SIFT算法首先通过高斯差分金字塔来构建尺度空间,寻找在不同尺度下的关键...

    SIFT算法MATLAB.docx

    SIFT算法概述 SIFT算法的主要步骤包括:图像预处理、特征检测、特征描述和特征匹配。图像预处理阶段,图像将被转换为灰度图像,并进行高斯滤波以减少噪声。在特征检测阶段,使用 Difference of Gaussian(DoG)算子...

    SIFT算法(尺度不变特征变换)

    #### 一、SIFT算法概述 SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)算法是由David G. Lowe于1999年首次提出的,并在2004年得到了进一步的发展和完善。该算法主要用于物体识别和图像匹配等领域。...

    一种改进的SIFT特征匹配算法及其实现

    #### SIFT算法概述 SIFT(Scale-Invariant Feature Transform)是一种广泛应用于计算机视觉领域的特征检测与描述算法。它能够从图像中检测出一系列具有旋转不变性和尺度不变性的特征点,并为这些特征点构建描述符。...

    sift 算法 C++

    一、SIFT算法概述 1. **尺度空间极值检测**:SIFT算法首先在不同尺度的空间中寻找关键点。通过高斯差分金字塔,SIFT能够在多个尺度上检测图像中的边缘和角点,这些点在不同尺度下保持稳定,因此被称为尺度不变特征...

    一种基于SIFT算法的目标匹配方法

    二、SIFT算法概述 SIFT算法由David Lowe教授于1999年首次提出,旨在解决计算机视觉领域中的特征匹配问题。该算法的核心思想是在图像的不同尺度上检测关键点,并为这些关键点构建描述符,使得它们能够在图像发生旋转...

    SIFT算法详解_修正

    #### 一、SIFT算法概述 **尺度不变特征转换**(Scale-Invariant Feature Transform,简称SIFT)是由David Lowe在1999年提出的一种计算机视觉算法,旨在检测与描述图像中的局部特征。SIFT算法能够在不同尺度的空间中...

    尺度空间理论和SIFT算法小结

    **3.1 SIFT算法概述** SIFT(Scale-Invariant Feature Transform)算法是一种用于识别图像中的局部特征的方法,能够在不同的视角和光照条件下识别出相同的物体。SIFT算法的核心在于它能够自动检测关键点,并计算这些...

    用C语言实现的SIFT图像匹配算法

    1. **SIFT算法概述**: - **尺度空间极值检测**:SIFT算法首先在不同尺度上寻找图像的局部极值点,以确保特征对缩放不敏感。 - **关键点定位**:确定极值点的位置,并通过高斯差分金字塔消除噪声,精确定位关键点...

Global site tag (gtag.js) - Google Analytics