以前写的一个文档,很多都是从word里面直接粘的,不会贴公式,所以直接截图贴上去了。
摘要:本文针对传统特征识别方法中存在的问题,介绍一种实现效果较好的尺度不变特征变换算法(SIFT)。首先,文章详细说明了该算法实现的具体流程,包括关键点的定义以及其尺度、大小、方向的求解;接下来,介绍了如何通过关键点生成与图像相对应的关键点描述集,以及如何通过关键点描述集进行图像目标匹配;之后,本文结合SIFT近几年来的发展,进一步介绍了几种改进的SIFT算法;最后,举例说明了SIFT在实际生活中的应用。
关键字:尺度不变特征变换算法(SIFT);特征识别;关键点;高斯平滑
0. 概论
图像局部特征识别一直是图像处理的重要分支,在生物特征识别、目标跟踪等领域有着广泛的应用。其核心问题是将同一目标在不同时间、不同分辨率、不同光照、不同姿态等条件下检测出来。
传统的局部特征识别算法往往是直接提取目标的角点或边缘,以此作为依据进行匹配识别。当目标所处的环境、姿态等发生变化时,由于算法所依赖的检测特征发生变化,不能够较好的识别出目标,鲁棒性较差。
针对传统识别算法中的问题,加拿大British Columbia大学的David G. Lowe
l
l
l
l
此外,对于噪声、场景杂物、遮挡、光照变化等造成的目标识别困难问题,SIFT算法在一定程度上也可以较好地解决。
0. SIFT算法实现
1.1关键点检测
在SIFT算法中,无论是目标图像还是模板图像,都是用关键点来进行描述。因此,对目标的识别过程便是提取关键点并进行匹配的过程。
图 1
图1 展示了用SIFT算法进行目标识别的过程:首先提取中图像中的关键点,生成能够描述并代表该图像的关键点集。接下来通过比较关键点集,进而进行识别。
可见,要实现较好的匹配,首先要能生成准确代表图像的关键点。
1.1.1定义关键点
在SIFT中,关键点定义为十分突出的、不会因光照条件改变而消失的点。角点、边缘点、暗区域的亮点以及亮区域的暗点都是符合此要求的点。若两幅图像中存在相同的物体,虽然不同条件下所成的像往往会差别很大,但因为该物体关键点不会随各种外部条件影响而变化,所以通过比较图中的关键点便能够对物体做出鉴别。
为了能检测图像的边缘、角点,进而得到关键点的描述,需要引入尺度空间理论。
1.1.2构建尺度空间
尺度是用来精确地描述一个物体的大小。对于同一个事物,从不同距离观察,其大小不同,尺度也因此不同,尺度空间便是用来表示这种差别。在尺度空间中,各图像的模糊程度随着尺度变大而逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上所成像的变化过程。
在SIFT算法中,通过对原始图像进行尺度变换,获得该图像在多尺度下的尺度空间表示序列。这样,图片就被映射为多个尺度上的关键点,尽管两幅图片处于不同的尺度,但却可以提取出在尺度变换中没有改变的关键点。从而能够不受尺度不同的影响,进行关键点匹配,识别出物体。
文献[3]指出,高斯核是唯一可以产生多尺度空间而不引起其他附加变化的卷积核。其定义如下:
图 2
通过对图像进行高斯滤波,即将图像与高斯核进行卷积运算:
可以得到低噪声、低层次细节的新图像,在视觉看上去更加模糊,称为高斯模糊图像,用此可以模拟图像的尺度变化。用方差为sigma的高斯核进行运算得到新图像称为尺度空间为
由二维高斯函数的特性可知,对一幅图像进行连续多次高斯模糊的效果与一次更大半径的高斯模糊可以产生同样的效果,大的高斯模糊的半径是所用多个高斯模糊半径平方和的平方根。例如,使用半径分别为 6和 8 的两次高斯模糊变换得到的效果等同于一次半径为 10 的高斯模糊效果。因此,图 3 可以看作用sqrt(2)倍的模糊半径所做的模糊处理。
1.1.3构建高斯金字塔
用不同sigma的高斯核对图像进行处理,得到不同尺度空间的图像。可以用高斯金字塔对所有的图像尺度空间进行描述。其构建过程包括对图像做高斯平滑、降采样两部分。为了让尺度体现其连续性,在简单下采样的基础上加上了高斯滤波。由此,一幅图像可以产生几组(Octave)图像,一组图像包括几层(Interval)图像,共同构成了高斯金字塔。
在高斯金字塔中。相邻两层图像间的尺度为
其中为金字塔组数,n 为每一组层数。因为图像在获取的时候,相机镜头已经对图像进行了一次初始的模糊,根据高斯模糊性质,初始sigma可以由下式获得:
式中
进行求得。
由此便可以根据图像的初始特征构造出高斯金字塔。
1.1.4构建DoG差分算子
通过高斯滤波构建尺度空间之后,为了消除尺度的差异,考虑到尺度规范化的LoG算子(Laplacion of Gaussian算子)具有真正的尺度不变性[3],需要在不同尺度的图像上进行Laplace运算(求二阶导数),得到极值点,进而得出关键点。为了简化运算,在此借助高斯算子
尺度规范的LoG算子为:
上式的含义是通过求相邻尺度高斯平滑后图像的差值,便可以得出 LoG 算子的值。由此可以省去复杂的求导运算,直接通过求差值来得出关键点。
对图3 中相邻的图像进行DoG运算,得到结果如图5 所示。可以看出,两幅图像中都除去了相近的部分,只留下图像的轮廓。而且,对于经过高斯模糊后的图像,其 DoG 运算得到轮廓边缘更加模糊。
图 5
用同样的方法,对相邻尺度的高斯平滑图像进行DoG处理,可以得到不同尺度下的图像轮廓(如图6 )。
图 6
1.1.5 求局部极值点
关键点是由DoG空间的局部极值点组成的。为了寻找DoG函数的极值点,每一个像素点要和它所有的相邻点比较,如果其为最大或最小值,则该点变为极值点。
图 7 |
每个点需要跟其四周的8个点以及相邻两层的9个点(共 个)进行比较(如图7 所示),以确保无论是在尺度空间还是在自身的二维空间中均为极值点。
在极值比较的过程中,每一组图像的首末两层是无法进行极值比 较的,为了满足尺度变化的连续性,在每一组图像的顶层继续用高斯模糊生成 3 幅图像,则高斯金字塔有每组 S+3 层图像, DoG 金字塔每组有 S+2 层图像。因此在生成的尺度之中,只牺牲了 -1 组的第 0 层和第 N 组的最高层。
1.2修正关键点
因为DoG算子会产生较强的边缘响应,为了增强匹配稳定性、提高抗噪声能力,需要对尺度空间DoG函数进行曲线拟合,以精确确定关键点的位置和尺度,同时除去低对比度的关键点和不稳定的边缘响应。
1.2.1 曲线拟合,获得精确位置
利用DoG函数在尺度空间的Taylor展开式,采用三维二次函数进行拟合:
得到修正的精确位置 。按照此解分别对图像的行、列和尺度三个方向的量进行修正。
1.2.2 去除低对比度点
若大于0.03 ,则认为该特征点有足够的对比度,应该予以保留,否则应该舍弃。1.2.3 去除边缘响应
一个不好的DoG算子的极值在横跨边缘的地方有较大的主曲率,而在垂直边缘的方向有较小的主曲率。可以通过一个二阶Hessian矩阵
其中 表示在DoG函数某尺度同一方向求两次导数,矩阵中其他元素用同样的方法进行定义。
因为主曲率和
由基本不等式关系可以得出,当两个特征值相等时达到最小。在r=10 的条件(推荐值)下,如果
则将关键点应该保留
1.3确定关键点的方向
为了让关键点不会随图像的旋转变化而发生变化,还需要为每个关键点指明方向参数,使算子具有旋转不变性。采用梯度来对每个像素确定方向,可以通过以下公式进行计算。
幅值:
通过统计以关键点为原点,一定区域内(建议统计半径为4.5 )所有像素的方向与幅值,来综合确定关键点的方向。采用直方图法,以10°为统计区间,将该区域内像素按照方向分类,把每个方向像素幅值和作为统计量。最终选择直方图中幅值最大的方向作为关键点的主方向,其示意图如图8。
图 8
为了提高匹配的鲁棒性,若存在其他方向,其幅值相当于主方向幅值的80% 以上,则选取该方向作为辅方向。
1.4 对关键点进行描述
通过以上各步,已经获得了每个关键点的位置、尺度及方向三个信息,分别对应平移、缩放与旋转的不变性。但是各个关键点仅仅是独立的存在,没有考虑到周围像素点与关键点之间的关系。对关键点进行描述便是通过选取关键点及其邻域的像素,共同表达这个整体的特征。
以关键点为中心,首先根据关键点所在组的尺度sigma,用下式计算所取图像的采样半径:
接下来,旋转坐标轴,以关键点的主方向作为0°方向,得到旋转后转化的新坐标为:
然后以关键点为中心,在所计算的采样区域(半径为 )内,计算每个像素的梯度的幅值与方向,其中方向按照八个方向(0°,45°,90°,…,315°)进行归类。然后将所有像素的梯度分别在4个
图 9
因为每个
为了去除光照的影响,还需要对这128维的信息进行归一化操作,以便适应更复杂的环境:
0. SIFT变换的改进
SIFT算法提出之后,在目标匹配方面有着非常好的效果,但是仍然存在算法复杂,较难实现实时处理、对于边缘模糊目标无法准确识别等问题。为了解决这些问题,许多改进算法被提出,对其部分性能进行了优化。
3.1 PCA-SIFT算法
该算法针对SIFT算法中128维算子数据量较大的问题,采用主成分分析法(Principal Component Analysis, PCA)对其进行降维,简化描述算子的尺度,进而简化计算量。
3.2 C-SIFT
因为最初Lowe 教授提出的SIFT算法是针对灰度图像的。在2006年Farag提出了基于彩色图像的SIFT,使得对于彩色图像同样能够进行特征提取与识别。
3.3 SURF
由Bay在2006年提出,采用box filter与原始图像进行卷积,易于进行并行计算,并将SIFT中关键点的邻域形状由矩形变为圆形,计算小波响应。其计算量与SIFT相比大大减小,运算速度有很大的提高。
3.4 A-SIFT
由Morel在2009年提出,可以防止仿射情况的产生。该算法由两个向量空间之间的一个仿射变换或者仿射映射由一个线性变换接上一个平移组成,提取的特征点比SIFT算法要多。