我有两个灰度图像,我正在寻找一个适当的"显示差异图像的方法。
差异图像应该是彩色图像,它应该显示负值,零值和正值。
目前我使用的颜色贴图显示负值为蓝色,正值显示为黄色,零值显示为灰色(请参阅例如"显示图像之间差异的颜色贴图" http://www.cb.uu.se/~cris/blog/index.php/archives/56 )。
差异图像中找到的最小值映射到RGB =(0,0,1),差异图像中找到的最大值映射到RGB =(0.9,0.9,0),映射是线性的。
文献(学术论文,书籍......)中有没有提到这样的地图?
答案 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')