2d index to 3d array
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Walter Roberson
2013-4-10
[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);
更多回答(1 个)
Ahmed A. Selman
2013-4-10
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.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Convert Image Type 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!