Matlab提供了为每个子图设置单独色彩图的功能。 Octave docs
描述的相同功能即以下短语:
功能文件:cmap = colormap(hax,...) 如果第一个参数hax是一个轴句柄,则查询或设置hax父图的颜色图。
但是当我尝试运行以下代码时,由于某种原因,我最终会为所有子图提供单一颜色图。
clear -all;
clc;
img = zeros(128, 128);
img(64,64) = 0.2;
rad = radon(img);
x = 1;
y = 4;
s1 = subplot(y,x,1); imagesc(img);
colormap(s1, gray);
s2 = subplot(y,x,2); imagesc(rad);
colormap(s2, hot);
colorbar;
line_img = zeros(128, 128);
line_img(64, 32:64) = 0.5;
line_img(63, 32:64) = 0.4;
line_img(63, 32:64) = 0.2;
line_rad = radon(line_img);
s3 = subplot(y,x,3); imshow(line_img);
colormap(s3, gray);
s4 = subplot(y,x,4); imagesc(line_rad);
colormap(s4, hot);
colorbar;
感谢任何帮助。我希望在“热”中有灰度和氡变换图像的源图像。出于某种原因,我得到的第一个子图有点像灰度(事实上并非如此,因为我初始化点值为0.2,八度音阶给我纯白色,而我期待相当深灰色),剩下的图像似乎设置“热”色图。
答案 0 :(得分:4)
如果你仔细阅读文档中的那一行,你会发现如果你传递一个轴句柄,那么父图的颜色图会被改变。这与具有不同色彩图的每个轴不同,因为它们都在同一个图中。
函数文件:
cmap = colormap (hax, …)
如果第一个参数hax是一个轴句柄,则会查询或设置hax父图的颜色图。
目前,Octave不支持最近刚刚在MATLAB中引入的此功能。
解决这个问题的方法是在用imshow
显示之前将图像转换为RGB图像,然后图形的色彩图无关紧要。您可以先将其转换为索引图像(使用gray2ind
),然后转换为带ind2rgb
的RGB。
% To display the grayscale image
rgb = ind2rgb(gray2ind(img), gray);
imshow(rgb);
作为旁注,您的第一个灰度图像显示为全白的原因是,如果imshow
的输入属于double
类型,则所有值都应在0之间和1.如果要更改此行为,可以使用imshow
的第二个输入来指定您希望缩放颜色限制以匹配您的数据
imshow(img, [])