《Distinctive Image Features from Scale-Invariant Keypoints》(SIFT算法详解)


前言

本文提出一种从图像中提取独特不变特征的方法(Scale Invariant Feature Transform ),可用于不同视角之间目标或场景的可靠匹配方法。这些特征对图像的尺度和旋转具有不变性,并在大范围的仿射变换、三维视点的改变、噪音和光照变化的图像匹配具有鲁棒性。

一、Introduction

算法产生背景:

  • 成像匹配的核心问题是将同一目标在不同时间、不同分辨率、不同光照、不同位姿情况下所成的像相对应。传统的匹配算法往往是直接提取角点或边缘,对环境的适应能力较差,急需提取一种鲁棒性强、能够适应不同光照、不同位姿等情况下能够有效识别目标的方法。

SIFT算法可解决的问题:

  • 目标的旋转、缩放、平移(RST)
  • 图像仿射、投影变换(视点viewpoint)
  • 光照影响(illumination)
  • 目标遮挡(occlusion)
  • 杂物场景(clutter)
  • 噪声(noise)
  1. 对所有尺度和图像位置进行搜索,通过高斯差分函数来识别对于尺度和方向具有不变性的潜在兴趣点。
  2. 在每个候选位置,都有一个详细的模型来确定位置和尺度,基于关键点的稳定性来选择关键点。
  3. 基于局部图像的梯度方向,给每个关键点指定一个或多个方向,后面所有操作的图像数据都是将每个特征的方向、尺度和位置 进行相关变换后得到的,因此特征对这些变换具有不变性。
  4. 局部梯度是在所选尺度上每个关键点附近的区域测量得到的,这些局部梯度可以转化为允许强烈的局部形状扭曲和光照变化的图像表示法。

二、Related research

三、Detection of scale-space extrema

尺度空间方法的基本思想:

  • 尺度空间理论最早在1962年提出,通过对原始图像进行尺度变换,从而进行特征提取。尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上的形成过程。(尺度越大图像越模糊)
  • 在视觉信息处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得不同尺度下的视觉处理信息,然后综合这些信息以深入地挖掘图像的本质特征。尺度空间方法将传统的单尺度视觉信息处理技术纳入尺度不断变化的动态分析框架中,因此更容易获得图像的本质特征,尺度空间的生成目的是模拟图像数据多尺度特征。文献 《Scale-space theory: A basic tool for analysing structures at different scales》 证明了高斯卷积核是实现尺度变换的唯一线性核。

Local extrema detection

  • 图像的尺度空间定义为函数L(x, y, σ),由尺度可变的高斯函数G(x, y, σ) 和输入图像I(x, y) 卷积生成。

在这里插入图片描述

  • 在文献 《Scale-space theory: A basic tool for analysing structures at different scales》 指出尺度规范化的LoG算子具有真正的尺度不变性,LoG算子即 Laplaction of Gaussian,可以由高斯函数梯度算子GoG构建。

在这里插入图片描述
在这里插入图片描述

  • DoG在计算上只需相邻尺度高斯平滑后图像相减,简化了计算。

在这里插入图片描述

  • D(x, y, σ)的构建方法如图。初始图像与高斯算子卷积形成图像,通过常系数K在尺度空间中将图像分开,如左图中堆放的层。相邻的图像尺度相减生成高斯差分图像,如右图所示。

在这里插入图片描述

  • 为检测D(x, y, σ)的局部最大值和最小值,每个采样点都要和它当前图像的8个邻近点以及上下尺度上的各9个邻近点进行比较,比所有邻近点都大或都小的点才会被选择。
    在这里插入图片描述
  • Lowe做了两组实验,将同一张图片进行不同数量的采样,统计不同层数下特征点被检测到的重复率和这些特征点在数据集中的匹配成功率;不同层数下检测到的特征点数量和特征点在数据集中匹配成功的数量。经过折中,层数用S表示,选择3,层数表示差分高斯金子塔中可以检测极值点的层数,并将尺度的采样间隔设为k = 2 ^ (1/S)。

在这里插入图片描述

Frequency of sampling in scale

  • 通过实验确定σ,使用大的σ在效率方面有影响,取σ=1.6来实现接近最优的重复性。

在这里插入图片描述

