在嘈杂的 2D 图像中发现脊

信息处理 图像处理 matlab 边缘检测
2022-02-15 20:53:24

我正在使用 MATLAB,并且有使用它的经验,但没有遇到这种问题。我正在尝试识别嘈杂的 2D 图像中的白线,如下图所示。我可以通过阈值来分离较亮的部分,但较暗的部分(如左下角)很棘手。有什么建议么?我想我需要某种山脊检测。值得注意的是,背景并不完全一致……昏暗灯丝的亮度甚至可能低于图像其他部分的背景噪声。所以也许是某种局部过滤而不是统一背景减法。如您所见,我不知道从哪里开始。

理想情况下,我会想要生成一个描述所有线条的骨架以供进一步分析(测量长度)。当然,这也涉及处理交叉和其他东西,但现在如果我能检测到所有行,那将是一个好的开始。

图片

1个回答

我的建议是:

  1. 过滤噪音
  2. 创建没有线条的图像
  3. 从有线条的图像中减去没有线条的图像
  4. 应用阈值
  5. 后处理图像

代码:

close all;
% acquire input image
img = imread('ridges.bmp');
img = rgb2gray(img);
% remove some noise
img_gauss = imfilter(img,fspecial('gaussian',10,2));
figure();
imshow(img_gauss);
% remove all the lines from the image
img_filtered = medfilt2(img_gauss,[31,31],'symmetric');
figure();
imshow(img_filtered);
% subtract image without lines from image with lines
img_subtracted = uint8(double(img_gauss)-double(img_filtered)+127);
figure();
imshow(img_subtracted);
% threshold
img_thresh = img_subtracted>130;
figure();
imshow(img_thresh);
% use open to remove some noise
figure();
img_opened = imopen(img_thresh,ones(3));
imshow(img_opened);

在此处输入图像描述