MATLAB: General leaf segmentation for white or colored background

background segmentationleafleaf segmentation

Hi,
I need to do an image segmentation on a leaf image. My image dataset has 2 types of images: some have white background and some have blue background. User "Image Analyst" here in Mathworks helped me to get the perfect result for images that have a blue background, but I don't get the right results for images that have a white background. So, what should I change to get this code to work in any background images (colored or white)?. I'm sorry for asking here again (I guess this must be simple), but I'm new at matlab programming and I couldn't develop a good solution by myself yet.
I'm providing the code I've been using for blue background images. Also, I'm adding two images samples I need to segment: one is a blue background imagne and the other is a white background image (I want only the leaf mask, that's why the new background must be black).
Thank you in advance!

Best Answer

You just need to look at the histogram and realize what they're telling you. You see one hump that is brighter than 230 and that is obviously the bright background, and one hump less than 230 and that is obviously the dark leaf. So you just change this line of code:
leafMask = redChannel < 230 & greenChannel < 230 & blueChannel < 230;
Or, you could actually get away with just one channel since the background is so much brighter than the leaf in every channel:
leafMask = blueChannel < 230;
You could do both images in one shot if you have:
leafMask = redChannel < 230 & greenChannel < 230 & blueChannel < 230 & ...
redChannel > 50 & greenChannel > 50;