Matlab - 将标量值附加到RGB颜色

时间:2011-06-20 10:33:44

标签: matlab

当我将下面的图像读入Matlab时,我得到的是一个3D矩阵,它基本上包含构成图像中每个像素的RGB颜色样本的值。

enter image description here
是否有任何Matlab函数可以用来根据RGB值在图像中的每个像素之间指定一个标量值?[-10,10]纯红色应为10,黄色应为5,绿色应为0,蓝色应为-8,青色应为-10。

2 个答案:

答案 0 :(得分:6)

看看RGB2IND:http://www.mathworks.com/help/techdoc/ref/rgb2ind.html

然后,您可以使用自己的自定义N元素索引向量替换Nx3索引输出。

答案 1 :(得分:0)

从跑步中可以看出

colorlist=[1 0 0;1 1 0;0 1 0; 0 0 1; 0 1 1];
valuelist=[10 5 0 -8 -10];
figure;
hold all;
for i=1:10
  bar(i,i,'FaceColor',colorlist(i,:))
end;

上面定义的colorlist对应于您感兴趣的颜色。

要解决您的问题,对于图像中的每个像素,您必须确定哪些RGB值正好为零,哪些只是一个,以确定要插入哪一对。例如,假设size(image)==[100,100,3]image=im2double(imread(myfilename)),即max(image(:))==1

if ((image(x,y,:)==0)==[0 0 1]) && ((image(x,y,:)==1)==[1 0 0])
    %# interpolate between red and yellow
    result(x,y)=10 - 5*image(x,y,2); %# pure red gives 10, pure yellow gives 5
elseif ((image(x,y,:)==0)==[0 0 1]) && ((image(x,y,:)==1)==[0 1 0])
    %# interpolate between yellow and green
    result(x,y)=5*image(x,y,1); %# pure yellow gives 5, pure green gives 0
elseif 
    %# ...
end

此解决方案不是矢量化的,但它应该让您在正确的轨道上实现可行的实施。当然,如果您可以避免使用多色查找表将数据保存为RGB,而是保存原始值,那么您可以省去一些麻烦......