1. 推导动机
\qquad 在学习图像尺度不变特征点检测的过程中(sift算法),我们总是习惯用DoG算子来替代LoG算子计算图像尺度不变特征点以提高运行效率,很多讲解blog都提到这一点,但很少有博主对两者为何可以相互替代进行完整严谨的数学推导,当然这个结论是对的,但是在学习的过程中,我们总想做到知其然并知其所以然,本篇blog将对两个算子进行详细地讲解,并数学推导出二者之间的关系。
2. 高斯核函数
\qquad 在进行LoG算子介绍前,我们首先对高斯核函数进行介绍,我们知道一般的一维高斯函数可定义成如下形式: f ( x ) = a e − ( x − b ) 2 2 c 2 f(x)=ae^{-{(x-b)^2 \over 2c^2}} f(x)=ae−2c2(x−b)2令 b = 0 , c = σ b=0,c=\sigma b=0,c=σ,则 f ( x ) f(x) f(x)变形为 f ( x ) = a e − x 2 2 σ 2 f(x)=ae^{-{x^2 \over 2\sigma^2}} f(x)=ae−2σ2x2将该函数在 ( − ∞ , + ∞ ) (-\infty,+\infty) (−∞,+∞)区间内积分得(具体积分过程请参考《高等数学》) ∫ − ∞ + ∞ f ( x ) = 2 π ∣ σ ∣ a \displaystyle \int _{-\infty}^{+\infty} f(x)={\sqrt{2\pi} |\sigma|}a ∫−∞+∞f(x)=2π∣σ∣a而高斯函数用于给数据不均匀加权时,我们希望所有权重之和为1,即 ∫ − ∞ + ∞ f ( x ) d x = 2 π ∣ σ ∣ a = 1 \displaystyle \int _{-\infty}^{+\infty} f(x)dx={\sqrt{2\pi} |\sigma|}a=1 ∫−∞+∞f(x)dx=2π∣σ∣a=1,从而我们得出 2 π ∣ σ ∣ a = 1 , a = 1 2 π ∣ σ ∣ {\sqrt{2\pi} |\sigma|}a=1,a= {1 \over{\sqrt{2\pi} |\sigma|}} 2π∣σ∣a=1,a=2π∣σ∣1即归一化的高斯核函数为 f ( x ) = 1 2 π ∣ σ ∣ e − x 2 2 σ 2 f(x)= {1 \over {\sqrt{2\pi} |\sigma|}}e^{-{x^2 \over 2\sigma^2}} f(x)=2π∣σ∣1e−2σ2x2当我们希望用高斯函数进行图像模糊处理时,很显然一维高斯核函数并不能满足我们的需求,我们需要对一维高斯核函数进行拓展,获得二维高斯核函数,定义归一化二维高斯核函数为: g ( x , y ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 g(x,y)= {1 \over {2\pi\sigma^2 }}e^{-{x^2+y^2 \over 2\sigma^2}} g(x,y)=2πσ21e−2σ2x2+y2该函数在 x ∈ ( − ∞ , + − ∞ ) , y ∈ ( − ∞ , + − ∞ ) x\in(-\infty,+-\infty),y\in (-\infty,+-\infty) x∈(−∞,+−∞),y∈(−∞,+−∞)上进行积分得 ∬ D g ( x , y ) d x d y = ∫ − ∞ + ∞ 1 2 π ∣ σ ∣ e − x 2 2 σ 2 d x ∫ − ∞ + ∞ 1 2 π ∣ σ ∣ e − y 2 2 σ 2 d y = 1 \displaystyle \iint _Dg(x,y)dxdy= \displaystyle \int _{-\infty}^{+\infty}{1 \over {\sqrt{2\pi} |\sigma|}}e^{-{x^2 \over 2\sigma^2}}dx\displaystyle \int _{-\infty}^{+\infty}{1 \over {\sqrt{2\pi} |\sigma|}}e^{-{y^2 \over 2\sigma^2}}dy=1 ∬Dg(x,y)dxdy=∫−∞+∞2π∣σ∣1e−2σ2x2dx∫−∞+∞2π∣σ∣1e−2σ2y2dy=1 \qquad 图像去噪过程中,我们经常使用均值进行图像滤波,对像素点x邻域内的所有像素的像素值相加除以像素的数量获得该点x的最终像素值达到去除噪声的目的,此时邻域内所有像素点的权重是一样的,即邻域内每一个像素点对该x点的影响是相同的,显然这样的滤波并不科学,我们更希望离该点x近的像素对该点影响大,离该点远的像素点对该点影响小,此时用高斯核函数与图像进行卷积可达到该效果。
3. LoG算子
\qquad
图像中的边缘,角点,拐点都可以称之为图像的特征点,那么如何求出这些点的位置呢,Laplacian算子利用求图像的二阶微分极值点来获得图像的边缘,二阶微分定义如下:
Δ
=
∇
2
=
∂
2
∂
x
2
+
∂
2
∂
y
2
\Delta=\nabla^2={\partial^2\over \partial x^2}+{\partial^2\over \partial y^2}
Δ=∇2=∂x2∂2+∂y2∂2
\qquad
但是由于laplacian算子对噪声敏感,因此我们首先利用二维高斯核函数对图像进行模糊去噪,然后求二阶微分极值点来获得图像中边缘位置,得
I
′
(
x
,
y
)
=
g
(
x
,
y
)
∗
I
(
x
,
y
)
=
∬
D
g
(
x
−
u
,
y
−
v
)
I
(
u
,
v
)
d
u
d
v
I'(x,y)=g(x,y)*I(x,y)=\displaystyle \iint _Dg(x-u,y-v)I(u,v)dudv
I′(x,y)=g(x,y)∗I(x,y)=∬Dg(x−u,y−v)I(u,v)dudv
Δ
∣
I
′
(
x
,
y
)
∣
=
Δ
∣
g
(
x
,
y
)
∗
I
(
x
,
y
)
∣
=
∂
2
∬
D
g
(
x
−
u
,
y
−
v
)
I
(
u
,
v
)
d
u
d
v
∂
x
2
+
∂
2
∬
D
g
(
x
−
u
,
y
−
v
)
I
(
u
,
v
)
d
u
d
v
∂
y
2
\Delta |I'(x,y)|=\Delta |g(x,y)*I(x,y)|={\partial^2\displaystyle \iint _Dg(x-u,y-v)I(u,v)dudv\over \partial x^2}+{\partial^2\displaystyle \iint _Dg(x-u,y-v)I(u,v)dudv\over \partial y^2}
Δ∣I′(x,y)∣=Δ∣g(x,y)∗I(x,y)∣=∂x2∂2∬Dg(x−u,y−v)I(u,v)dudv+∂y2∂2∬Dg(x−u,y−v)I(u,v)dudv
Δ
∣
I
′
(
x
,
y
)
∣
=
∬
D
∂
2
g
(
x
−
u
,
y
−
v
)
∂
x
2
I
(
u
,
v
)
d
u
d
v
+
∬
D
∂
2
g
(
x
−
u
,
y
−
v
)
∂
y
2
I
(
u
,
v
)
d
u
d
v
\Delta |I'(x,y)|=\displaystyle \iint _D{\partial^2g(x-u,y-v)\over \partial x^2}I(u,v)dudv+\displaystyle \iint _D{\partial^2g(x-u,y-v)\over \partial y^2}I(u,v)dudv
Δ∣I′(x,y)∣=∬D∂x2∂2g(x−u,y−v)I(u,v)dudv+∬D∂y2∂2g(x−u,y−v)I(u,v)dudv
Δ
∣
I
′
(
x
,
y
)
∣
=
∂
2
g
(
x
,
y
)
∂
x
2
∗
I
(
x
,
y
)
+
∂
2
g
(
x
,
y
)
∂
y
2
∗
I
(
x
,
y
)
\Delta |I'(x,y)|={\partial^2g(x,y)\over \partial x^2}*I(x,y)+{\partial^2g(x,y)\over \partial y^2}*I(x,y)
Δ∣I′(x,y)∣=∂x2∂2g(x,y)∗I(x,y)+∂y2∂2g(x,y)∗I(x,y)根据卷积结合律得,
Δ
∣
I
′
(
x
,
y
)
∣
=
(
∂
2
g
(
x
,
y
)
∂
x
2
+
∂
2
g
(
x
,
y
)
∂
y
2
)
∗
I
(
x
,
y
)
(
1
)
\Delta |I'(x,y)|=({\partial^2g(x,y)\over \partial x^2}+{\partial^2g(x,y)\over \partial y^2})*I(x,y) \qquad(1)
Δ∣I′(x,y)∣=(∂x2∂2g(x,y)+∂y2∂2g(x,y))∗I(x,y)(1)
\qquad
由(1)式可知,对图像进行高斯核函数卷积再求二阶微分等价于对高斯核函数先求二阶微分核后再用该核与图像进行卷积。我们定义LoG算子为二阶微分后的高斯核函数
L
o
G
=
Δ
∣
g
(
x
,
y
)
∣
=
∂
2
g
(
x
,
y
)
∂
x
2
+
∂
2
g
(
x
,
y
)
∂
y
2
(
2
)
LoG=\Delta|g(x,y)|={\partial^2g(x,y)\over \partial x^2}+{\partial^2g(x,y)\over \partial y^2} \qquad(2)
LoG=Δ∣g(x,y)∣=∂x2∂2g(x,y)+∂y2∂2g(x,y)(2)
=
∂
2
(
1
2
π
σ
2
e
−
x
2
+
y
2
2
σ
2
)
∂
x
2
+
∂
2
(
1
2
π
σ
2
e
−
x
2
+
y
2
2
σ
2
)
∂
y
2
={\partial^2({1 \over {2\pi\sigma^2 }}e^{-{x^2+y^2 \over 2\sigma^2}})\over \partial x^2}+{\partial^2({1 \over {2\pi\sigma^2 }}e^{-{x^2+y^2 \over 2\sigma^2}})\over \partial y^2}
=∂x2∂2(2πσ21e−2σ2x2+y2)+∂y2∂2(2πσ21e−2σ2x2+y2)
=
(
x
2
σ
4
−
1
σ
2
)
1
2
π
σ
2
e
−
x
2
+
y
2
2
σ
2
+
(
y
2
σ
4
−
1
σ
2
)
1
2
π
σ
2
e
−
x
2
+
y
2
2
σ
2
=({x^2 \over \sigma^4}-{1\over \sigma^2}){1 \over {2\pi\sigma^2 }}e^{-{x^2+y^2 \over 2\sigma^2}} +({y^2 \over \sigma^4}-{1\over \sigma^2}){1 \over {2\pi\sigma^2 }}e^{-{x^2+y^2 \over 2\sigma^2}}
=(σ4x2−σ21)2πσ21e−2σ2x2+y2+(σ4y2−σ21)2πσ21e−2σ2x2+y2
=
(
x
2
+
y
2
σ
4
−
2
σ
2
)
1
2
π
σ
2
e
−
x
2
+
y
2
2
σ
2
(
3
)
=({x^2+y^2 \over \sigma^4}-{2\over \sigma^2}){1 \over {2\pi\sigma^2 }}e^{-{x^2+y^2 \over 2\sigma^2}} \qquad (3)
=(σ4x2+y2−σ22)2πσ21e−2σ2x2+y2(3)
\qquad
我们知道归一化二维高斯核
g
(
x
,
y
)
=
1
2
π
σ
2
e
−
x
2
+
y
2
2
σ
2
g(x,y)= {1 \over {2\pi\sigma^2 }}e^{-{x^2+y^2 \over 2\sigma^2}}
g(x,y)=2πσ21e−2σ2x2+y2该函数对
σ
\sigma
σ进行求导得
∂
g
(
x
,
y
)
∂
σ
=
∂
(
1
2
π
σ
2
e
−
x
2
+
y
2
2
σ
2
)
∂
σ
{\partial g(x,y)\over \partial \sigma}= {\partial({1 \over {2\pi\sigma^2 }}e^{-{x^2+y^2 \over 2\sigma^2}})\over \partial \sigma}
∂σ∂g(x,y)=∂σ∂(2πσ21e−2σ2x2+y2)
=
1
2
π
σ
2
e
−
x
2
+
y
2
2
σ
2
x
2
+
y
2
σ
3
+
−
2
2
π
σ
3
e
−
x
2
+
y
2
2
σ
2
= {1 \over {2\pi\sigma^2 }}e^{-{x^2+y^2 \over 2\sigma^2}}{x^2+y^2 \over \sigma^3}+ {-2 \over {2\pi\sigma^3 }}e^{-{x^2+y^2 \over 2\sigma^2}}
=2πσ21e−2σ2x2+y2σ3x2+y2+2πσ3−2e−2σ2x2+y2
=
1
2
π
σ
2
e
−
x
2
+
y
2
2
σ
2
(
x
2
+
y
2
σ
3
−
2
σ
)
(
4
)
= {1 \over {2\pi\sigma^2 }}e^{-{x^2+y^2 \over 2\sigma^2}}({x^2+y^2 \over \sigma^3}- {2 \over {\sigma }})\qquad (4)
=2πσ21e−2σ2x2+y2(σ3x2+y2−σ2)(4)观察(3)式与(4)式,我们发现其在结果上只相差一个常数
σ
\sigma
σ即,
σ
L
o
G
=
∂
g
∂
σ
(
5
)
\sigma LoG={\partial g\over \partial \sigma}\qquad (5)
σLoG=∂σ∂g(5)
4.DoG算子
二维高斯核函数的定义为
g
(
x
,
y
)
=
1
2
π
σ
2
e
−
x
2
+
y
2
2
σ
2
g(x,y)= {1 \over {2\pi\sigma^2 }}e^{-{x^2+y^2 \over 2\sigma^2}}
g(x,y)=2πσ21e−2σ2x2+y2显然,其也是关于
σ
\sigma
σ的函数,正如我们前面对其关于
σ
\sigma
σ求导一样,因此我们将其写成如下形式:
g
(
x
,
y
,
σ
)
=
1
2
π
σ
2
e
−
x
2
+
y
2
2
σ
2
g(x,y,\sigma)= {1 \over {2\pi\sigma^2 }}e^{-{x^2+y^2 \over 2\sigma^2}}
g(x,y,σ)=2πσ21e−2σ2x2+y2此时,我们给出DoG算子的定义公式为:
D
o
G
=
g
(
x
,
y
,
k
σ
)
−
g
(
x
,
y
,
σ
)
DoG=g(x,y,k\sigma)-g(x,y,\sigma)
DoG=g(x,y,kσ)−g(x,y,σ)下图为函数导数的定义
由导数的定义我们可以得到如下结果
∂
g
(
x
,
y
,
σ
)
∂
σ
=
lim
k
→
1
g
(
x
,
y
,
k
σ
)
−
g
(
x
,
y
,
σ
)
k
σ
−
σ
{\partial g(x,y,\sigma)\over \partial \sigma}=\lim_{k \to 1}{g(x,y,k\sigma)-g(x,y,\sigma)\over k\sigma-\sigma}
∂σ∂g(x,y,σ)=k→1limkσ−σg(x,y,kσ)−g(x,y,σ)故而对于给定的常数
k
k
k,我们有如下近似
∂
g
(
x
,
y
,
σ
)
∂
σ
≈
g
(
x
,
y
,
k
σ
)
−
g
(
x
,
y
,
σ
)
k
σ
−
σ
{\partial g(x,y,\sigma)\over \partial \sigma}\approx{g(x,y,k\sigma)-g(x,y,\sigma)\over k\sigma-\sigma}
∂σ∂g(x,y,σ)≈kσ−σg(x,y,kσ)−g(x,y,σ)而由(5)式可知
σ
L
o
G
≈
g
(
x
,
y
,
k
σ
)
−
g
(
x
,
y
,
σ
)
k
σ
−
σ
\sigma LoG\approx{g(x,y,k\sigma)-g(x,y,\sigma)\over k\sigma-\sigma}
σLoG≈kσ−σg(x,y,kσ)−g(x,y,σ)
σ
2
(
k
−
1
)
L
o
G
≈
D
o
G
\sigma^2(k-1) LoG\approx DoG
σ2(k−1)LoG≈DoG故而我们得出结论:LoG算子与DoG算子的形状相似,只在数值上相差常数
σ
2
(
k
−
1
)
\sigma^2(k-1)
σ2(k−1),而DoG算子的运行速度远远快于LoG算子,故而可以用DoG算子替代LoG算子求取图像的边缘信息。
以上