原文站点: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)=∂2f∂x2+∂2f∂y2
由于微分运算对噪声比较敏感,可以先对图像进行高斯平滑滤波,再使用Laplace算子进行边缘检测,以降低噪声的影响。由此便形成了用于极值点检测的LoG算子。常用的二维高斯函数如下:
Gσ(x,y)=12πσ2−−−−√exp(−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+y2−2σ2σ4e−(x2+y2)/2σ2
所以先对高斯核函数求取二阶导数,再与原图像进行卷积操作。由于高斯函数是圆对称的,因此LoG算子可以有效地实现极值点或局部极值区域的检测。
Difference of Gaussian(DoG)
DoG算子是高斯函数的差分,具体到图像中,就是将图像在不同参数下的高斯滤波结果相减,得到差分图。DoG算子的表达式如下:
DoG=Gσ1−Gσ2=12π−−√[1σ1e−(x2+y2)/2σ21−1σ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,σ)≈(k−1)σ2∇2G
其中
k−1 是个常数,不影响极值点的检测,LoG算子和DoG算子的函数波形对比如下图所示,由于高斯差分的计算更加简单,因此可用DoG算子近似替代LoG算子
边缘检测(Edge Detection)和极值点检测(Blob Detection)
LoG算子和DoG算子既可以用于检测图像边缘,也可用于检测局部极值点或极值区域,图像边缘在LoG算子下的响应情况如下图所示,二阶微分算子在边缘处为一过零点,而且过零点两边的最大值(正)和最小值(负)的差值较大。
接下来观察下图,由边缘过渡到极值点,LoG算子的响应变化
LoG算子在极值点(Blob)处的响应如下图所示:
通过定义不同尺寸的高斯核函数,可以实现在不同尺度检测Blob,如下图所示
算法流程
- 对原图像进行LoG或者DoG卷积操作
- 检测卷积后图像中的过零点(边缘)或者极值点(Blob)
- 如果是检测边缘,则对过零点进行阈值化(过零点两边的最大值和最小值之间的差值要大于某个阈值);如果是检测极值点,则极值点的LoG或DoG响应值应该大于某个阈值。
reference
- http://fourier.eng.hmc.edu/e161/lectures/gradient/node8.html
- http://fourier.eng.hmc.edu/e161/lectures/gradient/node9.html
- http://blog.csdn.net/songzitea/article/details/12851079
- http://blog.csdn.net/kezunhai/article/details/11579785