检测噪声图像中的弱斑点

时间:2017-02-21 11:47:29

标签: image opencv image-processing computer-vision feature-detection

我有一个可能包含一些blob的图像。斑点可以是任何大小,有些会产生非常强烈的信号,而有些则非常弱。在这个问题中,我将重点关注弱者,因为他们很难被发现。

以下是4个blob的示例。

enter image description here

(480,180)的斑点是最难检测到的斑点。通过运行高斯滤波器然后进行打开操作可以稍微增加对比度,但不是很多:

enter image description here

这个问题的棘手部分是背景中的自然噪声会产生(许多)像素,这些像素的信号比我想要检测的斑点更强。使斑点成为斑点的原因在于它是一个平均强度增加的大区域(或者强度增加非常强烈的小区域(这里不相关))。

如何包含此空间信息以检测我的blob?

显然,我首先需要使用高斯和/或中值滤波器对图像进行滤波,以便将每个像素的附近区域合并到每个单个像素值中。但是,没有足够的模糊量可以很容易地从背景中分割斑点。

编辑:关于阈值处理:阈值处理非常有诱惑力,但本身也存在问题。我没有一个“纯背景”区域,斑点越大,信号越弱 - 仍然可以检测到。

我也不应该认为典型的图像根本不会有任何斑点,而只是纯粹的背景。

3 个答案:

答案 0 :(得分:1)

您可以尝试h-minima变换。它会移除h高度下的任何最小值,并将所有其他穿孔的高度增加h。它被定义为由高度h增加的侵蚀的形态重建。这是h = 35的结果:

after h-minima transform

操作起来应该容易得多。它还需要像分段这样的输入。不同之处在于它更加强大。低估数量h会使你更接近原始问题图像而不是完全失败。

您可以尝试描述背景噪音以获得估算值,假设您的应用程序具有相对恒定的数量。

注意两个大底部斑点之间有一个蓝点。甚至需要进一步处理。你可以尝试继续形态学。我发现在某些“墨水印迹”中工作的东西。像这样的分割案例贯穿每个连接的组件,计算它们的凸包,最后计算图像中所有凸包的并集。它通常使得进一步的形态学操作更容易,并为标签提供了良好的估计。

答案 1 :(得分:0)

根据我的经验,如果你能看到你的高斯滤镜尺寸(那些小圆圈),那么你的滤镜宽度太小了。虽然非常昂贵,但尝试在高斯上增加半径,它应该继续将结果提高到与您想要找到的最小物体的半径相匹配的半径。

在那之后(重高斯),我会在整个图像上进行峰值搜索。切出任何太低的峰,或者与最近的山谷/背景的对比度太小。

不要害怕将其分成两个独立的处理管道:即一个过滤和提取低对比度散布的斑点,一个完全不同的分离高对比度尖峰(更容易找到)。话虽这么说,高对比度飙升"应该"即使是一个非常积极的过滤器要记住的另一件事是迭代减法,如果有一些blob可以从get get中轻松找到,将它们拉出图像然后进行拉伸(但要小心,因为你可以使图像成为你想要的任何你想要的它太过拉伸了)

答案 2 :(得分:0)

也许尝试使用阈值处理和边缘检测的迭代方法:

以非常高的阈值(例如90%信号)开始,然后在阈值图像上运行canny滤波器(或任何你喜欢的二进制边缘滤波器)。计算并存储生成的像素数(边缘像素)。

继续重复此步骤以获得较低和较低的阈值。在某一点上,您将看到检测到边缘的大量尖峰(即您的酷纹理背景)。然后将阈值拉回一点,然后对生成的边缘图像进行关闭和填充。