當我將以下圖像讀入Matlab時,我獲得了一個基本上包含組成圖像內每個像素的RGB顏色樣本值的3D矩陣。Matlab - 將標量值附加到RGB顏色
是否有我可以使用分配的標量值之間可以說,任何Matlab的函數[-10,10]至基於所述RGB值圖像內的每個像素?純紅應該像10,黃色應該是5,綠色應該是0,藍色應該像-8,青色應該像-10。
當我將以下圖像讀入Matlab時,我獲得了一個基本上包含組成圖像內每個像素的RGB顏色樣本值的3D矩陣。Matlab - 將標量值附加到RGB顏色
是否有我可以使用分配的標量值之間可以說,任何Matlab的函數[-10,10]至基於所述RGB值圖像內的每個像素?純紅應該像10,黃色應該是5,綠色應該是0,藍色應該像-8,青色應該像-10。
看一看RGB2IND:http://www.mathworks.com/help/techdoc/ref/rgb2ind.html
你然後可以用您自己的自定義N元素索引向量替換Nx3索引輸出。
正如你可以從運行
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;
上面定義的對應於您感興趣的顏色看。
爲了解決你的問題,每個像素在你的形象,你會必須確定哪些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保存數據,但保存原始值而不是,你可以節省自己的一些麻煩......
其他顏色呢? (例如,不是「純」的顏色)。 –
在我的圖片中,我只有這種色譜。 – Simon
請參閱[rgb2ind](http://www.mathworks.com/help/techdoc/ref/rgb2ind.html) – Aabaz