DoG(Difference of Gaussian)算子和LoG(Laplacian of Gaussian)算子是常用的极值点检测(Blob Detection)两种方法,高斯卷积是为了进行尺度变换,那么LapLacian呢。 因此这里首先引入LapLacian算子。
因此进行边缘检测有两种方法。
梯度算子定义为: G ( x , y ) = ∇ x f ( x , y ) 2 + ∇ y f ( x , y 2 ) G ( x , y ) = \sqrt {\nabla_ { x } f ( x , y ) ^ { 2 } + \nabla_ { y } f \left( x , y ^ { 2 } \right) } G(x,y)=∇xf(x,y)2+∇yf(x,y2)
为了简化计算,一般梯度算子可以写为:
G ( x , y ) = ∣ ∇ x f ( x , y ) ∣ + ∣ ∇ y f ( x , y ) ∣ G ( x , y ) = \left|\nabla _ { x } f ( x , y ) \right| + \left| \nabla _ {y } f ( x , y ) \right| G(x,y)=∣∇xf(x,y)∣+∣∇yf(x,y)∣
于是得到的一阶算子有检测对角线边缘的罗伯特算子:
R ( x , y ) = max { ∣ f ( x , y ) − f ( x + 1 , y + 1 ) ∣ , ∣ f ( i + 1 , j ) − f ( i − 1 , j + 1 ) ∣ } R ( x , y ) = \max \{ | f ( x , y ) - f ( x + 1 , y + 1 ) | , | f ( i + 1 , j ) - f ( i - 1 , j + 1 ) | \} R(x,y)=max{∣f(x,y)−f(x+1,y+1)∣,∣f(i+1,j)−f(i−1,j+1)∣}
对应卷积模板为:
[ 0 1 − 1 0 ] \left[ \begin{array} { c c } { 0 } & { 1 } \\ { -1 } & { 0} \end{array} \right] [0−110]
[ 1 0 0 − 1 ] \left[ \begin{array} { c c } { 1} & { 0 } \\ { 0 } & { -1} \end{array} \right] [100−1]
加了高斯平滑的边缘检测算子
S ( x , y ) = ∣ f ( x + 1 , y − 1 ) + 2 ∗ f ( x + 1 , y ) + f ( x + 1 , y + 1 ) − f ( x − 1 , y − 1 ) − 2 ∗ f ( x − 1 , y ) − f ( x − 1 , y + 1 ) ∣ + ∣ f ( x + 1 , y + 1 ) + 2 ⋅ f ( x , y + 1 ) + f ( x − 1 , y + 1 ) − f ( x + 1 , y − 1 ) − 2 ⋅ f ( x , y − 1 ) − f ( x − 1 , y − 1 ) ∣ S ( x , y ) = | f ( x + 1 , y - 1 ) + 2 * f ( x + 1 , y ) + f ( x + 1 , y + 1 ) - f ( x - 1 , y - 1 ) - 2 * f ( x - 1 , y ) - f ( x - 1 , y + 1 ) |+ | f ( x + 1 , y + 1 ) + 2 \cdot f ( x , y + 1 ) + f ( x - 1 , y + 1 ) - f ( x + 1 , y - 1 ) - 2 \cdot f ( x , y - 1 ) - f ( x - 1 , y - 1 ) | S(x,y)=∣f(x+1,y−1)+2∗f(x+1,y)+f(x+1,y+1)−f(x−1,y−1)−2∗f(x−1,y)−f(x−1,y+1)∣+∣f(x+1,y+1)+2⋅f(x,y+1)+f(x−1,y+1)−f(x+1,y−1)−2⋅f(x,y−1)−f(x−1,y−1)∣
对应的卷积模板为
[ 1 0 − 1 2 0 − 2 1 0 − 1 ] \left[ \begin{array} { c c c} { 1} & { 0 } & { -1 }\\ { 2 } & { 0}& { -2 } \\ { 1} & { 0}& { -1}\end{array} \right] ⎣⎡121000−1−2−1⎦⎤
[ 1 2 1 0 0 0 − 1 − 2 − 1 ] \left[ \begin{array} { c c c} { 1} & { 2 } & { 1 }\\ { 0 } & { 0}& { 0 } \\ { -1} & {-2}& { -1}\end{array} \right] ⎣⎡10−120−210−1⎦⎤
二阶导数算子实际就是Laplace算子,定义为两个方向一阶导数的内积,符号表示 Δ \Delta Δ
Δ = ∇ 2 = [ ∂ ∂ x ∂ ∂ y ] [ ∂ ∂ x ∂ ∂ y ] T = ∂ 2 ∂ x 2 + ∂ 2 ∂ y 2 \Delta = \nabla ^ { 2 } = \left[ \frac { \partial } { \partial x } \frac { \partial } { \partial y } \right] \left[ \frac { \partial } { \partial x } \frac { \partial } { \partial y } \right] ^ { T } = \frac { \partial ^ { 2 } } { \partial x ^ { 2 } } + \frac { \partial ^ { 2 } } { \partial y ^ { 2 } } Δ=∇2=[∂x∂∂y∂][∂x∂∂y∂]T=∂x2∂2+∂y2∂2
使用二阶差分代替二阶函数,则
Δ f ( x , y ) = Δ x f ( x , y ) + Δ y f ( x , y ) = f ( x + 1 , y ) − f ( x , y ) − f ( x , y ) + f ( x − 1 , y ) + f ( x , y + 1 ) − f ( x , y ) − f ( x , y ) + f ( x , y − 1 ) = f ( x − 1 , y − 1 ) + f ( x − 1 , y + 1 ) + f ( x + 1 , y − 1 ) + f ( x + 1 , y + 1 ) − 4 f ( x , y ) \begin{aligned} \Delta f ( x , y ) & = \Delta _ { x } f ( x , y ) +\Delta _ { y } f ( x , y ) \\ & = f ( x + 1 , y ) - f ( x , y ) - f ( x , y ) + f ( x - 1 , y ) \\ & + f ( x , y + 1 ) - f ( x , y ) - f ( x , y ) + f ( x , y - 1 ) \\ & = f ( x - 1 , y - 1 ) + f ( x - 1 , y + 1 ) + f ( x + 1 , y - 1 ) + f ( x + 1 , y + 1 ) - 4 f ( x , y ) \end{aligned} Δf(x,y)=Δxf(x,y)+Δyf(x,y)=f(x+1,y)−f(x,y)−f(x,y)+f(x−1,y)+f(x,y+1)−f(x,y)−f(x,y)+f(x,y−1)=f(x−1,y−1)+f(x−1,y+1)+f(x+1,y−1)+f(x+1,y+1)−4f(x,y)
那么卷积模板为:
[ 0 1 0 1 − 4 1 0 1 0 ] \left[ \begin{array} { c c c } { 0 } & { 1 } & { 0 } \\ { 1 } & { - 4 } & { 1 } \\ { 0 } & { 1 } & { 0 } \end{array} \right] ⎣⎡0101−41010⎦⎤
如果考虑四个方向:
Δ f ( x , y ) = Δ x f ( x , y ) + Δ y f ( x , y ) + Δ z y f ( x , y ) + Δ y x f ( x , y ) \Delta f ( x , y ) =\Delta _ { x } f ( x , y ) +\Delta_ { y } f ( x , y ) +\Delta _ { z y } f ( x , y ) + \Delta _ { y x } f ( x , y ) Δf(x,y)=Δxf(x,y)+Δyf(x,y)+Δzyf(x,y)+Δyxf(x,y)
那么卷积模板为
[ 1 1 1 1 − 8 1 1 1 1 ] \left[ \begin{array} { c c c } { 1 } & { 1 } & { 1 } \\ { 1 } & { - 8 } & { 1 } \\ { 1 } & { 1 } & { 1 } \end{array} \right] ⎣⎡1111−81111⎦⎤
由于Laplace算子对噪声很敏感,所以一般利用高通滤波器进行平滑处理,所以引入了高斯拉普拉斯算子(LoG,Laplacian of Gaussian)
对于图像 I ( x , y ) I(x, y) I(x,y),首先通过尺度为 σ \sigma σ的高斯平滑
G σ ( x , y ) = 1 2 π σ 2 exp ( − x 2 + y 2 2 σ 2 ) G _ { \sigma } ( x , y ) = \frac { 1 } { \sqrt { 2 \pi \sigma ^ { 2 } } } \exp \left( - \frac { x ^ { 2 } + y ^ { 2 } } { 2 \sigma ^ { 2 } } \right) Gσ(x,y)=2πσ21exp(−2σ2x2+y2)
在使用Laplace算子检测边缘
Δ ∣ G σ ( x , y ) ∗ I ( x , y ) ] = [ Δ G σ ( x , y ) ] ∗ I ( x , y ) \Delta| G _ { \sigma } ( x , y ) * I ( x , y ) ] = \left[ \Delta G _ { \sigma } ( x , y ) \right] * I ( x , y ) Δ∣Gσ(x,y)∗I(x,y)]=[ΔGσ(x,y)]∗I(x,y)
该式证明如下:
d d t 2 [ h ( t ) ∗ f ( t ) ] = d d t ∫ f ( τ ) h ( t − τ ) d τ = ∫ f ( τ ) d d t 2 h ( t − τ ) d τ = f ( t ) ∗ d d t 2 h ( t ) \begin{aligned} \frac { d } { d t^2 } [ h ( t ) * f ( t ) ] & = \frac { d } { d t } \int f ( \tau ) h ( t - \tau ) d \tau \\ & = \int f ( \tau ) \frac { d } { d t^2 } h ( t - \tau ) d \tau = f ( t ) * \frac { d } { d t ^2} h ( t ) \end{aligned} dt2d[h(t)∗f(t)]=dtd∫f(τ)h(t−τ)dτ=∫f(τ)dt2dh(t−τ)dτ=f(t)∗dt2dh(t)
所以高斯拉普拉斯算子等价于先对高斯函数求二阶导,再与原图进行卷积
将高斯拉普拉斯算子展开:
L o G = Δ G σ ( x , y ) = ∂ 2 G σ ( x , y ) ∂ x 2 + ∂ 2 G σ ( x , y ) ∂ y 2 = x 2 + y 2 − 2 σ 2 σ 4 e − ( x 2 + y 2 ) / 2 σ 2 L o G = \Delta G _ { \sigma } ( x , y ) = \frac { \partial ^ { 2 } G _ { \sigma } ( x , y ) } { \partial x ^ { 2 } } + \frac { \partial ^ { 2 } G _ { \sigma } ( x , y ) } { \partial y ^ { 2 } } = \frac { x ^ { 2 } + y ^ { 2 } - 2 \sigma ^ { 2 } } { \sigma ^ { 4 } } e ^ { - \left( x ^ { 2 } + y ^ { 2 } \right) / 2 \sigma ^ { 2 } } LoG=ΔGσ(x,y)=∂x2∂2Gσ(x,y)+∂y2∂2Gσ(x,y)=σ4x2+y2−2σ2e−(x2+y2)/2σ2
DoG即对不同尺度下的高斯函数的差分,DoG算子表达如下:
D o G = G σ 1 − G σ 2 = 1 2 π [ 1 σ 1 e − ( x 2 + y 2 ) / 2 σ 1 2 − 1 σ 2 e − ( x 2 + y 2 ) / 2 σ 2 2 ] D o G = G _ { \sigma _ { 1 } } - G _ { \sigma _ { 2 } } = \frac { 1 } { \sqrt { 2 \pi } } \left[ \frac { 1 } { \sigma _ { 1 } } e ^ { - \left( x ^ { 2 } + y ^ { 2 } \right) / 2 \sigma _ { 1 } ^ { 2 } } - \frac { 1 } { \sigma _ { 2 } } e ^ { - \left( x ^ { 2 } + y ^ { 2 } \right) / 2 \sigma _ { 2 } ^ { 2 } } \right] DoG=Gσ1−Gσ2=2π1[σ11e−(x2+y2)/2σ12−σ21e−(x2+y2)/2σ22]
由于归一化的LoG算子:
L norm = σ 2 ( G x x ( x , y , σ ) + G y y ( x , y , σ ) ) = σ ∂ G ∂ σ \begin{aligned} L _ { \text { norm } } & = \sigma ^ { 2 } \left( G _ { x x } ( x , y , \sigma ) + G _ { y y } ( x , y , \sigma ) \right) \\ & = \sigma \frac { \partial G } { \partial \sigma } \end{aligned} L norm =σ2(Gxx(x,y,σ)+Gyy(x,y,σ))=σ∂σ∂G
而 ∂ G ∂ σ ≈ G ( x , y , k σ ) − G ( x , y , σ ) k σ − σ \frac { \partial G } { \partial \sigma } \approx \frac { G ( x , y , k \sigma ) - G ( x , y , \sigma ) } { k \sigma - \sigma } ∂σ∂G≈kσ−σ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 ) \sigma ^ { 2 } \nabla ^ { 2 } G G(x,y,kσ)−G(x,y,σ)≈(k−1)σ2∇2G
即DoG算子和LoG算子具有类似的波形,仅仅是幅度不同,不影响极值点的检测,而DoG算子的计算复杂度显然低于LoG,因此一般使用DoG代替LoG算子
边缘检测:图像边缘在LoG算子下的响应情况如下图所示,二阶微分算子在边缘处为一过零点(由于图像是离散的,也可能不是零点附近),而且过零点两边的最大值(正)和最小值(负)的差值较大。
极值点检测:随着矩形宽度的减小,响应变化如下。
通过不同尺度的高斯滤波器,可以检测不同大小的Blob。这里解释一下斑点通常和关键点(keypoint),兴趣点(intrestpoint)以及特征点(featurepoint)表示同一个概念,通常指与周围有着颜色和灰度区别的区域。
https://senitco.github.io/2017/06/20/image-feature-LoG-DoG/
https://www.cnblogs.com/YiXiaoZhou/p/5891645.html