斑点检测(LoG,DoG)(下)
Posted 一只有恒心的小菜鸟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了斑点检测(LoG,DoG)(下)相关的知识,希望对你有一定的参考价值。
斑点检测(LoG,DoG)(下)
上篇文章斑点检测(LoG,DoG)(上)介绍了基于二阶导数过零点的边缘检测方法,现在我们要探讨的是斑点检测。在边缘检测中,寻找的是二阶导数的零点,可是在斑点检测中寻找的是极值点,这是为什么呢?而且在使用二阶导数寻找斑点时不仅在图像上寻找极值点,还要求在尺度空间上也是极值点,又是为什么呢?还有为什么DoG是LoG的简化版本呢??
这篇文章主要内容就是回答这三个问题。
From edges to blobs
对于阶跃信号,其二阶导数在对应跃变得位置会产生一个波,该波的过零点正对应着待检测的边缘位置。
而所谓的斑点区域就是两条边形成的中间区域,如下图中,对于蓝色的目标区域,红色的椭圆就是在检测边缘,黑色的椭圆就是在检测斑点区域。
那么边缘检测到斑点检测的过程对二阶导数有什么影响呢?
这个示意图中上一行从左到右表示的是原始矩形脉冲信号,脉冲信号的周期越来越短,而下一行则表示对应周期在相同尺度下的LoG结果。可以发现总的LoG曲线其实是两条边界上产生的LoG函数的叠加,当两条边界足够小时,在该尺度脉冲下就被作为了blob,这时候LoG曲线的极值就对应着blob的中心。
所以边缘检测对应的是LoG的过零点,而斑点检测对应的是LoG的极值点。
这里我们可以发现判断是不是blob时,尺度非常重要,只有尺度大于一定值得时候blob才可以通过LoG的极值判定。
那么尺度该如何选择呢?
尺度的选择
先来看看同一个阶跃信号在不同尺度下的响应
可以发现随着尺度的不断增大,LoG曲线由双波谷逐渐融合成单波谷,但是响应的幅值越来越弱。这是因为,随着尺度的增大,LoG算子的最大幅度逐渐减小,导致响应也随着尺度的增大而减小。
这种情况我们没法知道选定的尺度是否合适,进而不知道这个尺度下找到的极值点是不是对应着blob的中心点,万一是边缘产生波的极值点怎么办!所以我们这时候应该对进行LoG算在进行尺度的归一化。
下图给出了阶跃信号的一阶Gaussian滤波曲线
可以发现对于稳定信号,响应的最大幅值是和成正比的,那么为了消除尺度的影响,可以对一阶高斯滤波算子乘上个,那么对于不同的尺度,其响应的强度就是相同的了。这里可以这么理解,在0点处积分结果为
是的函数表示与尺度有关,乘上一个之后就与尺度无关了,称为尺度的归一化。
而LoG算子是Gaussian 滤波的二阶导数,所以应该乘上个做尺度归一化。
再来看看矩形脉冲在不同尺度经过尺度归一化后的响应
可以发现当尺度等于脉冲宽度的一半的时候,不仅极值对应着blob的中心位置,而且这时候的响应强度比其他尺度响应强度都强。
那么我们在检测blob时就可以使用不同的尺度计算HoG响应,选择产生最强响应的尺度,在该尺度上对应的极值就是blob的中心位置了。
对于不同尺寸的blob,理想的尺度应该是多少呢?
理论表明,对于一个圆形blob,当二维LoG算子的零点值曲线和目标圆形边缘重合时取得最强响应。
下图是LoG剖面示意
所以由LoG算子的目标式可得最优尺寸为.
在使用LoG算子进行Blob检测时,首先在不同尺寸上对图像进行LoG,然后检测在尺度空间和图像空间都是极值的点,就是blob区域的中心点。
LoG to DoG
为什么DoG可以近似LoG使用呢?
先来看看归一化之后的LoG算子(该过程将高斯函数带入化简可得)
而高斯差分算子
所以
因为k-1是常量不影响函数极值点,所以检测归一化的LoG在尺度空间的极值,即近似于检测DoG空间的极值。
DoG进行Blob检测流程
首先使用不同尺度的高斯算子对图像进行平滑
其次计算相邻尺度下平滑图像的差分图像(DoG空间)
最后在DoG空间寻找极值点
以上是关于斑点检测(LoG,DoG)(下)的主要内容,如果未能解决你的问题,请参考以下文章
youcans 的 OpenCV 例程200篇153. 边缘检测之 DoG 算子