我有两个灰度图像,我正在寻找一种“适当”的方式来显示不同的图像。
差值图像应为彩色图像,并应显示负值、零值和正值。
目前我使用的是一个颜色映射表,它将负值显示为蓝色,将正值显示为黄色,将零值显示为灰色(例如,请参阅“显示图像之间差异的颜色映射”http://www.cb.uu.se/~cris/blog/index.php/archives/56)。
在差异图像中找到的最小值被映射到RGB=(0,0,1),在差异图像中找到的最大值被映射到RGB=(0.9,0.9,0),该映射是线性的。
在文献(学术论文、书籍……)中有没有什么参考文献?这样的地图吗?
发布于 2011-10-04 20:45:37
有关参考资料,请参阅(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])发布于 2011-10-04 20:18:52
请看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')https://stackoverflow.com/questions/7647420
复制相似问题