SIFT(scale invariant feature transform)详解

SIFT(尺度不变特征转换)是一种检测图像关键点并提取尺度和旋转不变特征的算法。它包括尺度空间峰值选择、关键点定位、方向分配和关键点描述四个步骤。通过对图像构建尺度空间,检测局部极值点作为关键点,并计算关键点的梯度方向直方图,生成128维描述子,实现旋转和尺度不变性。SIFT在图像匹配、物体识别等领域有广泛应用。
摘要由CSDN通过智能技术生成

SIFT是由UBC(university of British Column)的教授David Lowe 于1999年提出, 并在2004年得以完善的一种检测图像关键点(key points , 或者称为图像的interest points(兴趣点) ), 并对关键点提取其局部尺度不变特征的描绘子, 采用这个描绘子进行用于对两幅相关的图像进行匹配(matching)。  目前, SIFT可以说是所有图像局部特征描述特征子 中最火的一个了。 关于SIFT的描述详见David Lowe与2004年发表的论文<<Distinctive image features from scale-invariant key points>>, International journal of Computer Vision 2004.。 David Lowe 也一直是我比较佩服的计算机视觉领域的大牛之一。 下图是David Lowe的照片:

目前, SIFT已经申请了专利。 专利持有人是UCB大学。  这里简要介绍一下SIFT的原理和实现细节。

任何一个好的图像特征描绘子, 应该满足如下几点要求:

(1)Distinctive  features(so that we can correctly matched against a large database of features from many images)。

(2)invariance to image scale and rotation. 也就是说, 当图像发生了尺度变化(缩小, 放大等等) , 或者是图像发生旋转的时候, 我们能够保证我们提取到的特征是不变的, 没有任何的特征描述上的变化。 这就是SIFT的主要特征, 这也是为什么这个特征的名字叫做scale invariant features 吧。

(3) Robustness to Affine distoration, change in 3D viewpoint, Addition of noise, change in illumination。 也就是说, 我们的特征不会因为图像中场景中多了噪声, 发生了仿射失真, 或者亮度改变, 或者我们拍摄图片的时候发生了视角的变化等等等因素而变化。 我们的特征对这些影响保持鲁棒性。

例如上面的两幅图像, 对同一个物体(车辆), 从不同的角度拍摄得到的两幅图像, 虽然有occlusion, other objects, clutter, rotation等等, 但是当我们计算图像对应位置的SIFT features的时候, 二者对应的特征basically the  same。 所以, 只要是相同的object, 我们就可以用SIFT匹配。

满足上面的几个特点的这样一个特征很难找到。 然而David Lowe 找到了, 这就是SIFT, 这也是SIFT产生的Motivation吧。 SIFT特征的优点由如下几种:

(1) Locality:特征是局部的, 所以对于遮挡(occusion)和复杂的背景(clutter)的鲁棒性非常好, very rebust.

(2) Distinctiveness:  特征具有独一无二性。 也就是说 individual features can be matched to a large database of objects.

(3)Quantity: 即使是一个很小的物体(objects), 也能够产生大量的SIFT features.。

(4)Efficiency: SIFT接近于实时的性能, 效率很高。

在这里, 可能会遇到的问题:

Q1: 什么是图像的局部特征描绘子。

前面说了SIFT是图像的局部特征描绘子。 英文就是Local features。 与之相对应的是全局特征(global features)。 给定一幅图像, 我们计算出整幅图像的直方图(histogram), 那么这个直方图就是这幅图像的全局特征描绘子(global feature), 如果采用滑动窗口的办法, 例如窗口的大小为4x4等, 然后计算窗口的所有像素的均值, 将这个均值作为中心像素的邻域描述, 那么这个就是局部特征。 类似的, SIFT计算关键点的SIFT特征的时候, 就用到了关键点周围的邻域(neighbourhood)的信息统计, 所以SIFT就是局部特征描绘子。

Q2: detector(检测子)和descriptor (描绘子)的区别是什么

首先, detector(检测子)告诉我们我们感兴趣的位置在哪里, descriptor 的作用是我们如何去描述这个感兴趣的位置(特征)。 一个是关于where, 一个是关于how 的问题。 举个例子, 光检测边缘的检测子(detector)就有几十种了, 例如Canny detector, Laplacian 啊 等等。 这些检测子只是告诉你边缘发生在图像的那些位置。 描述子(desriptor)是关于我们如何去描述的, 层次比detector高。 如果我们能够正确的描述一个问题, 那么我们基本上就成功一半了。 对于SIFT, 第一步是关于detector, 也就是检测出关键点(感兴趣点), 我们是找到这些感兴趣点在哪里? 这是我们的第一步, 第二是关于descriptor, 也就是描述我们所找到的感兴趣点。 这就是SIFT features.。 这样我们就可以利用这些SIFT features 去做计算机视觉中比较advanced tasks 了。

下面介绍一下SIFT找到(提取)图像中的Key points, 并且使用key Point descriptor 去描述这些关键点的步骤。

整个过程主要分为四个步骤。

(1)尺度空间峰值选择(Scale space peak selection), 这一步的目的是在尺度空间中选择选择潜在的满足尺度不变性和旋转不变性的关键点(或者称为兴趣点)。

(2)关键点定位(key point localization): 这一步的目的就是精确定位出特征关键点的位置, 涉及到剔除伪关键点。

(3)方向分配(orientation assignment): 这一步的目的就是基于关键点的局部梯度方向,给每个相应的关键点分配方向(Assign orientation to key points)。

(4) 关键点描述(Key Point descriptor): 此步骤的目的就是对于每个关键点, 用一个高维度(high dimensional vector, 在下面的例子中是128 维的向量)的向量去描述每个关键点。

下面详细介绍上面的四个步骤。

(1)尺度空间峰值选择

首先, 给定一幅图像, 要想使用SIFT提取出潜在的感兴趣点, 我们的第一步就是构造图像的尺度空间(Scale space)。我们采用的办法就是采用Laplacian 0f Gaussian(LoG) 去构建图像的尺度空间。 构造完成之后, 我们通过选择LoG 尺度空间上所有的的local maxima, 作为我们的interest point(兴趣点),这也是stable features, 这样我们就完成了第一步。

具体解释如下:

给定一幅图像:

我们要提取出这幅图像的兴趣点, 第一步是不同variance(方差)的Gaussian filter (离散域是Gaussian kernel: 高斯核)进行滤波, 例如我们选择

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值