检测噪声图像中小斑点的技术

信息处理 图像处理 matlab 计算机视觉 opencv
2022-01-27 20:30:41

我正在尝试编写一个程序,该程序使用计算机视觉技术来检测(和跟踪)非常嘈杂的图像流中的微小斑点。我的数据有两种类型:一组图像没有那么嘈杂,我只是用它来尝试不同的技术,而另一组图像比较嘈杂,这就是最终需要进行检测的地方。以下是一些高噪声图像的示例。需要检测的斑点是图像中心附近的小黑点。

示例图片 1 在此处输入图像描述 在此处输入图像描述

最初,我从 OpenCV 中的一个简单的轮廓/斑点检测技术开始,这并不是很有帮助。最终,我转向了诸如使用形态算子“打开”图像之类的技术,然后执行高斯斑点检测的拉普拉斯算子来检测感兴趣的区域。对于图像的低噪声版本,这给了我更好的结果,但在涉及高噪声版本时却失败了:给了我太多的误报。这是来自低噪声图像的结果(请注意输入图像被反转)。

在此处输入图像描述

我当前在 MATLAB 中基于 LoG 的方法的代码如下:

while ~isDone(videoReader)
    frame = step(videoReader);
    roi_frame = imcrop(frame, [660 410 120 110]);

    I_roi = rgb2gray(roi_frame);
    I_roi = imcomplement(I_roi);
    I_roi = wiener2(I_roi, [5 5]);
    background = imopen(I_roi,strel('disk',3));

    I2 = imadjust(I_roi - background);
    K = imgaussfilt(I2, 5);
    level = graythresh(K);
    bw = im2bw(I2);

    sigma = 3;    
    % Filter image with LoG
    I = double(bw);
    h = fspecial('log',sigma*30,sigma);
    Ifilt = -imfilter(I,h);

    % Threshold for points of interest
    Ifilt(Ifilt < 0.001) = 0;
    % Dilate to obtain local maxima
    Idil = imdilate(Ifilt,strel('disk',50));

    % This is the final image
    P = (Ifilt == Idil) .* Ifilt;

有什么方法可以改进我目前的检测技术,使其适用于具有大量背景噪声的图像?还是有更适合此类图像的技术?

2个回答

我建议查看使用深度卷积神经网络 (CNN) 进行对象定位和检测的最新技术。

不同之处在于,深度 CNN 架构促进了数据驱动的方法,其中 CNN 的输出是可训练的分类器,具有更多不同类型的噪声/缩放/翻译/置换输入数据,可以学习允许CNN 比使用静态阈值 (0.001) 的手工设计特征(变形过滤、高斯拉普拉斯、阈值处理)更好地泛化(比如不同的光照和噪声条件)

从github开始

用于图像分类的卷积网络

您可以尝试在opencv中进行Blob检测,如此处所述

注意斑点和斑点之间的区别。从您的问题中,不清楚您是要检测和跟踪斑点还是斑点。很难为斑点或斑点收集良好的训练数据。我不确定斑点检测是否会直接作用于斑点。否则,您可以尝试调整图像大小或查看 20x20 的窗口,具体取决于您的图像大小。