MATLAB像素颜色的表达方式

 





【中文转述】

 

252
249
246
243
237
255
255
250
246
243
253
254
248
245
243
250
249
245
243
239
 


    这些像素值表示什么颜色?如果你很熟悉图像处理,那你应该知道255表示白色,所以上面这些数字表示白色或者接近白色的颜色。但是实际上,这些数字并不是来自一张图片。这些数字是波士顿地区的海拔高度,从U.S. Geological Survey (USGS)下载 255是一个以米为单位的测量值,并不表示颜色。
MATLAB可以将任何矩阵以图片的形式显示出来。比如,根据你使用命令的不同,MATLAB可以将海拔高度数据显示为如下图。
的矩阵来代表每一个颜色成分。

  1. red = [1 0; 1 0.7]
  2. green = [0 0; 1 0.7]
  3. blue = [0 1; 0 0.7]
复制代码


然后,使用cat函数来将这些颜色成分矩阵在第三维上拼合起来。

  1. truecolor_image = cat(3, red, green, blue);
复制代码


最后,使用image函数显示图形:

  1. image(truecolor_image)
  2. axis equal % Display the image using square pixels
复制代码


可以看到,矩阵值直接指定了每一个像素的颜色。通过这种表达方式你可以很大程度上控制颜色显示,但是对于工程应用来说它并不是最适合的一种图形格式。
中包含一下索引图形:

  1. load clown %可以在你的matlab中直接输入这个命令
  2. whos
复制代码


Name         Size         Bytes     Class

X           200x320       512000    double array
caption       2x1              4    char array
map          81x3           1944    double array

Grand total is 64245 elements using 513948 bytes

    变量X中存放了查表索引,map中存放了对应的colormap。两者都会直接用于图像显示。(5,5)这个像素点上的颜色,对应于X(5,5)的值:

  1. X (5, 5)
复制代码


ans =
    61
这个值作为colormap的行索引值:

  1. map (61, :)
复制代码


ans =
    0.9961 0.5781 0.1250

由此看到,像素(5,5)处的颜色是由‘很多红色',‘一些绿色’和‘一点点蓝色’构成。
使用两个MATLAB命令显示这幅图,一个用来显示图形同时另一个用来指定图像的colormap

  1. image(X)
  2. colormap(map)
复制代码


  1. colormap(cool)
复制代码


来对比。

  1. A = magic(5)
复制代码


A = 17   24    1     8    15     23    5    7    14    16      4    6   13    20    22     10   12   19    21     3     11   18   25     2     9
使用image255-colorgrayscale colormap来显示A)

  1. image(A)
  2. colormap(gray(256))
  3. axis equal
复制代码

命令的图形:

  1. imagesc(A)
  2. colormap(gray(256))
  3. axis equal
复制代码

重新按比例显示。

  1. colormap(jet)
复制代码



CDataMappling

  1. h = image(A);
  2. get(h, 'CDataMapping')
复制代码


ans =
direct
    你可以看到这个属性的默认值为'direct'。这表示A的值直接被用作colormap的索引值。它的值也可以为'scaled',当你使用imagesc时则为这个值。

  1. h = imagesc(A);
  2. get(h, 'CDataMapping')
复制代码


ans =
scaled
   比例的最大最小值由axesCLimcolor limits)属性控制。

  1. h = imagesc(A);
  2. get(gca, 'CLim')
复制代码


ans =
1   25
   默认情况下,imagesc会将A的最大最小值赋给CLim。你也可以指定你自己的颜色界限,通过添加imagesc函数输入参数。

  1. imagesc(A, [10 15])
  2. colormap(gray)
  3. axis equal
复制代码


)。

  1. theta = linspace(0, 2*pi, 256);
  2. I = repmat((-cos(2*theta) + 1)/2, [256 1]);
  3. h = imshow(I);     % Save the handle for use below.
复制代码


会自动的为以下参数赋值:

  1. get(h, 'CDataMapping')
复制代码


ans =
scaled
对于一个floating-point图形,图像处理工具箱约定将0显示为黑色,1显示为白色。

  1. get(gca, 'CLim')
复制代码


ans =
0      1
工具箱会自动使用grayscale colormap

  1. map = get(gcf, 'Colormap');
  2. map(1:5, :)
复制代码


ans =
            0           0        0
       0.0039      0.0039   0.0039
       0.0078      0.0078   0.0078
       0.0118      0.0118   0.0118
       0.0157      0.0157   0.0157

   工具箱里的imshowimtool也可以不使用既定的显示范围而自定义黑和白的值。就像imagesc命令一样,添加一个表示黑和白值的2元素向量的输入参数,如下。0.4及以下表示为黑色,0.6及以上表示为白色。

  1. imshow(I, [0.4 0.6])
复制代码



  1. bw = imread('text.png');
  2. islogical(bw)
复制代码


ans =
      1

  1. h = imshow(bw);
复制代码


,则一些像素可能被带透明的显示。

相关文章:

  • 2022-12-23
  • 2021-12-12
  • 2022-12-23
  • 2022-12-23
  • 2021-04-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-17
  • 2022-12-23
  • 2022-12-23
  • 2021-06-29
  • 2021-05-21
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案