图像处理——SIFT算法

article/2025/10/26 12:44:13

[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 , σ ) = 1 2 π σ 2 ⋅ e − x 2 + y 2 2 σ 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πσ21e2σ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,σ),其中 k k k为常系数乘子。
高斯函数有较好的性质方便运算: σ ⋅ ▽ 2 G = ∂ 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=σGkσσG(x,y,kσ)G(x,y,σ)

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

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

名词解释:

尺度空间

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

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

若高斯金字塔共有o组,s层,则有 σ ( s ) = σ 0 ⋅ 2 s S \sigma(s)=\sigma_0\cdot2^{\frac{s}{S}} σ(s)=σ02Ss,其中 σ \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 + ∂ D T ∂ x x + 1 2 x T ∂ 2 D ∂ x 2 x \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 x D(x)=D+xDTx+21xTx22Dx

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

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

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

T r ( H ) 2 D e t ( H ) = ( α + β ) 2 α β = ( r + 1 ) 2 r \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

因此,检测主曲率是否小于设定的阈值 r r r,只需检测 T r ( H ) 2 D e t ( H ) < ( r + 1 ) 2 r = T \displaystyle\frac{{Tr(\mathbf H)}^2}{Det(\mathbf H)}<\frac{(r+1)^2}{r}=T Det(H)Tr(H)2<r(r+1)2=T即可,然后便可进行消除。(建议阈值T设置为1.2,小于时保留关键点,大于时剔除)
在这里插入图片描述
图中,(a)为原图,(b)为经过高斯差分函数后提取到的边缘关键点及方向,(c),(d)为将阈值 r r r设置为10后进边缘消除后的结果。

方向匹配(Orientation assignment)

基于局部图像的梯度方向,为每个关键点设置一个或多个方向,后续对图像的所有操作都与方向、尺度和位置的相关变换有关,这些提供了变换的不变性。
关键点尺度是用来选择尺度最接近的高斯平滑图像 L L L,所有的计算都是在同一尺度不变条件下进行的。对于每个采样图像 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(x1,y))2+(L(x,y+1)L(x,y1))2

θ ( x , y ) = t a n − 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)=tan1[L(x+1,y)L(x1,y)L(x,y+1)L(x,y1)]

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

关键点描述子(Keypoint descriptor)

在每个关键点周围的选定区域计算局部图像梯度,这些梯度被转换为一种允许有较大的局部变形和光照变化的表示。计算局部图像区域的描述子,使得他们对光照或者三维视角的变换局域不变性。利用合适的尺度在关键点周围进行局部图像强度采样,使用归一化的相关方法进行匹配。
在这里插入图片描述
通过计算关键点位置周围区域的每个采样点的梯度量级和方向,来生成关键点描述子。利用一个高斯窗设置权重(即上图中的圆),然后这些样本被累加到覆盖4 × \times × 4个子域的方向直方图,箭头的长度是附近区域该方向的梯度量级之和。上图展现的是一个从8$\times$ 8的样本集中计算出的2 × \times × 2的描述子。


http://chatgpt.dhexx.cn/article/Ck1Ow0b8.shtml

相关文章

特征点匹配——SIFT算法详解

之前在学习三维重建的过程中&#xff0c;了解过SIFT算法&#xff0c;现在老师要求详细的了解SIFT算法&#xff0c;看看能不能对它进行改进&#xff0c;于是又详细的看了一遍SIFT算法。记录一下。 一、SIFT算法综述 SIFT&#xff08;Scale Invariant Feature Transform&#x…

SIFT算法之python实现

0. 算法原理细节可参考&#xff1a; https://blog.csdn.net/abcjennifer/article/details/7639681https://blog.csdn.net/zddblog/article/details/7521424?depth_1-utm_sourcedistribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_sourcedistribute.pc_re…

Python实现SIFT算法,附详细公式推导和代码

SIFT特征点提取算法 1、算法简介 尺度不变特征转换即SIFT (Scale-invariant feature transform)是一种计算机视觉的算法。它用来侦测与描述影像中的局部性特征&#xff0c;它在空间尺度中寻找极值点&#xff0c;并提取出其位置、尺度、旋转不变量&#xff0c;此算法由 David …

图像特征匹配方法——SIFT算法原理及实现

传统图像处理中图像特征匹配有三个基本步骤&#xff1a;特征提取、特征描述和特征匹配。特征提取就是从图像中提取出关键点&#xff08;或特征点、角点&#xff09;等。特征描述就是用一组数学向量对特征点进行描述&#xff0c;其主要保证不同的向量和不同的特征点之间是一种对…

SIFT算法原理介绍

本文转自&#xff1a;https://blog.csdn.net/qq_37374643/article/details/88606351 SIFT算法 SIFT即尺度不变特征变换&#xff0c;是用于图像处理领域的一种描述。这种描述具有尺度不变性&#xff0c;可在图像中检测出关键点&#xff0c;是一种局部特征描述子。 一、SIFT算…

SIFT算法的个人理解

SIFT算法的个人理解——理论篇 1. 前言 本人目前共使用过两个版本的sift算法: &#xff08;1&#xff09;Matlab中的sift算法&#xff0c;可以从http://www.cs.ubc.ca/~lowe/keypoints/下载Lowe团队写的sift演示代码&#xff1b; &#xff08;2&#xff09;opencv中的sift…

