2d index to 3d array
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Akzeptierte Antwort
Walter Roberson
am 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);
Weitere Antworten (1)
Ahmed A. Selman
am 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.
1 Kommentar
Siehe auch
Kategorien
Mehr zu Convert Image Type finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!