DoG算子和LoG算子

DoG(Difference of Gaussian)算子和LoG(Laplacian of Gaussian)算子是常用的极值点检测(Blob Detection)两种方法,高斯卷积是为了进行尺度变换,那么LapLacian呢。 因此这里首先引入LapLacian算子。

图像边缘检测

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

因此进行边缘检测有两种方法。

  1. 一阶导数的极值

梯度算子定义为: 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(i1,j+1)}

对应卷积模板为:
[ 0 1 − 1 0 ] \left[ \begin{array} { c c } { 0 } & { 1 } \\ { -1 } & { 0} \end{array} \right] [0110]

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

加了高斯平滑的边缘检测算子
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,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)

对应的卷积模板为
[ 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] 121000121
[ 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] 101202101

  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=[xy][xy]T=x22+y22

使用二阶差分代替二阶函数,则
Δ 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(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)
那么卷积模板为:
[ 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] 010141010

如果考虑四个方向:
Δ 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] 111181111

由于Laplace算子对噪声很敏感,所以一般利用高通滤波器进行平滑处理,所以引入了高斯拉普拉斯算子(LoG,Laplacian of Gaussian)

高斯拉普拉斯算子(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πσ2 1exp(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)]=dtdf(τ)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)=x22Gσ(x,y)+y22Gσ(x,y)=σ4x2+y22σ2e(x2+y2)/2σ2

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

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σ1Gσ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 } σGkσσ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,σ)(k1)σ22G

即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

  • 8
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值