当我将下面的图像读入Matlab时,我得到的是一个3D矩阵,它基本上包含构成图像中每个像素的RGB颜色样本的值。
是否有任何Matlab函数可以用来根据RGB值在图像中的每个像素之间指定一个标量值?[-10,10]纯红色应为10,黄色应为5,绿色应为0,蓝色应为-8,青色应为-10。
答案 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,而是保存原始值,那么您可以省去一些麻烦......