灰度图像的色彩地图用于显示差异。

3
我有两张灰度图像,想找一种“合适”的方法来展示它们的差异图像。
差异图像应该是一幅彩色图像,并且应该显示负值、零值和正值。
目前我正在使用一种颜色映射,将负值显示为蓝色,将正值显示为黄色,将零值显示为灰色(例如“用颜色映射展示图像之间的差异”http://www.cb.uu.se/~cris/blog/index.php/archives/56)。
差异图像中找到的最小值被映射为RGB=(0, 0, 1),最大值被映射为RGB=(0.9, 0.9, 0),映射是线性的。
文献中是否有关于这种映射的参考资料(学术论文、书籍等)?
2个回答

3

参考文献,请参见(已存档)此页面,该页面有助于推动这些色图的发展;参考文献位于页面底部。

如果您想构建这样的色图,即饱和度线性变化的色图(与色调等不同),您需要从File Exchange下载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

查看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')

1
实际上,我并不完全确定这是否与Cris Luengo描述的完全相同,因为它不包括[0.4 0.4 0.4]。我怀疑你真正想要的是两个线性部分的组合。 - Nzbuu
这个颜色映射从蓝色到白色。 - Jonas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接