使用真彩色CData调整图像上的色条限制(轴)

时间:2015-03-24 17:18:04

标签: image matlab colorbar

我需要显示一个真彩色图像,使用imread并显示imshow,以及(显然)不相关的颜色条。我在打电话:

figure
imshow(my_image)
colorbar
colormap(cool(200));
caxis([0 15]);

使用测试图像,它看起来像这样:

enter image description here

正如您所看到的,caxis对彩条没有影响。 Colorbar最大值将保持200,这是我的色彩映射中的行数。 caxis的文档正确描述了这一点,即:

  

它不会影响具有真彩色CData或CDataMapping设置为直接的曲面,面片或图像。

有没有解决方法? 我尝试了一些奇怪的东西,比如在一侧绘制图像并在另一侧绘制颜色条(但是我在第二面得到一个空白的图,并且有太多的空白区域);我尝试绘制zeros,然后colorbarcaxis,然后用imshow替换零点图(但颜色栏会相应地刷新)。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

这是正常行为,正如您在文档中注意到的那样。

真彩色图像有三个通道,而彩色贴图只有一个通道......所以你想要做的就是在一个轴上映射三维数据。有一种不确定性,Matlab不知道如何处理这个问题,所以根本就没有处理它。

我看到的唯一解决方法是将您的数据减少到单个频道,例如使用rgb2gray。彩色图像可以很好地处理灰度图像。

修改

如果您想将图像保持为真彩色和不相关的色彩图,可以使用一些解决方案。

请注意,在我的计算机(R2015a,Ubuntu)上,您发布的代码有效,色条轴在caxis([0 15])后映射到[0 15]。也许升级到更新版本可以解决您的问题。

这就是说,正如你所说它不能与你的版本一起使用,你仍然可以修改颜色条刻度的标签,使它们看起来像你想要的那样:

hcb = colorbar;
set(hcb,'YTick',linspace(1,200,4));
set(hcb,'YTickLabel',linspace(0,15,4));

......但这是一个非常丑陋的解决方法和非常危险的做法。

最佳,