2011-10-04 181 views
3

我有兩個灰度圖像,我正在尋找一個「正確」的方式來顯示差異圖像。顏色地圖顯示灰度圖像之間的差異

差異圖像應該是彩色圖像,它應該顯示負值,零值和正值。

目前我正在使用一個顏色圖,顯示負值爲藍色,正值爲黃色,零值爲灰色(例如,請參閱「用於顯示圖像差異的顏色圖」http://www.cb.uu.se/~cris/blog/index.php/archives/56)。

在差分圖像中找到的最小值被映射到RGB =(0,0,1),並且在差分圖像中找到的最大值被映射到RGB =(0.9,0.9,0),該映射是線性的。

有沒有文獻(學術論文,書籍......)這樣的地圖參考?

回答

3

對於參考,見(archived) page that helped push these colormaps;參考資料位於頁面底部。

如果你想建立這樣的顏色映射,即一個是在飽和線性(而不是如色調),您需要從文件交換HSL2RGB,然後你可以構造這樣的顏色表:

cLength = 64; %# length of colormap 
hue = [ones(floor(cLength/2),1)*0.66; ones(ceil(cLength/2),1)*0.16]; 
sat = [linspace(1,0,floor(cLength/2))';linspace(0,1,ceil(cLength/2))']; 
lum = ones(cLength,1)*0.50; 

cmap = hsl2rgb([hue,sat,lum]); 

%# apply colormap 
colormap(cmap) 

對於您的可視化,如果最負面和最正面的區別不相同,請使用CAXIS確保顏色灰色完全映射到零。

maxAbsDiff = max(abs(differenceImage(:))); 
caxis([-maxAbsDiff,maxAbsDiff]) 
0

看看​​的幫助。

您應該創建所需的顏色映射(請參閱hot.m作爲示例)。例如:

function c = blueyellow(m) 
if nargin < 1, m = size(get(gcf,'colormap'),1); end 
x = (0:m-1)'/max(m-1,1); 
c = bsxfun(@plus, [0 0 1], x * [0.9 0.9 -1]); 

然後運行

colormap('blueyellow') 
+1

實際上,我並不完全確定這與Cris Luengo描述的完全相同,因爲它不包含[0.4 0.4 0.4]。我懷疑你真正想要的是兩個線性部分的組合。 – Nzbuu

+0

此顏色地圖從藍色變爲白色。 – Jonas

+0

啊,對不起。現在修復。 – Nzbuu