Hello,
I am trying to lear how I can remove the small objects to find the main area of the image (the black section between the long lines (edges)? I want ot get rid of external and internal objects.
Thanks for the helps
Capture.PNG

 Accepted Answer

#Approximate Here
se = strel('line',3,3);
BW1=imdilate(binaryImage,se);
BW2=bwareafilt(~BW1,1);
se = strel('line',3,3);
BW3=imerode(BW2,se);
se=strel('disk',7);
result=imclose(BW3,se);
imshow(result);
ui.png

8 Comments

Thanks KALYAN. I have binarized the image using imbinarize(I) and continued with your pirce of code. However I am getting an error message. If I dont binarize it I am getting pretty similar error which is related to the second strel command. Am I missing something?error.PNG
Which Matlab version you are using?
I am using R2019a.
I didnot get any error, when I tried with the attach image. Also shown the result.
KALYAN ACHARJYA
KALYAN ACHARJYA on 6 Dec 2019
Edited: KALYAN ACHARJYA on 6 Dec 2019
Have you confirmed that the passing binaryImage data is binary image?
This is the whole code returns error the second time strel is used.
My understanding is that the imbinarize gives me a binary image, by the way. Right? Looking to numbers I see all have bianary values.
BW = imread('Capture.png');
imshow(BW)
BW = imbinarize(BW);
se = strel('line',3,3);
BW1=imdilate(BW,se);
BW2=bwareafilt(~BW1,1);
se = strel('line',3,3);
BW3=imerode(BW2,se);
se=strel('disk',7);
result=imclose(BW3,se);
imshow(result);
#Try
BW = rgb2gray(imread('Capture.png'));
figure,imshow(BW)
BW = imbinarize(BW);
se = strel('line',3,3);
BW1=imdilate(BW,se);
BW2=bwareafilt(~BW1,1);
se = strel('line',3,3);
BW3=imerode(BW2,se);
se=strel('disk',7);
result=imclose(BW3,se);
figure,imshow(result);
Great. It works. So I have to convert it from RGB first.
Thak you again.

Sign in to comment.

More Answers (1)

Image Analyst
Image Analyst on 6 Dec 2019

1 vote

Looks like you're doing an edge detection for some reason. Can I see the original image? Because usually edge detection is NOT what you want to do, for exactly the reasons you are seeing. It would probably be better to use a different segmentation method, like thresholding.

4 Comments

Image Analyst
Image Analyst on 6 Dec 2019
Edited: Image Analyst on 10 Dec 2019
Exactly as I thought. You don't want to do edge detection. You should do color segmentation. If all your subjects are on green grass, you should use the Color Thresholder app on the Apps tab of the tool ribbon to find all green stuff. Anything that is not green is your subject. Let me know if you can't figure it out.
Or you might try training a deep learning model to identify the subjects from overhead images.
Very Determined
Very Determined on 6 Dec 2019
Edited: Image Analyst on 10 Dec 2019
Hello, I will try this then. Thank you for the reponse.
[EDIT] Flag moved here to a comment.
Could you remove the images and the key word (cattle) from your response. I am not allowed to post the images/topic in public as a part of my research agreement.
I changed the keyword to subject. It looks like the images are no longer there for some reason, perhaps because you took them down from your site.
Very Determined
Very Determined on 10 Dec 2019
Edited: Very Determined on 10 Dec 2019
Thank you.

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!