Frequency of sampling in the spatial domain

  • 为了产生比初始图像提供的更多的采样点,在建立金字塔之前,使用线性插值使输入图像的大小加倍,这样关键点数量增加了近4倍,使图像放大2倍以上没有更大的效果提升。可以理解为在检测极值点前对原始图像高斯平滑会丢失高频信息,所以在建立尺度空间前首先对原始图像长宽扩展一倍,以保留原始图像信息,增加特征点数量。
  • 降采样建立高斯金字塔,为了体现物体大小的变化,有尺度缩放不变性;另一方面出于性能上的考虑,原始图上用较大的高斯核会取得不错的效果,但采样点数量随着σ增加,而平方增加,降采样可以提高效率。
  • 组数 O = [log2(min(M, N))] - 2 ,其中M, N时原始图像的大小(长宽),2 = 3 -1,其中3是金字塔顶层图像长、宽的最小值的对数,但由于图像尺寸太小信息就丢失严重,所以太小没有意义,将顶层图像最小尺寸定为8 * 8。
  • 原始图像进行放大处理,尺度σ的计算:
  • 输入的图像的尺度为 σ = 0.5(Lowe论文中设定),图像进行放大处理后,尺度变为σ = 1,利用高斯平滑的一个平方特性,即进行一次σ1的平滑,再进行一次σ2的平滑,相当于进行一次 (σ1 ^ 2 + σ2 ^ 2) ^ (1/2) 的平滑,则第0组第0层的高斯平滑尺度为:
    在这里插入图片描述
    则第s层的高斯平滑尺度为:
    在这里插入图片描述
  • 尺度是说该组层图像相对于原始图像进行的高斯平滑σ,上面提到的高斯平滑尺度是指对于金字塔中上一层图像进行高斯平滑的σ(因为需要降采样建立高斯金子塔,源码中是对上一层图像进行高斯平滑,而不是对原始图像进行高斯平滑)。
  • 下一组中第0层图像由上一组的倒数第三层图像降2采样得到,所以,每一组每一层的尺度就确定了:(注意区分小s和大S)
    在这里插入图片描述

尺度变化连续性:

  • 在极值的比较过程中,差分高斯金字塔中首尾两层图像无法进行极值比较,为了满足尺度变化的连续性,也就是保证寻找极值的尺度空间的尺度变化是连续的:

在这里插入图片描述

  • 所以下一组中第0层图像由上一组的倒数第三层图像降2采样得到,这样上图红色框中尺度变化量连续,尺度的采样间隔设为k = 2 ^ (1/3)。

Accurate keypoint localization

1、SIFT中查找的关键点(特征点)
  • 这些点是一些十分突出的点,不会因光照条件的改变而消失,比如角点、边缘点、暗区域的亮点以及亮区域的暗点,两幅图像中有相同的景物,使用某种方法分别提取各自的稳定点,这些点之间会有相互对应的匹配点。
  • 特征点具有三个特征:尺度、位置、方向
2、关键点精确定位
  • 通过一个像素与其近邻的比较可以得到关键点的候选值,下一步就是对关键点的数据(位置、尺度和主曲率)进行细节匹配,这些细节匹配使低对比度(对噪声敏感)或定位在边缘上的点被淘汰。
  • 为了提高关键点的稳定性,需要对尺度空间DoG函数进行曲线拟合,极值点的精确位置通过泰勒插值得到。

在这里插入图片描述

  • 在计算过程中,分别对图像的行、列和尺度三个量进行了修正,在Lowe论文中进行了五次迭代,也就是进行了五次修正。

在这里插入图片描述

  • 去除对比度较低的极值点,减少噪声干扰,Lowe论文中认为小于0.04的极值点均可抛弃。
  • 仅仅去除低对比度的极值点对于特征点稳定性是远远不够的。DoG函数在图像边缘有较强的边缘响应,需要排除边缘响应。DoG函数的峰值点在横跨边缘的方向有较大的主曲率,在垂直边缘的方向有较小的主曲率。主曲率可以通过计算在该点位置尺度的 2*2 的Hessian矩阵得到,导数由采样点相邻差来估计:
    在这里插入图片描述
  • 主曲率和H的特征值成正比,为了避免直接计算特征值,只考虑它们之间的比率。
    在这里插入图片描述
  • Lowe论文中建议 r = 10。

