DoG(Difference of Gaussian)算子和LoG(Laplacian of Gaussian)算子是常用的極值點檢測(Blob Detection)兩種方法,高斯卷積是爲了進行尺度變換,那麼LapLacian呢。 因此這裏首先引入LapLacian算子。
圖像邊緣檢測
因此進行邊緣檢測有兩種方法。
- 一階導數的極值
梯度算子定義爲:G(x,y)=∇xf(x,y)2+∇yf(x,y2)
爲了簡化計算,一般梯度算子可以寫爲:
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)∣}
對應卷積模板爲:
[0−110]
[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)∣
對應的卷積模板爲
⎣⎡121000−1−2−1⎦⎤
⎣⎡10−120−210−1⎦⎤
- 二階導數的過零點
二階導數算子實際就是Laplace算子,定義爲兩個方向一階導數的內積,符號表示Δ
Δ=∇2=[∂x∂∂y∂][∂x∂∂y∂]T=∂x2∂2+∂y2∂2
使用二階差分代替二階函數,則
Δ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)
那麼卷積模板爲:
⎣⎡0101−41010⎦⎤
如果考慮四個方向:
Δf(x,y)=Δxf(x,y)+Δyf(x,y)+Δzyf(x,y)+Δyxf(x,y)
那麼卷積模板爲
⎣⎡1111−81111⎦⎤
由於Laplace算子對噪聲很敏感,所以一般利用高通濾波器進行平滑處理,所以引入了高斯拉普拉斯算子(LoG,Laplacian of Gaussian)
高斯拉普拉斯算子(LoG, Laplacian of Gaussian)
對於圖像I(x,y),首先通過尺度爲σ的高斯平滑
Gσ(x,y)=2πσ21exp(−2σ2x2+y2)
在使用Laplace算子檢測邊緣
Δ∣Gσ(x,y)∗I(x,y)]=[ΔGσ(x,y)]∗I(x,y)
該式證明如下:
dt2d[h(t)∗f(t)]=dtd∫f(τ)h(t−τ)dτ=∫f(τ)dt2dh(t−τ)dτ=f(t)∗dt2dh(t)
所以高斯拉普拉斯算子等價於先對高斯函數求二階導,再與原圖進行卷積
將高斯拉普拉斯算子展開:
LoG=ΔGσ(x,y)=∂x2∂2Gσ(x,y)+∂y2∂2Gσ(x,y)=σ4x2+y2−2σ2e−(x2+y2)/2σ2
高斯函數差分(DoG, Difference of Gaussian of Gaussian)
DoG即對不同尺度下的高斯函數的差分,DoG算子表達如下:
DoG=Gσ1−Gσ2=2π1[σ11e−(x2+y2)/2σ12−σ21e−(x2+y2)/2σ22]
由於歸一化的LoG算子:
L norm =σ2(Gxx(x,y,σ)+Gyy(x,y,σ))=σ∂σ∂G
而∂σ∂G≈kσ−σG(x,y,kσ)−G(x,y,σ)
所以: G(x,y,kσ)−G(x,y,σ)≈(k−1)σ2∇2G
即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