我需要显示一个真彩色图像,使用imread
并显示imshow
,以及(显然)不相关的颜色条。我在打电话:
figure
imshow(my_image)
colorbar
colormap(cool(200));
caxis([0 15]);
使用测试图像,它看起来像这样:
正如您所看到的,caxis
对彩条没有影响。 Colorbar最大值将保持200
,这是我的色彩映射中的行数。 caxis
的文档正确描述了这一点,即:
它不会影响具有真彩色CData或CDataMapping设置为直接的曲面,面片或图像。
有没有解决方法?
我尝试了一些奇怪的东西,比如在一侧绘制图像并在另一侧绘制颜色条(但是我在第二面得到一个空白的图,并且有太多的空白区域);我尝试绘制zeros
,然后colorbar
和caxis
,然后用imshow
替换零点图(但颜色栏会相应地刷新)。有什么帮助吗?
答案 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));
......但这是一个非常丑陋的解决方法和非常危险的做法。
最佳,