从运行中可以看出
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 值正好为零,哪些正好是 1,以确定要在哪一对之间进行插值。例如,假设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,而是保存原始值,则可以省去一些麻烦...