围绕零值自动构建色彩图

9 matlab plot color-mapping

我经常想要绘制一个差异图像,范围从一些负数到一些正数.问题在于,matlab的色彩图仅从最小值到最大值进行缩放,但不关心某些中间值(这种情况为零).例如,我生成的peaks图像具有不同的单个像素:

在此输入图像描述

原件看起来像这样:

在此输入图像描述

因此,顶部图像的零值为蓝色,底部的值为绿色......(使用jet colormap作为示例)

我想构建一个色彩映射表,无论min\max值是多少,它都会自动将零值表示为相同的颜色.我怎样才能做到这一点?

Amr*_*mro 9

可以使用caxis函数(设置CLim当前轴对象的属性)来控制颜色映射.当然,假设使用缩放的颜色映射,而不是直接颜色映射(读取CDataMapping属性).通过使用零中心范围作为输入,您可以确保零始终位于中间.

这是一个例子:

load penny
P = 4*(P./255) - 1;        %# not centered around zero
imagesc(P), axis image off
colormap(lbmap(64,'BrownBlue')), colorbar
Run Code Online (Sandbox Code Playgroud)

skewed_range

现在我们调整颜色映射使其在零附近对称:

c = max(abs([min(P(:)),max(P(:))]));
caxis([-c c])
Run Code Online (Sandbox Code Playgroud)

symmetric_range

请注意,我使用Light Bartlein配色方案,该方案设计为发散调色板,以突出两个极端之间的差异.

如果原始范围非常偏斜,您可能需要重新采样色彩图,以便在过度拉伸的子范围内为其提供更多值.


bla*_*bla 4

您可以 从 FEX使用此工具。它生成蓝-白-红颜色图,零始终对应于白色。对于您想要包含两种以上颜色的情况,请深入研究代码并根据您的需求进行调整。

FEX 中还有更多选项可以执行类似的操作(这是一个,还有另一个)... 在此输入图像描述