使用真彩色 CData 重新调整图像上的颜色限制(caxis)

Readjust colobar limits (caxis) on image with true colors CData

我需要显示一个真彩色图像,用 imread 得到并用 imshow 显示,还有一个(显然)不相关的颜色条。我打电话:

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

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

如您所见,caxis 对颜色栏没有影响。颜色栏最大值将保持 200,这是我的颜色图中的行数。 caxis 的文档对此进行了正确描述,内容为:

It does not affect surfaces, patches, or images with true color CData or with CDataMapping set to direct.

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

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

真彩色图像有三个通道,而颜色图只有一个通道...所以你要做的类似于在单个轴上映射 3d 数据。有一个不确定性,Matlab不知道如何处理这个,所以它根本不处理它。

我看到的唯一解决方法是将您的数据减少到单个通道,例如 rgb2gray。颜色图适用于灰度图像。

编辑

如果您想保持图像的真彩色和不相关的色图,有几种解决方案。

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

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

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

...但这既是一种非常丑陋的解决方法,也是一种非常危险的做法。

最佳,