尺度不变特征变换 matlab,尺度不变特征变换(SIFT)算法介绍

以前写的一个文档,很多都是从word里面直接粘的,不会贴公式,所以直接截图贴上去了。

摘要:本文针对传统特征识别方法中存在的问题,介绍一种实现效果较好的尺度不变特征变换算法(SIFT)。首先,文章详细说明了该算法实现的具体流程,包括关键点的定义以及其尺度、大小、方向的求解;接下来,介绍了如何通过关键点生成与图像相对应的关键点描述集,以及如何通过关键点描述集进行图像目标匹配;之后,本文结合SIFT近几年来的发展,进一步介绍了几种改进的SIFT算法;最后,举例说明了SIFT在实际生活中的应用。

关键字:尺度不变特征变换算法(SIFT);特征识别;关键点;高斯平滑

0.

概论

传统的局部特征识别算法往往是直接提取目标的角点或边缘,以此作为依据进行匹配识别。当目标所处的环境、姿态等发生变化时,由于算法所依赖的检测特征发生变化,不能够较好的识别出目标,鲁棒性较差。

针对传统识别算法中的问题,加拿大British Columbia大学的David G.

Lowe教授在1999年提出了尺度不变特征变换[1]算法(SIFT),并在2004年加以完善[2]。该算法通过图像局部特征描述算子对图像进行描述,对图像局部特征的尺度变化、图像缩放、旋转以及部分仿射、变换均表现出较好的适应性。除此之外,SIFT还具有以下特点:

l

独特性好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配。

l

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

l

经过优化的SIFT算法可满足一定的速度需求。

l

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

此外,对于噪声、场景杂物、遮挡、光照变化等造成的目标识别困难问题,SIFT算法在一定程度上也可以较好地解决。

1.1关键点检测

在SIFT算法中,无论是目标图像还是模板图像,都是用关键点来进行描述。因此,对目标的识别过程便是提取关键点并进行匹配的过程。a4c26d1e5885305701be709a3d33442f.png

图 1 用SIFT算法进行特征匹配过程

图1

展示了用SIFT算法进行目标识别的过程:首先提取中图像中的关键点,生成能够描述并代表该图像的关键点集。接下来通过比较关键点集,进而进行识别。

可见,要实现较好的匹配,首先要能生成准确代表图像的关键点。

1.1.1定义关键点

在SIFT中,关键点定义为十分突出的、不会因光照条件改变而消失的点。角点、边缘点、暗区域的亮点以及亮区域的暗点都是符合此要求的点。若两幅图像中存在相同的物体,虽然不同条件下所成的像往往会差别很大,但因为该物体关键点不会随各种外部条件影响而变化,所以通过比较图中的关键点便能够对物体做出鉴别。

为了能检测图像的边缘、角点,进而得到关键点的描述,需要引入尺度空间理论。

1.1.2构建尺度空间

尺度是用来精确地描述一个物体的大小。对于同一个事物,从不同距离观察,其大小不同,尺度也因此不同,尺度空间便是用来表示这种差别。在尺度空间中,各图像的模糊程度随着尺度变大而逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上所成像的变化过程。

在SIFT算法中,通过对原始图像进行尺度变换,获得该图像在多尺度下的尺度空间表示序列。这样,图片就被映射为多个尺度上的关键点,尽管两幅图片处于不同的尺度,但却可以提取出在尺度变换中没有改变的关键点。从而能够不受尺度不同的影响,进行关键点匹配,识别出物体。

文献[3]指出,高斯核是唯一可以产生多尺度空间而不引起其他附加变化的卷积核。其定义如下:

a4c26d1e5885305701be709a3d33442f.png

其中a4c26d1e5885305701be709a3d33442f.png为模糊半径。其图像如图2所示

a4c26d1e5885305701be709a3d33442f.png

图 2 二维高斯分布

通过对图像进行高斯滤波,即将图像与高斯核进行卷积运算:

a4c26d1e5885305701be709a3d33442f.png

可以得到低噪声、低层次细节的新图像,在视觉看上去更加模糊,称为高斯模糊图像,用此可以模拟图像的尺度变化。用方差为sigma的高斯核进行运算得到新图像称为尺度空间为

的高斯模糊图像。如图3

,左侧图像为原图像,用matlab对其进行高斯滤波,采用的模板大小为 a4c26d1e5885305701be709a3d33442f.png,中间图像为一次滤波之后的结果,右边为两次滤波的结果。可以看出,图像通过高斯模糊之后,细节丢失较多,轮廓也变得模糊,而且随着处理次数增加,模糊越来越明显。

