[SIFT算法原文(Distinctive Image Features from Scale-Invariant Keypoints)

SIFT算法(Scale-invariant feature transform),即尺度不变特征变换,由David Lowe提出,是一种基于局部兴趣点的算法,因此不仅对图片大小和旋转不敏感,而且对光照、噪声等的抗干扰能力也很好。

主要步骤

尺度空间极值探测(Scale-space extrema detection)

利用高斯差分函数对整个图像进行搜索,识别潜在的对缩放和旋转具有不变性的兴趣点。
使用级联滤波方法来识别候选位置,然后进一步探测关键点。在所有尺度中,用尺度空间连续函数探测图像中具有尺度变换不变性的位置。一副图像的尺度空间函数L(x,y,σ)L(x,y,\sigma)L(x,y,σ)由可变尺度的高斯函数G(x,y,σ)G(x,y,\sigma)G(x,y,σ)和输入图像I(x,y)I(x,y)I(x,y)的卷积生成,即:
L(x,y,σ)=G(x,y,σ)∗I(x,y)L(x,y,\sigma)=G(x,y,\sigma)*I(x,y)L(x,y,σ)=G(x,y,σ)∗I(x,y),其中,∗*∗指卷积操作,G(x,y,σ)=12πσ2⋅e−x2+y22σ2\displaystyle G(x,y,\sigma)=\frac{1}{2\pi\sigma^2}\cdot e^{-\frac{x^2+y^2}{2\sigma^2}}G(x,y,σ)=2πσ21​⋅e−2σ2x2+y2​。用**高斯差分函数(DOG)**的尺度空间极值同图像做卷积,来有效探测尺度空间中稳定点的位置,即D(x,y,σ)=(G(x,y,kσ)−G(x,y,σ))∗I(x,y)=L(x,y,kσ)−L(x,y,σ)D(x,y,\sigma)=(G(x,y,k\sigma)-G(x,y,\sigma))*I(x,y)=L(x,y,k\sigma)-L(x,y,\sigma)D(x,y,σ)=(G(x,y,kσ)−G(x,y,σ))∗I(x,y)=L(x,y,kσ)−L(x,y,σ),其中kkk为常系数乘子。
高斯函数有较好的性质方便运算:σ⋅▽2G=∂G∂σ≈G(x,y,kσ)−G(x,y,σ)kσ−σ\displaystyle\sigma\cdot\bigtriangledown^2G=\frac{\partial G}{\partial \sigma}\approx\frac{G(x,y,k\sigma)-G(x,y,\sigma)}{k\sigma-\sigma}σ⋅▽2G=∂σ∂G​≈kσ−σG(x,y,kσ)−G(x,y,σ)​,

而G(x,y,kσ)−G(x,y,σ)≈(k−1)⋅σ2⋅▽2GG(x,y,k\sigma)-G(x,y,\sigma)\approx(k-1)\cdot\sigma^2\cdot\bigtriangledown^2GG(x,y,kσ)−G(x,y,σ)≈(k−1)⋅σ2⋅▽2G。

完全探测出高斯差分函数的所有极值的代价是很昂贵的,但可以使用粗糙的大尺度采样获得最稳定和有效的子集。

名词解释:

尺度空间

即试图子图像领域中模拟人眼观察物体的概念与方法。SIFT利用高斯函数进行滤波的主要原因:
(1)高斯核函数是唯一的尺度不变核函数;
(2)高斯差分函数可近似为两个LLL之差,使得特征提取更简单(具体描述如上所示)。
而图像的尺度空间生成LLL是当前图像与不同尺度的核参数σ\sigmaσ卷积后产生的图像。
尺度空间的实现可以利用高斯金字塔表示,其构建分两步:(1)对图像做高斯平滑;(2)对图像做降采样。

将图像金字塔每层的一张图像使用不同参数σ\sigmaσ做高斯模糊,使得金字塔的每层含有多张高斯模糊图像。金字塔的每层多张图像合称为一组(Octave),每层只有一组图像,组数与金字塔层数相等。每组含有多张(称为层(Interval))图像。降采样时,金字塔上一组图像的初始图像是有前一组图像的倒数第三张图像隔点采样得到的。

若高斯金字塔共有o组,s层,则有σ(s)=σ0⋅2sS\sigma(s)=\sigma_0\cdot2^{\frac{s}{S}}σ(s)=σ0​⋅2Ss​,其中σ\sigmaσ为尺度空间坐标,s为sub-level层坐标;σ0\sigma_0σ0​为初始尺度,S为每组的层数。

DOG局部极值检测

特征点是由DOG空间的局部极值点组成。每一个像素点要和它的图像域和尺度域的所有相邻点进行比较。如图所示,中间的检测点要和它通尺度的8个相邻点和上下相邻尺度对应的2×\times× 9个点比较,以确保在尺度空间和图像空间都检测到极值点。

关键点定位(Keypoint localization)

通过拟合精细的模型在每个候选位置上确定位置和尺度,而关键点的选择依赖于它们的稳定程度。
通过比较一个像素和它的相邻点可以发现候选关键点,接下来是对附近数据执行位置、尺度和主曲率的详细拟合,这些信息使得低对比度的点、对噪声敏感的点以及边缘处的差点被淘汰。使用空间尺度函数D(x,y,σ)D(x,y,\sigma)D(x,y,σ)的泰勒展开(以样本点为原点,展开到二阶):
D(x)=D+∂DT∂xx+12xT∂2D∂x2x\displaystyle D(\mathbf x)=D+\frac{\partial D^T}{\partial\mathbf x}\mathbf x+\frac{1}{2}\mathbf x^T\frac{\partial^2 D}{\partial\mathbf x^2}\mathbf xD(x)=D+∂x∂DT​x+21​xT∂x2∂2D​x。

使D(x)D(\mathbf x)D(x)的导数为0,可得极值点x^=−∂2D∂x2−1⋅∂D∂x\displaystyle\hat{\mathbf x}=-{\frac{\partial^2 D}{\partial\mathbf x^2}}^{-1}\cdot\frac{\partial D}{\partial\mathbf x}x^=−∂x2∂2D​−1⋅∂x∂D​,极值D(x^)=D+12∂DT∂xx^\displaystyle D(\hat{\mathbf x})=D+\frac{1}{2}\frac{\partial D^T}{\partial\mathbf x}\hat{\mathbf x}D(x^)=D+21​∂x∂DT​x^。

边缘消除:高斯差分函数对于边缘是很敏感的,但有些差的边缘是不需要的,需要消除。主曲率可利用2×\times× 2的Hessian 矩阵H\displaystyle\mathbf HH计算,H\displaystyle\mathbf HH中的导数Dxx,Dxy,Dyx,DyyD_{xx},D_{xy},D_{yx},D_{yy}Dxx​,Dxy​,Dyx​,Dyy​可利用采样点及其相邻点的差分得到,且H\displaystyle\mathbf HH的特征值和DDD的主曲率是成正比的。

简化运算:记H\displaystyle\mathbf HH的奇异值为α,β,且α>β,α=rβ\alpha,\beta,且\alpha>\beta,\alpha=r\betaα,β,且α>β,α=rβ,则有Tr(H)=Dxx+Dyy=α+β,Det(H)=DxxDyy−(Dxy)2=αβTr(\mathbf H)=D_{xx}+D_{yy}=\alpha+\beta,Det(\mathbf H)=D_{xx}D_{yy}-(D_{xy})^2=\alpha\betaTr(H)=Dxx​+Dyy​=α+β,Det(H)=Dxx​Dyy​−(Dxy​)2=αβ,

则Tr(H)2Det(H)=(α+β)2αβ=(r+1)2r\displaystyle\frac{{Tr(\mathbf H)}^2}{Det(\mathbf H)}=\frac{(\alpha+\beta)^2}{\alpha\beta}=\frac{(r+1)^2}{r}Det(H)Tr(H)2​=αβ(α+β)2​=r(r+1)2​。

因此,检测主曲率是否小于设定的阈值rrr,只需检测Tr(H)2Det(H)<(r+1)2r=T\displaystyle\frac{{Tr(\mathbf H)}^2}{Det(\mathbf H)}<\frac{(r+1)^2}{r}=TDet(H)Tr(H)2​<r(r+1)2​=T即可,然后便可进行消除。(建议阈值T设置为1.2,小于时保留关键点,大于时剔除)

图中,(a)为原图,(b)为经过高斯差分函数后提取到的边缘关键点及方向,(c),(d)为将阈值rrr设置为10后进边缘消除后的结果。

方向匹配(Orientation assignment)

基于局部图像的梯度方向,为每个关键点设置一个或多个方向,后续对图像的所有操作都与方向、尺度和位置的相关变换有关,这些提供了变换的不变性。
关键点尺度是用来选择尺度最接近的高斯平滑图像LLL,所有的计算都是在同一尺度不变条件下进行的。对于每个采样图像L(x,y)L(x,y)L(x,y),利用像素差分法计算其梯度量级m(x,y)m(x,y)m(x,y)和方向θ(x,y)\theta(x,y)θ(x,y),即:

m(x,y)=(L(x+1,y)−L(x−1,y))2+(L(x,y+1)−L(x,y−1))2\displaystyle m(x,y)=\sqrt{(L(x+1,y)-L(x-1,y))^2+(L(x,y+1)-L(x,y-1))^2}m(x,y)=(L(x+1,y)−L(x−1,y))2+(L(x,y+1)−L(x,y−1))2​

θ(x,y)=tan−1[L(x,y+1)−L(x,y−1)L(x+1,y)−L(x−1,y)]\displaystyle \theta(x,y)={tan}^{-1}[\frac{L(x,y+1)-L(x,y-1)}{L(x+1,y)-L(x-1,y)}]θ(x,y)=tan−1[L(x+1,y)−L(x−1,y)L(x,y+1)−L(x,y−1)​]。

利用关键点周围区域采样点的梯度方向生成方向直方图,方向直方图有36个覆盖360度的柱子,其峰值与局部梯度的主方向相对应。首先探测到最高峰,然后对最高峰80%以上的峰也创建关键点及方向;因此,对于有多重相似量级的位置,可以在该相同位置和尺度创建具有多个方向的关键点。但只有15%的点会被设置多重方向,但他们对匹配的稳定性是很重要的,最后,得到一个拟合3个直方图且每个峰值最接近的更准确峰位的插值抛物线。

关键点描述子(Keypoint descriptor)

在每个关键点周围的选定区域计算局部图像梯度,这些梯度被转换为一种允许有较大的局部变形和光照变化的表示。计算局部图像区域的描述子,使得他们对光照或者三维视角的变换局域不变性。利用合适的尺度在关键点周围进行局部图像强度采样,使用归一化的相关方法进行匹配。

通过计算关键点位置周围区域的每个采样点的梯度量级和方向,来生成关键点描述子。利用一个高斯窗设置权重(即上图中的圆),然后这些样本被累加到覆盖4×\times× 4个子域的方向直方图,箭头的长度是附近区域该方向的梯度量级之和。上图展现的是一个从8$\times$ 8的样本集中计算出的2×\times× 2的描述子。

图像处理——SIFT算法相关推荐

  1. 图像处理-sift算法

    sift是图像匹配的非常经典的算法,但是很复杂,要想自己拿C或C++实现很麻烦,如果只是使用的话,有国外某高人维护的sift库,前期只要自己能够调用即可,关键是要熟悉大致的流程,对sift库有个了解, ...

  2. 你真的理解图像处理经典算法 SIFT 吗?最深入、最全面综述:尺度不变特征转换

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨LYP2020@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/ ...

  3. 你真的理解图像处理经典算法SIFT吗?最全面综述:尺度不变特征转换

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨LY ...

  4. 图像处理SIFT与SURF算法详解

    图像的特征点检测是图像配准的第一步,下面将为大家介绍尺度不变特征检测(SIFT)和加速鲁棒特征检测(SURF)两种算法. 一.SIFT算法 SIFT 算法是一种高精度的特征点检测算法.运用此算法检测出 ...

  5. C语言实现寻找极值点,九之再续:教你一步一步用c语言实现sift算法、上

    教你一步一步用c语言实现sift算法.上 作者:July.二零一一年三月十二日 出处:http://blog.csdn.net/v_JULY_v 参考:Rob Hess维护的sift 库 环境:win ...

  6. SIFT算法详解(二)

    目录(?)[-] 尺度不变特征变换匹配算法详解 Scale Invariant Feature TransformSIFT Just For Fun zdd  zddmailgmailcom SIFT ...

  7. 计算机视觉——基于sift算法的地理信息图像匹配

    目录 一.SIFT(尺度不变特征变换) 1.1 SIFT简介 1.2 SIFT算法可以解决的问题 1.3 SIFT算法实现特征匹配的三个主要流程 1.4 关键点检测的相关概念 1.4.1 哪些点是SI ...

  8. 图像特征提取与匹配——SIFT算法

    图像特征提取与匹配--SIFT算法 尺度不变特征转换(Scale-invariant feature transform 或 SIFT)是一种用来侦测与描述影像中局部性特征的算法,它在空间尺度中寻找极 ...

  9. 经典算法研究系列:图像特征提取与匹配之SIFT算法

     尺度不变特征转换(Scale-invariant feature transform 或 SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置 ...

  10. 图像特征提取与匹配之SIFT算法

    推荐阅读: David G. Lowe, "Distinctive image features from scale-invariant keypoints,"  Interna ...

最新文章

  1. Vue中插入HTML代码的方法
  2. HDU——2874 Connections between cities
  3. 云原生应用万节点分钟级分发协同实践
  4. poj3296--Rinse(三分)
  5. 银屑病与肠道菌群(调研手稿一)
  6. 暴击!被初中生碾压智商!这份被国家数学集训队采用的初中奥数资料究竟有多厉害?...
  7. 诺基亚9 PureView五摄机皇再曝光 低配高价毫无诚意?
  8. 数组用法以及引用类型和值类型
  9. 最小化安装虚拟机(建立母盘和快照)
  10. JavaScript基础语法快速入门
  11. Machine Learning - XVIII. Application Example Photo OCR应用实例-照片OCR(Week10)
  12. shell中使用if判断时用到的一些参数
  13. Linux虚拟机扩容
  14. 异常处理:java.lang.ClassNotFoundException: javax.xml.bind.JAXBContext
  15. mac mysql 移动硬盘_MAC上安装Fuse for macOS以支持读取NTFS格式的移动硬盘
  16. 超详细280页Docker实战文档,97.6 MB高清可下载
  17. python json.dumps(output) ^ SyntaxError: invalid syntax
  18. 实用英语:女生拒绝男生搭讪的经典英语句
  19. 通过IPV6上QQ及自建IPV6代理的方法
  20. ctf (bugku)(0和1的故事)

热门文章

  1. 【原创】黑群晖向白群晖 DS920+ 迁移
  2. 我的世界服务器发消息有符号,我的世界彩色字体符号
  3. BP神经网络与RBF神经网络matlab代码实现
  4. 由ContactsProvider的升级引发的OTA首次开机卡白米问题分析
  5. Proteus仿真之工业顺序控制实验
  6. Linu下安装ffmpeg
  7. 课程设计(飞机订票系统) 超全
  8. 卡巴斯基7.0离线更新升级包病毒库
  9. 202102 sqlplus command not found 注意切换用户
  10. 在Access数据库中使用SQL查询分析器