MATLAB Answers

0

Save pixel color value for indexed image (without image Processing Toolobx)

Asked by Matteo Niccoli on 8 Feb 2012
Latest activity Edited by Een Qurota Aini on 7 Oct 2013
With reference to Steve Eddins blog post on pixel colors: http://blogs.mathworks.com/steve/2006/02/10/all-about-pixel-colors-part-3/
Suppose I create his same image: A = magic(5);
Then I display it with imagesc and colormap HSV: imagesc(A); colormap(hsv);
Is there any way now (without using Image processing Toolbox) to save to a matrix the R,G,B triplets corresponding to the colors of each pixel as produced using HSV?
Thanks, Matteo

  1 Comment

Thanks Walter and Sean.
It will take me some time but i will try both suggestions and then will comment on results.
Matteo

Sign in to comment.

2 Answers

Answer by Walter Roberson
on 8 Feb 2012
 Accepted Answer

apply that routine and then get() the CData property and that will be the RGB.

  6 Comments

Matteo, There was no Alpha mentioned in your question, and hsv color map does not use Alpha. Which Alpha are you referring to?
Sorry, it took me a bit to get back to this.
The example in my original question was a simple one, and with a reference to Steve's blog, so it was perfect to explain what I wanted to do (I often tent to be a bit vague, typical of non native speakers).
Sean, usually my images would have more than 256 elements, so I will have to look into the suggested method more carefully as I'm not familiar with either histc or numel.
With one of the maps I had in mind I was trying to get to the RGB colors after the application of an overlay with alpha as in this other post by Steve: http://blogs.mathworks.com/steve/2009/02/18/image-overlay-using-transparency/ . Walter's idea of using freezeColors worked in that case too, with a slight adaptation. I'm about to post an example on my blog and I will acknowledge the answer, then post it on this thread.
Hi Walter
Here's my blog post showing what I am doing (I used your suggestion and applied to color with shading)
http://mycarta.wordpress.com/2012/04/05/visualization-tips-for-geoscientists-matlab-part-ii/
Thanks again. And thanks to Sean as well.
Matteo

Sign in to comment.


Answer by Sean de Wolski
on 8 Feb 2012

Something like:
A = magic(5);
imagesc(A);
map = hsv;
colormap(map);
Av = A(:);
[~, bin] = histc(Av,linspace(min(Av),max(Av),min(numel(Av),size(map,1))));
mapp = permute(map,[1 3 2]);
rgb = reshape(mapp(bin,:,:),size(A,1),size(A,2),3);
maybe?

  3 Comments

Hi Sean
I get this error message:
??? [~, bin] = histc(Av,linspace(min(Av),max(Av),min(numel(Av)),size(map,1)));
|
Error: Expression or statement is incorrect--possibly unbalanced (, {, or [.
You missed a closing ')' on that line - just like the error message says.
Just copy and paste it.
I'll check it out, thank you Sean.

Sign in to comment.