图像特征之LoG算子与DoG算子

原文站点:https://senitco.github.io/2017/06/20/image-feature-LoG-DoG/

  LoG(Laplacian of Gaussian)算子和DoG(Difference of Gaussian)算子是图像处理中实现极值点检测(Blob Detection)的两种方法。通过利用高斯函数卷积操作进行尺度变换,可以在不同的尺度空间检测到关键点(Key Point)或兴趣点(Interest Point),实现尺度不变性(Scale invariance)的特征点检测。

Laplacian of Gaussian(LoG)

  Laplace算子通过对图像求取二阶导数的零交叉点(zero-cross)来进行边缘检测,其计算公式如下:

2f(x,y)=2fx2+2fy2

由于微分运算对噪声比较敏感,可以先对图像进行高斯平滑滤波,再使用Laplace算子进行边缘检测,以降低噪声的影响。由此便形成了用于极值点检测的LoG算子。常用的二维高斯函数如下:
Gσ(x,y)=12πσ2exp(x2+y22σ2)

原图像与高斯核函数卷积后再做laplace运算
Δ[Gσ(x,y)f(x,y)]=[ΔGσ(x,y)]f(x,y)

LoG=ΔGσ(x,y)=2Gσ(x,y)x2+2Gσ(x,y)y2=x2+y22σ2σ4e(x2+y2)/2σ2

所以先对高斯核函数求取二阶导数,再与原图像进行卷积操作。由于高斯函数是圆对称的,因此LoG算子可以有效地实现极值点或局部极值区域的检测。

Difference of Gaussian(DoG)

  DoG算子是高斯函数的差分,具体到图像中,就是将图像在不同参数下的高斯滤波结果相减,得到差分图。DoG算子的表达式如下:

DoG=Gσ1Gσ2=12π[1σ1e(x2+y2)/2σ211σ2e(x2+y2)/2σ22]

如果将高斯核函数的形式表示为
Gσ(x,y)=12πσ2exp(x2+y22σ2)

则存在以下等式
Gσ=σ2G

GσG(x,y,kσ)G(x,y,σ)kσσ

因此有
G(x,y,kσ)G(x,y,σ)(k1)σ22G

其中k1是个常数,不影响极值点的检测,LoG算子和DoG算子的函数波形对比如下图所示,由于高斯差分的计算更加简单,因此可用DoG算子近似替代LoG算子


图像特征之LoG算子与DoG算子

边缘检测(Edge Detection)和极值点检测(Blob Detection)

  LoG算子和DoG算子既可以用于检测图像边缘,也可用于检测局部极值点或极值区域,图像边缘在LoG算子下的响应情况如下图所示,二阶微分算子在边缘处为一过零点,而且过零点两边的最大值(正)和最小值(负)的差值较大。


图像特征之LoG算子与DoG算子

接下来观察下图,由边缘过渡到极值点,LoG算子的响应变化


图像特征之LoG算子与DoG算子

LoG算子在极值点(Blob)处的响应如下图所示:


图像特征之LoG算子与DoG算子

通过定义不同尺寸的高斯核函数,可以实现在不同尺度检测Blob,如下图所示


图像特征之LoG算子与DoG算子

算法流程

  • 对原图像进行LoG或者DoG卷积操作
  • 检测卷积后图像中的过零点(边缘)或者极值点(Blob)
  • 如果是检测边缘,则对过零点进行阈值化(过零点两边的最大值和最小值之间的差值要大于某个阈值);如果是检测极值点,则极值点的LoG或DoG响应值应该大于某个阈值。

reference