是否可以将矩阵中的值映射到MATLAB中的颜色

时间:2017-03-31 04:14:12

标签: image matlab matrix mapping

我一直试图从矩阵中获取图像。最初我将矩阵转换为具有5个级别的灰度图像。我想知道是否可以做同样的事情来使灰度图像成为一个颜色,即说我有一个值2.2并且我需要它是深蓝色,是否有任何内置函数以这种方式映射值还可以将所有5个级别映射到不同的颜色吗?

将以下内容视为我的矩阵

   x = [ 2.2 2.2 2.2 2.6
         2.2 2.3 2.4 2.5
         2.3 2.7 2.5 2.2
         2.6 2.2 2.2 2.2]

我需要按照以下方式绘制水平图,这样当我将其转换为图像时,我应该在输出图像中获取颜色。

                 2.2--> Dark blue
                 2.3--> Blue
                 2.4--> Green
                 2.5--> Yellow
                 2.6--> Orange
                 2.7--> Red  

我该怎么办?请帮忙..谢谢!!

2 个答案:

答案 0 :(得分:1)

您可以更改您绘制的轴的ColorOrder,然后使用imagesc。如果您事先不知道x矩阵将具有多少不同的值,则必须创建比下面的解决方案更具动态性的色彩映射。

% Create your own "colormap"
imgColor = [...
    0 0 0.5; ... % Dark blue
    0 0 1;   ... % Blue
    0 0.8 0; ... % Green
    1 1 0;   ... % Yellow
    1 0.5 0; ... % Orange
    1 0 0    ... % Red
    ];

% Create an axes and set your color order
a = axes;
a.ColorOrder = imgColor;
% Draw image
imagesc(x)

enter image description here

您也可以尝试使用colormap editor来改变颜色。要打开,只需输入:

colormapeditor

enter image description here

答案 1 :(得分:1)

你可以这样做:

  1. 将矩阵缩减为一组unique整数,以便每个整数代表原始值之一
  2. 使用imagesc显示整数值矩阵。
  3. 使用具有所需颜色的自定义colormap
  4. 这确保了每个原始值的方式,无论它们的分离如何,都将对应不同的颜色。

    x = [ 2.2 2.2 2.2 2.6
          2.2 2.3 2.4 2.5
          2.3 2.7 2.5 2.2
          2.6 2.2 2.2 2.2];                                        % example matrix
    colors = [0 0 .6; 0 .6 1; 0 .8 0; 1 .9 0; 1 .5 0; .8 0 0];     % desired colors
    [~, ~, xu] = unique(x);                                        % step 1
    xu = reshape(xu, size(x));
    imagesc(xu)                                                    % step 2
    colormap(colors)                                               % step 3
    

    enter image description here