Как вы можете видеть из бега
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, но вместо этого сохранить необработанные значения, вы могли бы избавить себя от некоторых хлопот ...