计算机视觉局部图像描述子:SIFT算法
Posted JMU-HZH
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机视觉局部图像描述子:SIFT算法相关的知识,希望对你有一定的参考价值。
文章目录
【计算机视觉】局部图像描述子:SIFT算法
1. SIFT算法的原理
1.1 SIFT算法的目标与思想
1.1.1 算法目标
在不同的尺度空间上找特征点,这里的特征点指一些十分突出的点,不会因光照、尺度、旋转等因素的改变而消失,比如角点、边缘点、暗区域的亮点或亮区域的暗点等。最后找出两幅图像之间的特征点,并找到它们之间的匹配关系。
1.1.2 算法思想
1. 通过尺度空间和方向分配确定特征点的位置和方向,满足尺度不变性和旋转不变性
2. 对于特征点进行特征描述
3. 通过特征点的两两比较找出相互匹配的若干对特征点,建立图像之间对应关系
1.2 尺度空间的思想和表示
1.2.1 尺度空间的思想
通过对原始图像进行尺度变换,获得多尺度空间下的空间表示。从而实现边缘、角点检测和不同分辨率上的特征提取,以满足特征点的尺度不变性。
1.2.2 尺度空间的表示
由于尺度空间满足人眼从近到远逐渐模糊的成像过程,因此算法中将图像的尺度空间定义为变换尺度的高斯函数与原图像的卷积。σ指尺度空间因子,σ越大越模糊,越小越平滑,所以大尺度对应图像表观特征,小尺度对应图像细节特征。
尺
度
空
间
表
示
:
L
(
x
,
y
,
σ
)
=
G
(
x
,
y
,
σ
)
∗
I
(
x
,
y
)
高
斯
函
数
:
G
(
x
,
y
,
σ
)
=
1
2
π
σ
2
e
−
(
x
−
m
/
2
)
2
+
(
y
−
n
/
2
)
2
2
σ
2
尺度空间表示:L(x, y, \\sigma)=G(x, y, \\sigma) * I(x, y) \\\\ 高斯函数:G(x, y, \\sigma)=\\frac12 \\pi \\sigma^2 e^-\\frac(x-m / 2)^2+(y-n / 2)^22 \\sigma^2
尺度空间表示:L(x,y,σ)=G(x,y,σ)∗I(x,y)高斯函数:G(x,y,σ)=2πσ21e−2σ2(x−m/2)2+(y−n/2)2
1.3 高斯金字塔的构建
SIFT算法中的空间特征表示采用高斯金字塔进行表示。高斯金字塔的构建步骤分为:1. 对图像进行下采样; 2. 对图像做高斯平滑。
图像下采样:将原始图像进行不断地下采样,得到一系列大小不一的图像,由大到小,由下到上构建金字塔结构。
高斯平滑:为了体现尺度空间的连续性,高斯金字塔在每次下采样后,在该尺度的图像上进行多次不同尺度的高斯模糊(如上图,每个尺度的图像都会有多张越来越模糊的图像)。这里需要注意的一个小问题,每次执行下采样操作时,隔点采样的图像是每组尺度位于中间的高斯图像(假设一个尺度空间有5张越来越模糊的高斯图像,取第3张进行下采样)。
1.4 高斯差分金字塔和DOG函数
如图所示,将高斯金字塔每组中的上下两层图像进行相减就获得一系列的高斯差分图像所构成的高斯差分金字塔。(通过差值可以看出图像上像素值的变化情况)
DOG函数(Difference of Gaussian)表达式如下:
L
(
x
,
y
,
σ
)
=
G
(
x
,
y
,
σ
)
∗
I
(
x
,
y
)
D
(
x
,
y
,
σ
)
=
[
G
(
x
,
y
,
k
σ
)
−
G
(
x
,
y
,
σ
)
]
∗
I
(
x
,
y
)
=
L
(
x
,
y
,
k
σ
)
−
L
(
x
,
y
,
σ
)
\\begingathered L(x, y, \\sigma)=G(x, y, \\sigma) * I(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) \\endgathered
L(x,y,σ)=G(x,y,σ)∗I(x,y)D(x,y,σ)=[G(x,y,kσ)−G(x,y,σ)]∗I(x,y)=L(x,y,kσ)−L(x,y,σ)
1.5 DOG局部极值检测
1.5.1 初步定位关键点
上图是高斯差分金字塔某尺度的高斯差分图像。在得到高斯金字塔后,SIFT算法对关键点进行初步筛选,筛选方法是每个尺度组中的一张高斯差分图像与相邻的两张高斯差分图像进行比较获得最后的极值点。(这里比较的高斯差分图像不能是每个尺度组的第一张图像和最后一张图像,因为这两张图像只能找到一张相邻图像。因此假设每组图像有S张高斯差分图像,但能进行筛选的高斯差分图像只有(S-2)张)
初步筛选的策略是高斯差分图像(非尺度组中的首尾图像)中的某点像素与图像域(周围的8个点)、尺度域(上下各9个点)共26个点进行比较找到极值点(27个点中差值最小的点或最大的点)作为初步关键点。
1.5.2 精确定位关键点
上述的方法通过在离散空间中(27个点进行比较)找到极值点,它与连续空间中的极值点还是有一定的偏差(如上图)。因此为了提高关键点的稳定性,我们需要对DOG函数进行拟合(这里采用泰勒展开)。
D
(
X
)
=
D
+
∂
D
T
∂
X
X
+
1
2
X
T
∂
2
D
∂
X
2
X
D(X)=D+\\frac\\partial D^T\\partial X X+\\frac12 X^T \\frac\\partial^2 D\\partial X^2 X
D(X)=D+∂X∂DTX+21XT∂X2∂2DX
然后对D(X)进行求导,并令其导数为0(求极值),最终获得偏移量公式:
X
^
=
−
∂
2
D
−
1
∂
X
2
∂
D
∂
X
\\hatX = -\\frac\\partial^2 D^-1\\partial X^2 \\frac\\partial D\\partial X
X^=−∂X2∂2D−1∂X∂D
这时候将初筛关键点的信息带入偏移量公式获得最后的实际偏移量:
X
=
(
x
,
y
,
σ
)
T
带
入
偏
移
量
公
式
获
得
实
际
偏
移
量
:
X
^
=
(
x
,
y
,
σ
)
T
X=(x, y, \\sigma)^T带入偏移量公式\\\\ 获得实际偏移量:\\hatX=(x, y, \\sigma)^T
X=(x,y,σ)T带入偏移量公式获得实际偏移量:X^=(x,y,σ)T
在实际偏移量中,如果(x, y, σ)任意一个维度的偏移量大于0.5,则认为该极值点与理想极值点有较大偏差,因此需要进行插值调整直至拟合(算法设定了一个规则,若迭代插值超过5次偏移量还大于0.5则剔除该关键点)。
1.5.3 消除边缘效应
以上是关于计算机视觉局部图像描述子:SIFT算法的主要内容,如果未能解决你的问题,请参考以下文章
由于DOG函数在图像边缘会产生较强的边缘响应,因此需要排除边缘响应。DoG函数的峰值点在边缘方向有较大的主曲率,而在垂直边缘的方向有较小的主曲率。算法通过该特性进行边缘效应的消除。首先可以获得特征点处的Hessian矩阵(将该点的坐标以及尺度参数信息带入DOG函数,通过泰勒展开化简可获得Hessian矩阵)
H
=
[
D
x
x
D
x
y
D
x
y
D
y
y
]
H=\\left[\\beginarrayll D_x x & D_x y \\\\ D_x y & D_y y \\endarray\\right]
H=[DxxDxyDxyDyy]
Hessian矩阵的特征值表示的是在X方向和Y方向上的梯度
Tr
(
H
)
=
D
x
x
+
D
y
y
=
α
+
β
Det
(
H
)
=
D
x
x
D
y
y
−
(
D
x
y
)
2
=
α
β
\\beginaligned &\\operatornameTr(H)=D_x x+D_y y=\\alpha+\\beta \\\\ &\\operatornameDet(H)=D_x x D_y y-\\left(D_x y\\right)^2=\\alpha \\beta \\endaligned
Tr(H)=Dxx+Dyy=α+βDet(H)=DxxDyy−(Dxy)2=αβ
通过Tr(H)和Det(H)求主曲率
Tr
(
H
)
2
Det
(
H
)
=