Best method for identifying the color

111 views (last 30 days)
i Venky
i Venky on 10 Jan 2012
Commented: Image Analyst on 21 Nov 2019
Hello. I have read a book in image processing. I have worked it out with matlab too. I want to find out the location (co-ordinates) of a particular color in the image. How should I do this? Which is the best method for color identification?
Thanks in advance.
  3 Comments
Walter Roberson
Walter Roberson on 11 Jan 2012
Is (250, 11, 3) "red" or not? What are the exact rules you want to use for determining whether something is "red"? "yellow"? "blue" ?

Sign in to comment.

Answers (5)

Image Analyst
Image Analyst on 13 Jan 2012
Color image analysis is not so easy, but it's one of my specialties as you can see from my logo and my File Exchange:
Check out the color segmentation demos I have there. There are three different ways of detecting colors. You can also specify how close you want the colors to be or how different you'll allow them to be from each other (like how much spread there is in the detected color gamut).

Jonathan Sullivan
Jonathan Sullivan on 11 Jan 2012
Edited: Walter Roberson on 11 Oct 2017
Think of the color of a pixel being a vector in a 3 dimensional space. What you want to do is find the angle of the color vector of the pixel to the color vector of the ideal by using the dot product.
For example:
blue = [0 0 255];
pixel = [10 10 200];
ang_thres = 25; % degrees. You should change this to suit your needs
ang = acosd(dot(blue/norm(blue),pixel/norm(pixel)));
isBlue = ang <= ang_thres; % Apply angle threshold
You might also want to apply a magnitude threshold (i.e. is the pixel dark enough). This would filter out any really faint colors (i.e. [0 0 1]);
For example:
blue = [0 0 255];
pixel = [10 10 200];
ang_thres = 25; % degrees. You should change this to suit your needs
ang = acosd(dot(blue/norm(blue),pixel/norm(pixel)));
mag_thres = 64; % You should change this to suit your needs
mag = norm(pixel);
isBlue = ang <= ang_thres & mag >= mag_thres; % Apply both thresholds
Hope this helps!
  2 Comments
Image Analyst
Image Analyst on 11 Oct 2017
You're best off just attaching your image and telling us what you need to do, extract, or measure in a brand new question. Like what, exactly, is considered "noise."
You can also search the Image Analysis literature for papers on floor plans by clicking here.

Sign in to comment.


Walter Roberson
Walter Roberson on 11 Jan 2012
Unfortunately, the hue-angle solution from Jonathan, and the hsv solution from Chandra, both will likely classify pink as being red, since pink is a saturated form of red. This is why it is important to define exactly what "red" and "yellow" and "blue" mean to you.

Jonathan Sullivan
Jonathan Sullivan on 11 Jan 2012
With all do respect, Walter, I don't believe that the solution I gave will include pinks. Here, let's look at an example of all colors.
% Set user parameters
mag_thres = 0.5; % Set magnitude threshold
ang_thres = 10; % Set angular threshold
r = cat(4,1,0,0); % Define "red"
% Create all colors
[R G B] = meshgrid(linspace(0,1,100),linspace(0,1,100),linspace(0,1,100));
RGB = cat(4,R,G,B);
% Threshold
mag = sqrt(sum(RGB.^2,4));
ang = acosd(sum(bsxfun(@times,r,bsxfun(@rdivide,RGB,mag)),4));
f = ang < ang_thres & mag > mag_thres;
% Display Results
figure
image(cat(3,R(f),G(f),B(f)))
As you can tell, no "pinks" are included.
  1 Comment
Image Analyst
Image Analyst on 13 Jan 2012
I ran it and it looks like it gives a red Chirp or sawtooth function. Not sure I understand.

Sign in to comment.


Muhammad Muhammad
Muhammad Muhammad on 20 Nov 2019
How to identify yellow colour in images by Matlab software.
  2 Comments
Image Analyst
Image Analyst on 21 Nov 2019
Try the Color Thresholder app on the Apps tab of the tool ribbon.
Or check out some demos in my File Exchange.

Sign in to comment.

Categories

Find more on Convert Image Type in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by