从对象的轮廓中移除阴影(葡萄)

信息处理 图像处理 matlab 计算机视觉 图像分割
2021-12-30 01:36:33

我只想从图像中提取葡萄。不幸的是,有时我没有准确地得到葡萄。

我的代码在所有情况下都不能正常工作。有时,它无法区分阴影和葡萄。

示例输入图像:

在此处输入图像描述

我得到的结果:

在此处输入图像描述

这是我的代码:

RGB = imread('DSC02807.JPG');
GRAY = rgb2gray(RGB);

threshold = graythresh(GRAY);
originalImage = im2bw(GRAY, threshold);

originalImage = bwareaopen(originalImage,250);

SE = strel('disk',10);
IM2 = imclose(originalImage,SE);

originalImage = IM2;

imshow(originalImage);
1个回答

这是您的代码生成的(使用从 IM2 获得的带有白色边界的 colormap(hot)): 在此处输入图像描述

我认为阴影处理得很好,为什么你认为你的代码在阴影到葡萄之间没有注意到?

这是用于生成此图像的代码

bw=IM2<1;
[B,L] = bwboundaries(bw,'noholes'); % fill any holes, so that regionprops can be used to estimate
imagesc(GRAY); hold on
for k = 1:length(B) 
    boundary = B{k};
    plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 1); hold on
end
colormap(hot(256))