八度

时间:2017-01-18 22:13:37

标签: matlab plot octave

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,八度音阶给我纯白色,而我期待相当深灰色),剩下的图像似乎设置“热”色图。

1 个答案:

答案 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, [])