2d index to 3d array
2 views (last 30 days)
Show older comments
Hi, I'd like to set several pixels in a base image to a color. These pixels are given as a 2d array (determined from a threshold in greyscale). Its fairly easy to do in grayscale:
im= ('something.pgm') peaks = im>200 baseimage(im)= 150;
but if I have a color image I need to set the three colours (third dimension)
something like: baseimage(im,:) = [0,0,1] which obviously doesn't work, but there must be a neat way to do this.
0 Comments
Accepted Answer
Walter Roberson
on 10 Apr 2013
[r, c, b] = size(baseimage);
rgb = [0 0 1]; %fill color
idx = find(im);
baseimage(idx) = rgb(1);
baseimage(idx+r*c) = rgb(2);
baseimage(idx+2*r*c) = rgb(3);
More Answers (1)
Ahmed A. Selman
on 10 Apr 2013
First note that adding a third dimension that is interpreted as (color) in a grayscale (2-D matrix) image is a logically false task, yet it is mathematically possible. I think there have been some discussions in this forum about this issue.
As for your question, try using imwrite function with a color map argument, that's if you want to deal with coloring grayscale images, im, as:
imwrite(im,colormap(hot(100)),'myImage','jpg'));% hot is one type of many colormaps. Try others for different results.
If you want to manually add a 3rd dimension to a 2-D matrix (im), use concatenation commands like
[a,b]=size(im);
baseimage=cat(3,im,eye(a,b));% adds a unit matrix as a third dim. Use ones(a,b) to add ones matrix.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!