SIFT算法原理解析

首先找到图像中的一些“稳定点”&#xff0c;这些点是一些十分突出的点不会因光照条件的改变而消失&#xff0c;比如角点、边缘点、暗区域的亮点以及亮区域的点&#xff0c;既然两幅图像中有相同的景物&#xff0c;那么使用某种方法分别提取各自的稳定点&#xff0c;这些点之间…

SIFT算法步骤梳理

简介&#xff1a;SIFT算法是检测和描述局部特征的一种方法&#xff0c;具有尺度不变性&#xff0c;对于光线&#xff0c;噪声等的容忍度相当高。即便少数几个物体也可以产生大量SIFT特征。 SIFT算法实质上是在不同尺度空间上查找关键点&#xff0c;并计算出关键点的方向。 算…

SIFT算法原理详解及代码实现(笔记)

一、SIFT算法概述&#xff1a; SIFT&#xff08;Scale Invariant Feature Transform&#xff09;全称尺度不变特征变换&#xff0c;SIFT算子是把图像中检测到的特征点用一个128维的特征向量进行描述&#xff0c;因此一幅图像经过SIFT算法后表示为一个128维的特征向量集&#xf…

SIFT算法 特征匹配

目录 一、SIFT算法DOG尺度空间构造&#xff08;Difference of Gaussian&#xff09;关键点搜索与定位方向赋值、关键点描述 二、特征匹配 一、SIFT算法 参考链接 【OpenCV】SIFT原理与源码分析 DOG尺度空间构造&#xff08;Difference of Gaussian&#xff09; 首先是对原特…

SIFT算法详解——图像特征提取与匹配

文章目录 前言一、建立高斯差分金字塔1、建立高斯金字塔2、建立高斯差分金字塔3、建塔过程中参数的设定及相关细节问题 二、关键点(key points)位置确定1、阈值化2、在高斯差分金字塔中找极值点3、调整极值点位置4、舍去低对比度的点5、边缘效应的去除&#xff08;难点&#xf…

非常详细的sift算法原理解析

尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT) Just For Fun 转自&#xff1a;http://blog.csdn.net/zddblog/article/details/7521424 对于初学者&#xff0c;从David G.Lowe的论文到实现&#xff0c;有许多鸿沟&#xff0c;本文帮你跨越。 1、SIFT综…

【Python】:SIFT算法的实现

✨博客主页&#xff1a;米开朗琪罗~&#x1f388; ✨博主爱好&#xff1a;羽毛球&#x1f3f8; ✨年轻人要&#xff1a;Living for the moment&#xff08;活在当下&#xff09;&#xff01;&#x1f4aa; &#x1f3c6;推荐专栏&#xff1a;【图像处理】【千锤百炼Python】【深…

SIFT算法原理

SIFT算法 SIFT即尺度不变特征变换&#xff0c;是用于图像处理领域的一种描述。这种描述具有尺度不变性&#xff0c;可在图像中检测出关键点&#xff0c;是一种局部特征描述子。 一、SIFT算法特点&#xff1a; 1、具有较好的稳定性和不变性&#xff0c;能够适应旋转、尺度缩放…

计算机视觉——SIFT算法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、SIFT算法特点二、SIFT算法实质三、SIFT算法实现特征匹配主要有以下流程&#xff1a;1、**特征点位置和尺度的提取**&#xff1a;2、**特征点方向的提取**3、…

SIFT(尺度不变特征变换)算法

目录 SIFT 1、生成高斯差分金字塔&#xff0c;尺度空间构建 2、空间极值点检测 3、稳定关键点的精确定位 4、稳定关键点方向信息分配 5、关键点描述 6、特征点匹配 SIFT SIFT&#xff1a;Scale-Invariant Feature Trainsform即尺度不变特征变换&#xff0c;这是一种图像…

SIFT算法

1. SIFT简介 尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征&#xff0c;它在空间尺度中寻找极值点&#xff0c;并提取出其位置、尺度、旋转不变量&#xff0c;此算法由 David Lowe在1999年所发表&#xff…

SIFT算法详解(附有完整代码)

说明&#xff1a;本文旨在给出 SIFT 算法的具体实现&#xff0c;而在 SIFT 详解上只是做出简单介绍&#xff0c;在这里可以给大家推荐一篇好文&#xff1a;https://blog.csdn.net/zddblog/article/details/7521424&#xff1b;结合这篇文章和下文的具体代码实现&#xff0c;我相…

SIFT算法详解

大纲 引言一、高斯金字塔二、高斯差分金字塔三、特征点处理1.阈值化2.非极大值抑制3. 二阶泰勒修正4.低对比度去除5.边缘效应去除 四、特征点描述子1. 确定特征点区域方向2. 特征点区域描述子 总结参考&#xff1a; 引言 SIFT算法是为了解决图片的匹配问题&#xff0c;想要从图…

全网最详细SIFT算法原理实现

文章目录 一、SIFT算法1.1什么是SIFT算法&#xff1f;1.2SIFT算法特点 二、SIFT算法实质2.1SIFT算法实现特征匹配主要有以下三个流程&#xff1a; 三、SIFT算法原理3.1图像金字塔3.2创建图像高斯金字塔3.3高斯金字塔创建总图 四、尺度空间五、高斯差分金字塔5.1极值点(Key poin…