DoG算子和LoG算子

DoG(Difference of Gaussian)算子和LoG(Laplacian of Gaussian)算子是常用的極值點檢測(Blob Detection)兩種方法,高斯卷積是爲了進行尺度變換,那麼LapLacian呢。 因此這裏首先引入LapLacian算子。

圖像邊緣檢測

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

因此進行邊緣檢測有兩種方法。

  1. 一階導數的極值

梯度算子定義爲:G(x,y)=xf(x,y)2+yf(x,y2)G ( x , y ) = \sqrt {\nabla_ { x } f ( x , y ) ^ { 2 } + \nabla_ { y } f \left( x , y ^ { 2 } \right) }

爲了簡化計算,一般梯度算子可以寫爲:
G(x,y)=xf(x,y)+yf(x,y)G ( x , y ) = \left|\nabla _ { x } f ( x , y ) \right| + \left| \nabla _ {y } f ( x , y ) \right|

於是得到的一階算子有檢測對角線邊緣的羅伯特算子:
R(x,y)=max{f(x,y)f(x+1,y+1),f(i+1,j)f(i1,j+1)}R ( x , y ) = \max \{ | f ( x , y ) - f ( x + 1 , y + 1 ) | , | f ( i + 1 , j ) - f ( i - 1 , j + 1 ) | \}

對應卷積模板爲:
[0110]\left[ \begin{array} { c c } { 0 } & { 1 } \\ { -1 } & { 0} \end{array} \right]

[1001]\left[ \begin{array} { c c } { 1} & { 0 } \\ { 0 } & { -1} \end{array} \right]

加了高斯平滑的邊緣檢測算子
S(x,y)=f(x+1,y1)+2f(x+1,y)+f(x+1,y+1)f(x1,y1)2f(x1,y)f(x1,y+1)+f(x+1,y+1)+2f(x,y+1)+f(x1,y+1)f(x+1,y1)2f(x,y1)f(x1,y1)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 ) |

對應的卷積模板爲
[101202101]\left[ \begin{array} { c c c} { 1} & { 0 } & { -1 }\\ { 2 } & { 0}& { -2 } \\ { 1} & { 0}& { -1}\end{array} \right]
[121000121]\left[ \begin{array} { c c c} { 1} & { 2 } & { 1 }\\ { 0 } & { 0}& { 0 } \\ { -1} & {-2}& { -1}\end{array} \right]

  1. 二階導數的過零點

二階導數算子實際就是Laplace算子,定義爲兩個方向一階導數的內積,符號表示Δ\Delta
Δ=2=[xy][xy]T=2x2+2y2\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 } }

使用二階差分代替二階函數,則
Δf(x,y)=Δxf(x,y)+Δyf(x,y)=f(x+1,y)f(x,y)f(x,y)+f(x1,y)+f(x,y+1)f(x,y)f(x,y)+f(x,y1)=f(x1,y1)+f(x1,y+1)+f(x+1,y1)+f(x+1,y+1)4f(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}
那麼卷積模板爲:
[010141010]\left[ \begin{array} { c c c } { 0 } & { 1 } & { 0 } \\ { 1 } & { - 4 } & { 1 } \\ { 0 } & { 1 } & { 0 } \end{array} \right]

如果考慮四個方向:
Δf(x,y)=Δxf(x,y)+Δyf(x,y)+Δzyf(x,y)+Δyxf(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 )
那麼卷積模板爲
[111181111]\left[ \begin{array} { c c c } { 1 } & { 1 } & { 1 } \\ { 1 } & { - 8 } & { 1 } \\ { 1 } & { 1 } & { 1 } \end{array} \right]

由於Laplace算子對噪聲很敏感,所以一般利用高通濾波器進行平滑處理,所以引入了高斯拉普拉斯算子(LoG,Laplacian of Gaussian)

高斯拉普拉斯算子(LoG, Laplacian of Gaussian)

對於圖像I(x,y)I(x, y),首先通過尺度爲σ\sigma的高斯平滑
Gσ(x,y)=12πσ2exp(x2+y22σ2)G _ { \sigma } ( x , y ) = \frac { 1 } { \sqrt { 2 \pi \sigma ^ { 2 } } } \exp \left( - \frac { x ^ { 2 } + y ^ { 2 } } { 2 \sigma ^ { 2 } } \right)

在使用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 )

該式證明如下:
ddt2[h(t)f(t)]=ddtf(τ)h(tτ)dτ=f(τ)ddt2h(tτ)dτ=f(t)ddt2h(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}
所以高斯拉普拉斯算子等價於先對高斯函數求二階導,再與原圖進行卷積

將高斯拉普拉斯算子展開:
LoG=ΔGσ(x,y)=2Gσ(x,y)x2+2Gσ(x,y)y2=x2+y22σ2σ4e(x2+y2)/2σ2L 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 } }

高斯函數差分(DoG, Difference of Gaussian of Gaussian)

DoG即對不同尺度下的高斯函數的差分,DoG算子表達如下:
DoG=Gσ1Gσ2=12π[1σ1e(x2+y2)/2σ121σ2e(x2+y2)/2σ22]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]

由於歸一化的LoG算子:
L norm =σ2(Gxx(x,y,σ)+Gyy(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}

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(x,y,kσ)G(x,y,σ)(k1)σ22GG ( x , y , k \sigma ) - G ( x , y , \sigma ) \approx ( k - 1 ) \sigma ^ { 2 } \nabla ^ { 2 } G

即DoG算子和LoG算子具有類似的波形,僅僅是幅度不同,不影響極值點的檢測,而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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章