彩色地图显示灰度图像之间的差异

时间:2011-10-04 11:48:14

标签: image matlab colors

我有两个灰度图像,我正在寻找一个适当的"显示差异图像的方法。

差异图像应该是彩色图像,它应该显示负值,零值和正值。

目前我使用的颜色贴图显示负值为蓝色,正值显示为黄色,零值显示为灰色(请参阅例如"显示图像之间差异的颜色贴图" http://www.cb.uu.se/~cris/blog/index.php/archives/56 )。

差异图像中找到的最小值映射到RGB =(0,0,1),差异图像中找到的最大值映射到RGB =(0.9,0.9,0),映射是线性的。

文献(学术论文,书籍......)中有没有提到这样的地图?

2 个答案:

答案 0 :(得分:3)

有关参考,请参阅(archived) page that helped push these colormaps;引用位于页面底部。

如果你想构建这样一个色彩图,即饱和度呈线性色(而不是像色调),你需要来自文件交换的HSL2RGB,然后你可以构建一个这样的色彩图: / p>

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])

答案 1 :(得分:0)

查看colormap function的帮助。

您应该创建一个函数来创建所需的颜色映射(请参阅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')