matlab - 在噪声图像中检测小 Blob 的技术

标签 matlab opencv image-processing computer-vision

我正在尝试编写一个程序,该程序使用计算机视觉技术来检测(和跟踪)非常嘈杂的图像流中的微小 Blob 。图像流来自双 X 射线成像设置,它输出左 View 和右 View (由于准直不同,尺寸不同)。我的数据有两种类型:一组图像不是那么嘈杂,我只是用它来尝试不同的技术,另一组图像比较嘈杂,这是检测最后需要工作的地方。图像流的频率为 60 Hz。这是来自 X 射线成像仪的原始图像示例:

enter image description here

这里是感兴趣区域的一些裁剪样本。需要检测的 Blob 是图像中心附近的小黑点。

Sample image 1 enter image description here enter image description here

最初,我从 OpenCV 中的简单轮廓/ Blob 检测技术开始,这不是很有帮助。最后,我转向使用形态学运算符“打开”图像等技术,随后执行高斯 Blob 检测的拉普拉斯算子来检测感兴趣的区域。这为图像的低噪声版本提供了更好的结果,但在涉及高噪声版本时却失败了:给我太多的误报。这是低噪声图像的结果(请注意输入图像是倒置的)。

enter image description here

我当前在 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;

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

最佳答案

我会采取的方法:

-平均背景减法

- 激进的高斯平滑(this filter should be shaped based on your target object,在我的脑海中,我想你想要的西格玛大约是你物体最小横截面的一半,但你可能想要摆弄这个)基本上目标是模糊噪音尽可能不完全丢失目标对象(基于形状和大小)

-边缘检测。如果可能,请尝试特定于对象(基本上,查看高斯平滑后对象的边缘是什么样子,并将边缘检测设置为寻找宽度和对比度偏移)

-可以考虑在这里运行关闭操作。

-在整个图像中搜索孤岛(完全封闭的区域)过滤器,先根据大小再根据形状。

我有一种预感,尽管信噪比非常低,但您的噪声粒度有望明显小于您的对象尺寸。 (如果你的噪音与你的物体具有相同的对比度和相同的球场大小......你沉没了并且需要重新评估你的收购imo)

根据您的速度需求的另一个注意事项。通过了解最后已知位置和本地搜索以及了解新目标可以从何处进入图像,可以极大地节省处理时间。

关于matlab - 在噪声图像中检测小 Blob 的技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41216759/

相关文章:

python - Python 中的 Blob (Lee Filter)

matlab - 将 Matlab GUI 转换为指南 GUI

matlab - 有上限和下限的cumsum?

matlab - 将曲线拟合到 Matlab 中具有特定颜色的区域

c++ - 图像中的物体检测

c++ - 计算图像的模糊度和锐度

图像梯度角计算

python - 如何检测哪些圆圈被填充 + OpenCV + Python

matlab - 在Matlab中,如何通过从完整路径中删除当前文件名来计算路径?

python - 如何在 OpenCV Haar 分类器中显示最大的矩形