MATLAB:图像分割

MATLAB:图像分割,matlab,image-processing,binary,image-segmentation,Matlab,Image Processing,Binary,Image Segmentation,熟悉MATLAB和图像处理。我需要知道如何将图像分割为前景和背景,然后生成二值图像作为输出。 我需要这个作为输出: 我已经尝试通过在线教程来实现这一点,这就是我设法得到的: 这是一个良好的开端,但并不完全是我所需要的 我的代码: I = imread('AssignmentInput.jpg'); figure; imshow(I); title('Step-1: Load input image'); img_filtered = I; for c = 1 : 3 img_f

熟悉MATLAB和图像处理。我需要知道如何将图像分割为前景和背景,然后生成二值图像作为输出。

我需要这个作为输出:

我已经尝试通过在线教程来实现这一点,这就是我设法得到的:

这是一个良好的开端,但并不完全是我所需要的

我的代码:

I = imread('AssignmentInput.jpg');
figure;
imshow(I);
title('Step-1: Load input image');


img_filtered = I;
for c = 1 : 3
    img_filtered(:, :, c) = medfilt2(I(:, :, c), [3, 3]);
end
figure; 
imshow(img_filtered);
title('Step-3:Noise Removal');

H = fspecial('gaussian'); % Create the filter kernel.
img_filtered = imfilter(img_filtered,H); % Blur the image.
Mask = im2bw(img_filtered, 0.9); % Now we are generating the binary mask.
img_filtered([Mask, Mask, Mask]) = 0; % Now we have the image.
figure;
imshow(img_filtered);
title('Step-5:Segmented Image');

为了更好地去除噪声,更清晰地分离前景和背景,您还可以添加形态学操作,如:

se = strel('square',2);
I = imclose(I,se);

你也可以尝试不同的strel类变体。下图是使用2像素的正方形进行imclose操作后的图像

为了更好地去除噪声并在前景和背景之间进行更清晰的分离,您还可以添加形态学操作,如:

se = strel('square',2);
I = imclose(I,se);

你也可以尝试不同的strel类变体。下图是imclose操作后的图像,有一个2像素的正方形

,看起来非常接近我。这两幅图像之间有什么区别?基本上我在第三幅图像中保留了颜色,我只需要第二幅图像中显示的黑色和白色。这只是因为你将遮罩应用于原始图像。试试看
imshow(~Mask)
哦,我真是个白痴!我真的没看到。非常感谢您指出这一点,我没有充分遵守我的代码,这是我的错。很高兴能提供帮助。你很容易陷入你认为你需要做的事情中,而不是看着你已经拥有的东西。:)在我看来,那真是太可怕了。这两幅图像之间有什么区别?基本上我在第三幅图像中保留了颜色,我只需要第二幅图像中显示的黑色和白色。这只是因为你将遮罩应用于原始图像。试试看
imshow(~Mask)
哦,我真是个白痴!我真的没看到。非常感谢您指出这一点,我没有充分遵守我的代码,这是我的错。很高兴能提供帮助。你很容易陷入你认为你需要做的事情中,而不是看着你已经拥有的东西。:)