使用真彩色 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
,然后绘制 colorbar
和 caxis
,然后用 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));
...但这既是一种非常丑陋的解决方法,也是一种非常危险的做法。
最佳,
我需要显示一个真彩色图像,用 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
,然后绘制 colorbar
和 caxis
,然后用 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));
...但这既是一种非常丑陋的解决方法,也是一种非常危险的做法。
最佳,