由二维高斯函数的特性可知,对一幅图像进行连续多次高斯模糊的效果与一次更大半径的高斯模糊可以产生同样的效果,大的高斯模糊的半径是所用多个高斯模糊半径平方和的平方根。例如,使用半径分别为

6 和 8

的两次高斯模糊变换得到的效果等同于一次半径为 10 的高斯模糊效果。因此,图 3

可以看作用sqrt(2)倍的模糊半径所做的模糊处理。

1.1.3构建高斯金字塔

用不同sigma的高斯核对图像进行处理,得到不同尺度空间的图像。可以用高斯金字塔对所有的图像尺度空间进行描述。其构建过程包括对图像做高斯平滑、降采样两部分。为了让尺度体现其连续性,在简单下采样的基础上加上了高斯滤波。由此,一幅图像可以产生几组(Octave)图像,一组图像包括几层(Interval)图像,共同构成了高斯金字塔。

a4c26d1e5885305701be709a3d33442f.png

在高斯金字塔中。相邻两层图像间的尺度为 k

倍的关系,同时相邻两组的同一层图像尺度为2倍的关系。因此组内与组间尺度关系可以归纳为:

a4c26d1e5885305701be709a3d33442f.png

其中a4c26d1e5885305701be709a3d33442f.png为金字塔组数,n

为每一组层数。因为图像在获取的时候,相机镜头已经对图像进行了一次初始的模糊,根据高斯模糊性质,初始sigma可以由下式获得:

a4c26d1e5885305701be709a3d33442f.png

式中第一项为第0层的尺度,第二项

为被相机模糊后的尺度。而高斯金字塔中组数可以由:

a4c26d1e5885305701be709a3d33442f.png

进行求得。

由此便可以根据图像的初始特征构造出高斯金字塔。

1.1.4构建DoG差分算子

通过高斯滤波构建尺度空间之后,为了消除尺度的差异,考虑到尺度规范化的LoG算子(Laplacion of

Gaussian算子)具有真正的尺度不变性[3],需要在不同尺度的图像上进行Laplace运算(求二阶导数),得到极值点,进而得出关键点。为了简化运算,在此借助高斯算子

与 LoG

算子的关系进行转化。

尺度规范的LoG算子为:

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

上式的含义是通过求相邻尺度高斯平滑后图像的差值,便可以得出 LoG 算子的值。由此可以省去复杂的求导运算,直接通过求差值来得出关键点。

对图3

中相邻的图像进行DoG运算,得到结果如图5

所示。可以看出,两幅图像中都除去了相近的部分,只留下图像的轮廓。而且,对于经过高斯模糊后的图像,其

DoG 运算得到轮廓边缘更加模糊。

a4c26d1e5885305701be709a3d33442f.png

图 5DoG处理得到的边缘轮廓

用同样的方法,对相邻尺度的高斯平滑图像进行DoG处理,可以得到不同尺度下的图像轮廓(如图6 )。

a4c26d1e5885305701be709a3d33442f.png

图 6 对相邻尺度图像进行DoG运算

1.1.5 求局部极值点

关键点是由DoG空间的局部极值点组成的。为了寻找DoG函数的极值点,每一个像素点要和它所有的相邻点比较,如果其为最大或最小值,则该点变为极值点。a4c26d1e5885305701be709a3d33442f.png

7 求解极值点

每个点需要跟其四周的8个点以及相邻两层的9个点(共

个)进行比较(如图7 所示),以确保无论是在尺度空间还是在自身的二维空间中均为极值点。

在极值比较的过程中,每一组图像的首末两层是无法进行极值比较的,为了满足尺度变化的连续性,在每一组图像的顶层继续用高斯模糊生成3幅图像,则高斯金字塔有每组S+3层图像,DoG金字塔每组有S+2层图像。因此在生成的尺度之中,只牺牲了-1组的第0层和第N组的最高层。

1.2修正关键点

因为DoG算子会产生较强的边缘响应,为了增强匹配稳定性、提高抗噪声能力,需要对尺度空间DoG函数进行曲线拟合,以精确确定关键点的位置和尺度,同时除去低对比度的关键点和不稳定的边缘响应。

1.2.1 曲线拟合,获得精确位置

利用DoG函数在尺度空间的Taylor展开式,采用三维二次函数进行拟合:a4c26d1e5885305701be709a3d33442f.png

得到修正的精确位置

