Masking and removing green pixels

I am performing Plant disease detection.so I want to identify the mostly green colored pixels. After that, based on specified threshold value that is computed for these pixels, the mostly green pixels i want to masked as follows: if the green component of the pixel intensity is less than the pre-computed threshold value, the red, green and blue components of the this pixel is assigned to a value of zero. pleae give me solution for Masking the green pixels

2 Comments

It seems that you have a good idea on what has to be done. What have you tried so far?
I does not know to find threshold value .

Sign in to comment.

Answers (2)

Image Analyst
Image Analyst on 26 Oct 2014
Edited: Image Analyst on 27 Oct 2015
See my "color detection by hue" tutorial in my File Exchange http://www.mathworks.com/matlabcentral/fileexchange/?term=authorid%3A31862 It can do this. Simply adapt the thresholds, by looking at the histograms, to select green instead of yellow.

8 Comments

Thank you sir for your replying.
Sir i am confusing about threshold value to select green colors.Is it standard value or randomly you selected. I am nebwie in MATLAb please help me
hueThresholdLow = 0;
hueThresholdHigh = graythresh(hImage);
saturationThresholdLow = graythresh(sImage);
saturationThresholdHigh = 1.0;
valueThresholdLow = graythresh(vImage);
valueThresholdHigh = 1.0;
There's no way graythresh() will know that green is the color you want out of all the thousands of colors in that image. You have to manually set them, just as I did in my code. Pick a hue range around .4 to .6 or so and see how that works. Like low=.4 and high=.6 or something like that. Tweak the numbers until you get what you need.
Image Analyst
Image Analyst on 27 Oct 2014
Edited: Image Analyst on 27 Oct 2014
Alright I updated my demo to let you find green, yellow, red, white - whatever you specify. See attached code. Updated code should be in my File Exchange tomorrow.... http://www.mathworks.com/matlabcentral/fileexchange/28512-simple-color-detection-by-hue
Sir,value that are set fro green work for Demo images when i pick up and apply that value for thersholding its not goes as i want. i will give a snapshot a how i require the result as.... i want to extract infected region only.hope positive response from you
This is also i had done and also doing lot of different thing to extract infected region form image
rgbImage=imread('plant1.jpg');
yd = double(rgbImage)/255;
greenness = yd(:,:,2).*(yd(:,:,2)-yd(:,:,1)).*(yd(:,:,2)-yd(:,:,3));
% Threshold the greenness value
thresh = 0.3*mean(greenness(greenness>0));
mask = greenness > thresh;
imshow(mask);
My code should be able to pick out the green pixels but you may have to adjust the parameters to correspond what part of the color spectrum you consider to be green. Finding disease is not just color - as you can see there are many background pixels that are of a different color but are not on leaves and so they should be counted as background, not disease. You have to locate the leaves first. Then find the non-green pixels on them.
Search Vision Bib http://www.visionbib.com/bibliography/contents.html for plant disease - there are several papers on it.
Thank you sir
THANKS ALOT

Sign in to comment.

Matt Tearle
Matt Tearle on 27 Oct 2014
At the risk of being accused of shameless self-promotion... I blogged about a similar problem on Steve Eddins's Image Processing blog. Perhaps some of my experiences might be of use?

Categories

Find more on Agriculture in Help Center and File Exchange

Asked:

on 26 Oct 2014

Edited:

on 27 Oct 2015

Community Treasure Hunt

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

Start Hunting!