【问题标题】:Color map to show differences between grey level images显示灰度图像之间差异的彩色图
【发布时间】:2011-11-30 15:17:30
【问题描述】:

我有两张灰度图像,我正在寻找一种“正确”的方式来显示差异图像。

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

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

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

文献(学术论文、书籍...)中是否有任何关于此类地图的参考?

【问题讨论】:

    标签: image matlab colors


    【解决方案1】:

    有关参考,请参阅(archived) page that helped push these colormaps;参考文献在页面底部。

    如果您想构建这样的颜色图,即饱和度呈线性的颜色图(与色调相反),您需要来自 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])
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 其实,我不完全确定这是否与 Cris Luengo 所描述的 on 完全相同,因为它不包括 [0.4 0.4 0.4]。我怀疑你真正想要的是两个线性部分的组合。
      • 此颜色图从蓝色变为白色。
      猜你喜欢
      • 2017-05-07
      • 1970-01-01
      • 2021-10-06
      • 2015-11-20
      • 2015-05-28
      • 2013-07-28
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      相关资源
      最近更新 更多