。按照此解分别对图像的行、列和尺度三个方向的量进行修正。

1.2.2 去除低对比度点

将修正后的位置

带入原方程中,取前两项,得:a4c26d1e5885305701be709a3d33442f.png

若大于0.03

,则认为该特征点有足够的对比度,应该予以保留,否则应该舍弃。

1.2.3 去除边缘响应

一个不好的DoG算子的极值在横跨边缘的地方有较大的主曲率,而在垂直边缘的方向有较小的主曲率。可以通过一个二阶Hessian矩阵 H

来求出主曲率:

a4c26d1e5885305701be709a3d33442f.png

其中

表示在DoG函数某尺度同一方向求两次导数,矩阵中其他元素用同样的方法进行定义。

因为主曲率和 H

的特征值成正比,为了简化计算,不直接计算这些特征值,而是计算之间的比值。令 alpha为最大特征值,beta

为最小特征值,则

a4c26d1e5885305701be709a3d33442f.png

由基本不等式关系可以得出,当两个特征值相等时达到最小。在r=10

的条件(推荐值)下,如果

a4c26d1e5885305701be709a3d33442f.png

则将关键点应该保留

1.3确定关键点的方向

为了让关键点不会随图像的旋转变化而发生变化,还需要为每个关键点指明方向参数,使算子具有旋转不变性。采用梯度来对每个像素确定方向,可以通过以下公式进行计算。

幅值:

a4c26d1e5885305701be709a3d33442f.png

通过统计以关键点为原点,一定区域内(建议统计半径为4.5

)所有像素的方向与幅值,来综合确定关键点的方向。采用直方图法,以10°为统计区间,将该区域内像素按照方向分类,把每个方向像素幅值和作为统计量。最终选择直方图中幅值最大的方向作为关键点的主方向,其示意图如图8。

a4c26d1e5885305701be709a3d33442f.png

图 8 直方图统计获取关键点的方向

为了提高匹配的鲁棒性,若存在其他方向,其幅值相当于主方向幅值的80% 以上,则选取该方向作为辅方向。

1.4 对关键点进行描述

通过以上各步,已经获得了每个关键点的位置、尺度及方向三个信息,分别对应平移、缩放与旋转的不变性。但是各个关键点仅仅是独立的存在,没有考虑到周围像素点与关键点之间的关系。对关键点进行描述便是通过选取关键点及其邻域的像素,共同表达这个整体的特征。

以关键点为中心,首先根据关键点所在组的尺度sigma,用下式计算所取图像的采样半径:

a4c26d1e5885305701be709a3d33442f.png

接下来,旋转坐标轴,以关键点的主方向作为0°方向,得到旋转后转化的新坐标为:

a4c26d1e5885305701be709a3d33442f.png

然后以关键点为中心,在所计算的采样区域(半径为

)内,计算每个像素的梯度的幅值与方向,其中方向按照八个方向(0°,45°,90°,…,315°)进行归类。然后将所有像素的梯度分别在4个

的窗口中进行直方图统计,累加形成一个种子点。

a4c26d1e5885305701be709a3d33442f.png

图 9 种子点形成

因为每个

的窗口包含了

维度的信息,而整个

的邻域共有4个这样的窗口,因此最终每个SIFT的关键点共有128维的信息。

为了去除光照的影响,还需要对这128维的信息进行归一化操作,以便适应更复杂的环境:

a4c26d1e5885305701be709a3d33442f.png

SIFT算法提出之后,在目标匹配方面有着非常好的效果,但是仍然存在算法复杂,较难实现实时处理、对于边缘模糊目标无法准确识别等问题。为了解决这些问题,许多改进算法被提出,对其部分性能进行了优化。

该算法针对SIFT算法中128维算子数据量较大的问题,采用主成分分析法(Principal Component Analysis, PCA)对其进行降维,简化描述算子的尺度,进而简化计算量。

因为最初Lowe

教授提出的SIFT算法是针对灰度图像的。在2006年Farag提出了基于彩色图像的SIFT,使得对于彩色图像同样能够进行特征提取与识别。

由Bay在2006年提出,采用box

filter与原始图像进行卷积,易于进行并行计算,并将SIFT中关键点的邻域形状由矩形变为圆形,计算小波响应。其计算量与SIFT相比大大减小,运算速度有很大的提高。

由Morel在2009年提出,可以防止仿射情况的产生。该算法由两个向量空间之间的一个仿射变换或者仿射映射由一个线性变换接上一个平移组成,提取的特征点比SIFT算法要多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值