五、Orientation assignment

  • 基与局部图像属性给每个关键点指定一个统一设置的方向,关键点描述子可以与这个方向相关,从而实现图像旋转的不变性。
  • 对于每个图像样本L(x, y),在该尺度下,梯度量级m(x, y) 和方向 θ(x, y) ,使用像素差预计算:

在这里插入图片描述

  • 对上面提取的每个关键点,围绕该点选择一个窗口(圆形区域),窗口内各采样点的梯度方向构成一个方向直方图,根据直方图的峰值确定关键点的方向。关键点的尺度σ用来选择哪个高斯滤波图像参与计算,还用来决定窗口的大小。

  • L为关键点所在的尺度空间值,按Lowe的建议,梯度向量的幅度m(x, y) 按σ = 1.5 σ_oct的高斯分布加成,按尺度采样的3σ原则(高斯函数的3σ原则:高斯函数的3σ距离之外的像素都可以看作不起作用),领域窗口半径为 3 * 1.5 σ_oct 。每个累加到梯度方向直方图的采样点的梯度值都要进行权重处理,加权采用圆形高斯加权函数,其标准偏差为σ = 1.5 σ_oct。SIFT算法只考虑了尺度和旋转不变性,并没有考虑仿射不变性。通过高斯加权,使特征点附近的梯度幅度有较大的权重,这样可以部分弥补仿射不变性而产生的特征点不稳定的问题,因此,选取的窗口大小和关键点尺度成正比。这样提取的信息,就具有尺度不变性。

  • 一个方向直方图是用关键点周围区域的样本点的梯度方向组成的。方向直方图有36个柱子,覆盖360度方位角。每个加到直方图的样本都被它的梯度量级定权,再被该处关键点尺度1.5倍的σ的高斯圆形窗口定权(源码中确定的加权区域为(radius * 2 + 1) * (radius * 2 + 1))。

  • 梯度方向直方图的绘制,首先确定加权区域中每个像素的梯度幅度和梯度方向,乘以各个像素位置的权重,绘制梯度方向直方图。

    中间那张图中的箭头表示梯度,箭头方向表示梯度方向,箭头长度表示梯度大小
    在这里插入图片描述
    比如上面方向图中蓝圈包围的像素,角度为80度,这个像素对应的幅值为2,所以在直方图80度对应的bin加上2。红圈包围的像素,角度为10度,介于0度和20度之间,其幅值为4,那么这个梯度值就被按比例分给0度和20度对应的bin,也就是各加上2,存在权重时,需要乘以对应的权值,再加到对应的bin

  • 方向直方图的峰值与局部梯度的主方向相对应。直方图中的最高峰值首先被探测到,然后是占最高峰80%以上的局部峰值也会在该方向建立一个关键点。因此,对于有多个相似量级的位置,可以在该位置和尺度创建多个不同向的关键点。只有15%的点会被指定多个方向,但它们对匹配的稳定性意义很大。最后,得到一个通过配准3个直方图值,并过每个峰值,绘制最接近的插值抛物线(泰勒插值),找到更准确的峰值位置。
    在这里插入图片描述

  • Lowe做了实验,在不同数量的图像噪声下,测试位置、尺度和方向的实验稳定性。图像被随机的旋转缩放过,当允许方向误差为15度以内时,特征点检测保留了95%的准确性。SIFT特征对大量的像素噪声具有抵抗性,产生误差的主要原因在初始位置和尺度的探测。

在这里插入图片描述

  • 图像的关键点检测已完毕,每个关键点有三个信息:位置、尺度、方向,同时也就使关键点具备了平移、缩放和旋转不变性。

六、The local image descriptor

  • 描述的目的是在关键点计算后,用一组向量将这个关键点描述出来,这个描述子不但包括关键点,也包括关键点周围对其有贡献的像素点,用来作为目标匹配的依据。
  • 之前的操作已经指定了图像的位置、尺度和每个关键点的方向,下一步就是为局部图像区域计算描述子,使其不随各种变化而改变,比如光照变化、视角变化等。Lowe建议描述子使用在关键点尺度空间内 4 * 4 的窗口中计算8个方向的梯度信息,共 4 * 4 * 8 维向量表征。通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。

在这里插入图片描述

