Trying to automatically crop an image into several smaller images based on segmentation
1 view (last 30 days)
Show older comments
Hi all,
Apologies in advance, I'm not well versed in Matlab.
I'm trying to crop a segmented image into several smaller pieces that only contain the a segmented piece of the original image. For example, if an image has 3 apples and I'm interested in the apples, I am aiming to cut out each apple into a seperate image. The result I'm hoping for is 3 seperate images of apples, with anything else in the crop blackened (or whitened) out.
Why I'm trying to do this is so I can pass each resultant image into a CNN for analysis, as each segmented piece/cropped image is a type of object that needs to be classified.
Below is an image of mine that I'm trying to process. Any ideas would be useful! Thanks in advance.
8 Comments
Accepted Answer
darova
on 17 Feb 2020
Something like this
clc,clear
I = imread('image.jpeg');
I1 = im2bw(I);
I2 = imdilate(I1,ones(5)); % imdilate to close contours
I3 = imerode(I2,ones(4)); % restore thickness
[L,n] = bwlabel(I3); % label regions/areas
subplot(121)
imshow(I2)
title('imdilate')
subplot(122)
imshow(I3)
title('restore thickness of contours')
figure
for i = 2:n
I4 = L==i; % select region
I5 = imfill(I4,'holes'); % fill contour/region
imshow(cat(3,I5*255,I3*255,I3*0)) % display
pause(1)
end
3 Comments
darova
on 17 Feb 2020
Sure. Try this:
I4 = L==i; % select region
I5 = imfill(I4,'holes'); % fill contour/region
I6 = I.*repmat(uint8(I4),[1 1 3]);
imshow(I6) % display cropped region
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!