Matlab fill shapes by white

廉价感情. 提交于 2019-12-10 14:09:41

问题


As you see, I have shapes and their white boundaries. I want to fill the shapes in white color.

The input is:

I would like to get this output:


Can anybody help me please with this code? it doesn't change the black ellipses to white. Thanks alot :]]

I = imread('untitled4.bmp');
Ibw = im2bw(I);
CC = bwconncomp(Ibw); %Ibw is my binary image
stats = regionprops(CC,'pixellist');

% pass all over the stats
for i=1:length(stats),
size = length(stats(i).PixelList);
% check only the relevant stats (the black ellipses)
if size >150 && size < 600 
    % fill the black pixel by white    
    x = round(mean(stats(i).PixelList(:,2)));
    y = round(mean(stats(i).PixelList(:,1)));
    Ibw = imfill(Ibw, [x, y]);
end;
end;

imshow(Ibw);

回答1:


If your images are all black&white, and you have the image processing toolkit, then this looks like what you need: http://www.mathworks.co.uk/help/toolbox/images/ref/imfill.html

Something like:

imfill(image, [startX, startY])

where startX, startY is a pixel in the area that you want to fill.




回答2:


Your code can be improved and simplified as follows. First, negating Ibw and using BWCONNCOMP to find 4-connected components will give you indices for each black region. Second, sorting the connected regions by the number of pixels in them and choosing all but the largest two will give you indices for all the smaller circular regions. Finally, the linear indices of these smaller regions can be collected and used to fill in the regions with white. Here's the code (quite a bit shorter and not requiring any loops):

I = imread('untitled4.bmp');
Ibw = im2bw(I);

CC = bwconncomp(~Ibw, 4);
[~, sortIndex] = sort(cellfun('prodofsize', CC.PixelIdxList));

Ifilled = Ibw;
Ifilled(vertcat(CC.PixelIdxList{sortIndex(1:end-2)})) = true;
imshow(Ifilled);

And here's the resulting image:



来源:https://stackoverflow.com/questions/10054482/matlab-fill-shapes-by-white

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!