Descriptor representation

1、确定计算描述子所需的图像区域
  • 特征描述子与特征点所在的尺度有关,因此梯度的求取应在特征点对应的高斯图像上进行。将关键点附件的领域划分为 d * d (Lowe建议 d = 4)个子区域,每个子区域做一个种子点,每个种子点有8个方向。每个子区域的大小与关键点方向分配时相同,即每个区域边长为3 * σ_oct,进行采样,考虑到实际计算时,需要采用三线性插值,所需图像窗口边长为3 * σ_oct * (d + 1)。在考虑到旋转因素(方便下一步将坐标轴旋转到关键点方向),实际计算所需的图像区域半径为:(σ_oct表示关键点所在图像的尺度)

在这里插入图片描述

  • 将坐标轴旋转为关键点的方向,以确保旋转不变性
    在这里插入图片描述
2、梯度直方图生成

在这里插入图片描述

3、三线性插值
  • 插值计算每个种子点八个方向的梯度
    在这里插入图片描述
  • 在图像半径区域内对每个像素点求其梯度幅值和方向,然后对每个梯度幅值乘以高斯权重参数,生成梯度方向直方图
    在这里插入图片描述
4、特征描述子
  • 如上统计的 4 * 4 * 8 = 128 个梯度信息即为该关键点的特征向量。特征向量形成后,为了去除光照变化的影响,需要对他们进行归一化处理(向量归一化),对于图像灰度值整体飘移,图像各点的梯度是领域像素相减得到,所以也能去除,得到的描述子向量为 H = (h1, h2, …, h128),归一化后的特征向量为L = (L1, L2, …, L128)。

在这里插入图片描述

5、描述子的门限化
  • 非线性光照、相机饱和度变化可能造成某些方向的梯度值过大,而对方向的影响微弱。因此设置门限(向量归一化后,一般取0.2)截断较大的梯度值(大于0.2的则令它等于0.2,小于0.2的则保持不变)。然后再进行一次归一化处理,提高特征的鉴别性。
  • 用一组图概括描述子的生成过程
    在这里插入图片描述

七、Keypoint matching

1、关键点匹配
  • 目标的识别是通过两点集内关键点描述子的比对来完成。具有128维的关键点描述子的相似性度量采用欧式距离。
  • 穷举匹配耗时太多,一般采用KD树的数据结构来完成搜索
    在这里插入图片描述
2、消除错配点
  • 匹配过程中存在着大量的错配点,Lowe论文中指出使用最近距离与次近距离的比值,对于目标识别的执行,丢弃距离比值大于0.8的匹配,在仅仅丢弃5%的正确匹配的前提下,减少90%的错误匹配。
  • RANSAC(Random Sample Consensus)随机抽样一致,是一种鲁棒性的参数估计方法,其实质就是一个反复测试,不断迭代的过程
3、SIFT算法的应用
  • 物体识别、机器人定位与导航、图像拼接、三维建模、手势识别、视频跟踪、笔记鉴定、指纹与人脸识别、犯罪现场特征提取等。

总结

  • 旋转不变性:特征点包括尺度、位置和方向三个信息,在生成描述子前将图片旋转到特征点的主方向上,保证可能的特征点与可能的匹配点在描述时使用的区域尽量重合。
  • 仿射不变性:用梯度信息生成描述子,由于梯度的稳定性,本身具有一定的抵抗仿射的能力。另外生成梯度直方图时使用了高斯加权,距离特征点近的梯度幅值有较大的权重,弥补了没有考虑仿射不变性带来的特征点不稳定,抵抗仿射的能力如下:

在这里插入图片描述

  • 光照不变性:通过归一化,防止光照的影响造成梯度值整体变化,有时候相机饱和等原因会造成局部梯度过大,通过门限化,使归一化后的描述子大于 0.2 的值设置为 0.2,再进行一次归一化,来抵消影响。
  • 抵抗噪声:在差分高斯金子塔中得到极值点 后,对比度低于 0.04 的点被去除,这些点灰度值小,容易受到噪声的影响变得不稳定;另外确定主方向和生成描述子时都将梯度幅值进行加权,即使噪声影响了部分特征点,通过加权统计会抑制变化,不会对全局造成太大的影响,Lowe论文中的抗噪实验:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值