How can I Segment this image efficiently
Ältere Kommentare anzeigen
So I've been trying everything in order to get an automated system where the leaf is left by itself, but nothing has met to my specifications. How can I segment an image with the entire leaf part being left over? heres an example image:
2 Kommentare
Walter Roberson
am 14 Dez. 2015
I am pretty sure that we do not know what your specifications are. For example it gets a bit confusing about which parts of the stem on the right are parts of the foreground leaf and which are parts of a different leaf and we do not know what you want to do about that. Ah, the straight portion near the lower right edge is a bit of a torn part of the leaf so the leaf continues right down to the tube. But is that part of your specifications... we surely do not know.
Daniel Allkenmach
am 19 Dez. 2015
Bearbeitet: Walter Roberson
am 19 Dez. 2015
Akzeptierte Antwort
Weitere Antworten (2)
Image Analyst
am 19 Dez. 2015
0 Stimmen
I have done leaves so many times before for people. Surely you can find some of my code and adapt it to your images. See http://www.mathworks.com/matlabcentral/answers/?term=tag%3A%22leaf%22
Or else look for more general color segmentation routines in my File Exchange: http://www.mathworks.com/matlabcentral/fileexchange/?term=authorid%3A31862
6 Kommentare
Daniel Allkenmach
am 19 Dez. 2015
Image Analyst
am 19 Dez. 2015
I've run them many times with no error. Where did you get the error, and what was it? Dan, you gotta help me out here. Did you get an error on the original demo, downloaded and run as-is with no alterations whatsoever by you? Or did you change the image to your image? Or did you make additional alterations? Please tell me, and then also copy and paste all the red error text back here and attach your m-file and image.
Daniel Allkenmach
am 19 Dez. 2015
Image Analyst
am 19 Dez. 2015
Bearbeitet: Image Analyst
am 19 Dez. 2015
I uploaded it a long time ago. A lot has changed with R2014b and I haven't tested it again since then. It looks like the new MATLAB version doesn't like something about how I used stem() to put vertical lines on the histogram. I'll fix it and upload it again. Stay tuned...
Image Analyst
am 19 Dez. 2015
I've uploaded a new version that uses line() instead of stem() because for some reason MATLAB release R2015b did not like how I used stem even though release R2014, that I originally developed the code with, was perfectly happy with the way I used stem().
Sorry about that, but sometimes new releases of MATLAB can break old versions of code that worked perfectly fine in the older MATLAB release.
Thanks for letting me know and please download and try the new version and let me know if it works now. Make sure your version has line() and not stem() in the function called PlaceThresholdBars().
Image Analyst
am 19 Dez. 2015
Be sure to also try out the color thresholder app on the App tab of the toolbar ribbon.
harjeet singh
am 22 Dez. 2015
hello dear use this code for extraction

clear all
close all
clc
img=imread('leaf.jpg');
figure(1)
imshow(img)
drawnow
img=double(img);
img_1=(img(:,:,2)-img(:,:,1)>1 & img(:,:,2)-img(:,:,1)<40 & img(:,:,3)<90);
img_1=imfill(img_1,'holes');
figure(2)
imshow(img_1)
drawnow
[lab,num]=bwlabel(img_1);
for i=1:num
[r,c]=find(lab==i);
a(i,:)=[i length(r)];
end
a=sortrows(a,2);
roi=lab==a(end,1);
img_3(:,:,1)=img(:,:,1) .* double(roi);
img_3(:,:,2)=img(:,:,2) .* double(roi);
img_3(:,:,3)=img(:,:,3) .* double(roi);
img_3=uint8(img_3);
figure(3)
imshow(img_3)
drawnow
3 Kommentare
Daniel Allkenmach
am 27 Dez. 2015
Image Analyst
am 27 Dez. 2015
The for loop and the "a" variable and all that stuff about labeling is unnecessary. It could be done more simply like this:
rgbImage=imread('8.jpg');
subplot(2,2,1);
imshow(rgbImage)
% Threshold
img_1=(rgbImage(:,:,2)-rgbImage(:,:,1)>1 & rgbImage(:,:,2)-rgbImage(:,:,1)<40 & rgbImage(:,:,3)<90);
% Fill holes.
img_1=imfill(img_1,'holes');
% Extract biggest blob.
img_1 = bwareafilt(img_1, 1);
subplot(2,2,2);
imshow(img_1)
% Mask the image using bsxfun() function
maskedRgbImage = bsxfun(@times, rgbImage, cast(img_1, 'like', rgbImage));
subplot(2,2,3);
imshow(maskedRgbImage)
This is better but this is not very robust. Later I'll post a more robust method using thresholding in HSV color space.
harjeet singh
am 28 Dez. 2015
thanks @image analyst
Kategorien
Mehr zu Agriculture finden Sie in Hilfe-Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




