2011-10-04 90 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