个人博客:wyxogo.top
针对Harris无法拟合尺度问题而提出
目标:独立检测同一图像缩放版本的对应区域
需要通过尺度选择机制来寻找与图像变换协变的特征区域大小
“当尺度改变时控制每个圆内的内容不变”
Laplacian核
具体的算法是在边缘检测中使用的高斯一阶偏导核转换为高斯二阶偏导核
使用Laplacian核与图像进行卷积操作
**边缘:**出现波纹的地方
**尺度信息:**当波纹重叠并出现极值的地方
空间选择:如果Laplacian的尺度与blob的尺度“匹配”,则Laplacian响应的幅度将在blob的中心达到最大值
在实际运用的过程中是使用模板匹配信号,即不断改变Laplacian的参数
σ
\sigma
σ取处理后的结果达到峰值时的
σ
\sigma
σ,随着参数的增大会导致后面的特征消失(高斯偏导的面积公式中的
σ
\sigma
σ在分母)
为了保持响应不变(尺度不变),必须将高斯导数乘以
σ
\sigma
σ
拉普拉斯导数是二阶高斯导数,所以它必须乘以
σ
2
\sigma^2
σ2
二维空间的Blob的检测
高斯的拉普拉斯算子:用于二维检测的圆对称算子
∇ 2 g = ∂ 2 g ∂ x 2 + ∂ 2 g ∂ y 2 ⟹ ∇ n o r m 2 g = σ 2 ( ∂ 2 g ∂ x 2 + ∂ 2 g ∂ y 2 ) \nabla^2 g=\frac{\partial^2 g}{\partial x^2}+\frac{\partial^2 g}{\partial y^2}\Longrightarrow \nabla_{norm}^2 g=\sigma^2(\frac{\partial^2 g}{\partial x^2}+\frac{\partial^2 g}{\partial y^2}) ∇2g=∂x2∂2g+∂y2∂2g⟹∇norm2g=σ2(∂x2∂2g+∂y2∂2g)
Laplcain算子中的 σ \sigma σ与检测对象画出的圆的半径 r r r的关系
为了得到最大响应,Laplacian的零点必须与圆对齐
令:
∇
n
o
r
m
2
g
=
0
即
:
σ
2
(
∂
2
g
∂
x
2
+
∂
2
g
∂
y
2
)
=
0
\nabla_{norm}^2 g=0即:\sigma^2(\frac{\partial^2 g}{\partial x^2}+\frac{\partial^2 g}{\partial y^2})=0
∇norm2g=0即:σ2(∂x2∂2g+∂y2∂2g)=0
化简后:
(
x
2
+
y
2
−
2
σ
2
)
e
−
x
2
+
y
2
2
σ
2
=
0
(x^2+y^2-2\sigma^2)e^{-\frac{x^2+y^2}{2\sigma^2}}=0
(x2+y2−2σ2)e−2σ2x2+y2=0
⇓ \Downarrow ⇓
x
2
+
y
2
−
2
σ
2
=
0
x^2+y^2-2\sigma^2=0
x2+y2−2σ2=0
得到:
r
=
2
σ
r=\sqrt{2}\sigma
r=2σ
特征尺度
将图像的特征尺度r定义为blob中心产生拉普拉斯响应峰值的尺度
示例:
尺度选择过程中将逐步增加参数
σ
\sigma
σ,每个
σ
\sigma
σ逐像素计算最大响应,每相邻取九个像素取响应值最大的像素,再与上下两层不同尺度的最大相应取最大(即在一个3x3x3共27个的响应值中取最大的响应值对应的像素点和尺度值)
SIFT特征
在实际运用过程中,使用Laplacian核可以很好的处理尺度变换的问题,但是需要大量的计算,使用SIFT方法可以简化计算
DoG模板
DoG的函数图像与Laplacian核很相似,具有相似的性质,但使用的时两个高斯差分来定义,大的高斯核可以使用小的高斯核来计算,大大减少了计算量
G ( x , y , k σ ) − G ( x , y , σ ) ≈ ( k − 1 ) σ 2 ∇ 2 G G(x,y,k\sigma)-G(x,y,\sigma)\approx(k-1)\sigma^2\nabla^2G G(x,y,kσ)−G(x,y,σ)≈(k−1)σ2∇2G
- 高斯空间中的模板利用DoG算法直接从前一层的基础上计算,这样就形成一个DoG空间,得到的模板与与高斯空间相差一个常数项 ( k − 1 ) (k-1) (k−1)
- 计算大尺度的模板时不改变参数值,改变图像大小,例如:将图像缩小一倍,不改变模板尺度得到效果和增大模板尺度不改变图像大小的效果相同,计算四倍尺度的值就将图像缩小四倍, 2 σ \sqrt{2}\sigma 2σ的尺度在缩小一倍的图像上的对应尺度为 2 2 σ 2\sqrt{2}\sigma 22σ
- k = 2 1 / s k=2^{1/s} k=21/s: s s s表示要输出的尺度有多少个,利用 s s s来计算 k k k,例如下图是输出尺度为 s = 2 s=2 s=2时的示例,此时 k = 2 k=\sqrt{2} k=2,二倍尺度状态下的起始模板可以由一倍尺度的 k 2 σ = 2 σ k^2\sigma=2\sigma k2σ=2σ下采样得到
- 模板尺度通常取 2 2 2的等比数列 ( 1 , 2 , 4 , 8 , 16 … … ) (1,2,4,8,16……) (1,2,4,8,16……)
SIFT仿射变换
当视角改变时,即使是同一个圆,其中的内容也有很大的差异
使用 M M M矩阵将圆具有自适应性,使结果更具鲁棒特性
-
先确定一个圆
-
将圆内的所有像素拿出来计算 M M M矩阵
-
比较计算出来的 λ 1 , λ 2 \lambda_1,\lambda_2 λ1,λ2
-
将较小的 λ \lambda λ的方向进行缩小
-
再将上一步缩小后的区域(椭圆)内的像素拿出来计算 M M M矩阵
-
重复上述步骤,逐步迭代。直至 λ 1 , λ 2 \lambda_1,\lambda_2 λ1,λ2近似相等,说明区域边缘的梯度变化近似一致
-
将椭圆转换到一样大小的圆中
梯度方向法
通过仿射自适应变换后,内容基本一致,但方向不同,对应的像素差异较大,无法识别。
-
计算圆内每个像素的梯度强度和方向
-
将梯度方向量化成八份,给对应的直方图投票,票数就是梯度的大小
-
统计完之后选择票数最高的方向作为,作为圆内像素整体的梯度方向,将方向转换到 0 ∘ 0^\circ 0∘,将整个圆进行相同的旋转
-
决绝明暗不一致:将圆均分成16格,每个格代表一个区域,统计每个区域的方向量化梯度(两化成八个角度,长度代表梯度大小),每个区域中由一个“8位”向量表示,将16个区域的向量拉直就得到一个 8 × 16 = 128 8\times16=128 8×16=128 的向量来描述这个圆内的内容,最后比较每个圆的128个数来判断两个圆内容的相似程度
总结:SIFT算法 可以解决方向,视角,明暗,位置等常见图像变化的问题
学习资源:北京邮电大学计算机视觉——鲁鹏