2d index to 3d array

2 次查看(过去 30 天)
Ben
Ben 2013-4-10
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.

采纳的回答

Walter Roberson
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
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.
  1 个评论
Ben
Ben 2013-4-10
编辑:Ben 2013-4-10
Sorry, maybe my question was not clear. I have converted a grayscale to color like this:
backim=cat(3,baseim,baseim,baseim);
Which gives a grey image that can have colour.
Now I need to colour some areas of the image which are defined in another image 'im' (a 2d binary array)
I'd like to be able to choose the fill color.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Images 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by