MATLAB像素颜色的表达方式

更新时间:2023-09-28 15:25:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MATLAB像素颜色的表达方式 2009年05月13日 星期三 10:42

MATLAB像素颜色的表达方式

252

255

253

250

249

255

254

249

5 8 0 6

243 256 245 243

247 243 243 249

23

24

24

23

这些像素值表示什么颜色?如果你很熟悉图像处理,那你应该知道255表示白色,所以上面这些数字表示白色或者接近白色的颜色。但是实际上,这些数字并不是来自一张图片。这些数字是波士顿地区的海拔高度,从U.S. Geological Survey (USGS) 。255是一个以米为单位的测量值,并不是颜色。

MATLAB可以将任何矩阵以图片的形式显示出来。比如,根据你使用命令的不同,MATLAB可以将数字海拔高度数据显示为如下的图。

或者是

将矩阵按照各种方式显示为图形,可以跟直观的了解你的数据。通过理解不同的图形类型,你可以知道MATLAB是如何将矩阵值转化为像素值的。你可以控制MATLAB对数据的显示方式,纠正有可能出错的图形。

图形类型

一种图像类型即代表了一种从矩阵值到像素值的映射方式。MATLAB有三种基本的图像类型: Truecolor ——数码相机,广泛用于计算机图形。

Indexed和scaled indexed ——经常用来显示科学或者工程数据,关联的颜色比例代表数据单位?。 Image Processing Toolbox 可以识别另外两种类型:

Grayscale ——经常用在图像处理和图像分析算法中

Binary ——经常用做为一个封装来表示图形的分割结果或者是感兴趣的区域。 Truecolor Images

在这种格式的图里,每一个图形像素由三个数字表示:红,绿,蓝,整个图形在MATLAB里由一个M-N-3的三维矩阵表达。显示函数和图形处理工具箱将这种矩阵视为一个truecolor图形。[真彩色]

比如,我们构造一个两行-两列的truecolor图形,使上面的两个像素为红和蓝色,下面的两个像素为黄色和灰色。

首先,构造3个2-2的矩阵来代表每一个颜色组分。 red = [1 0; 1 0.7] green = [0 0; 1 0.7] blue = [0 1; 0 0.7]

然后,使用cat函数来将这些颜色成分矩阵在第三维上拼合起来。 truecolor_image = cat(3, red, green, blue); 最后,使用image函数显示图形: image(truecolor_image)

axis equal % Display the image using square pixels

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

Indexed images索引图像

在索引图像里,颜色矩阵的值并不直接决定颜色像素。MATLAB将矩阵值作为索引在图像的colormap中进行颜色查表。比如,在MATLAB文件clown.mat中包含一下索引图形:

load clown 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)的值:

X (5, 5) ans = 61

这个值作为colormap重大行索引值: map (61, :) ans =

0.9961 0.5781 0.1250

像素(5,5)处由很多红色,一些绿色和一点蓝色构成。

使用两个MATLAB命令显示这幅图,一个用来显示图形同时另一个用来指定图像的colormap。 image(X) colormap(map)

colormap(cool)

跟truecolor图像不同的是,indexed图像的显示因使用不同的colormap而不同。

索引图像在15年前很常用,当时大部分颜色图形最多只能同时显示256种颜色。而现在可以使用不同颜色比例来显示数据。因为索引图像的值必须是整数,所以比例索引图像就具有更多灵活性。

Scaled indexed images比例索引图像

和一半的索引图像类似,比例索引图像使用矩阵值在图像的colormap中进行查表。而不同之处在于,矩阵值进行线性缩放而形成查表索引值。

比如,现在使用image命令来显示一个小的magic阵接着将它与imagese来对比。 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

使用image和255-color的grayscale colormap来显示A image(A)

colormap(gray(256)) axis equal

可以看到显示出的图像非常暗。那是因为A矩阵的元素都在1到25之间,所以图像只使用了grayscale colormap中的最开始的25种颜色来表示图形——均为暗黑色。

对比使用imagesc命令的图形: imagesc(A)

colormap(gray(256)) axis equal

? 如果CData是一个二维矩阵,则image显示的颜色对应于当前figure的colormap。MATLAB使用CData的值(直接或者比例)作为colormap的查表索引。

Image Object:CDataMapping

如果CData是一个二维矩阵,则image显示的颜色对应于当前figure的colormap,而image CDataMapping属性则控制了colormap的查表方式:

u 如果CDataMapping是'direct',则CData值直接作为查表索引 u 如果它的值是'scaled',则CData按比例查表。

对于truecolor图像,CDataMapping的值不影响图形显示。 Image Object:Cdata Class

如果图像是truecolor,则CData阵的类型(unit8,unit16或者double)决定了那一个值显示为白色。如果CData class是double,则[1 1 1]显示为白色。如果class是unit8,则[255 255 255]显示为白色。如果class是unit16,则[65535 65535 63355]显示为白色。[ 0 0 0]均显示为黑色。

如果图像是索引方式,则CData的class影响索引操作。double,则1代表第一个colormap颜色;unit8或者unit16,则0代表第一个colormap颜色。

Axes Object:CLim

如果CData是两维的且CDataMapping是'scaled',则CLim属性的向量决定了比例方式。第一个元素值对应colormap的第一个颜色,第二个元素值对应colormap最后一个颜色。

对于truecolor图像,或者CDataMapping属性为'direct',则CLim对图像颜色没有影响。 Figure Object:Colormap

如果CData是二维的,则所有显示的像素颜色均来自figure的Colormap。 对于truecolor图像,此属性没影响。 Transparency Properties透明度属性

如果figure AlphaMpa、image AlphaData或者是image AlphaDataMapping属性都设置为nondefault,则一些像素可能被带透明的显示。

本文来源:https://www.bwwdw.com/article/gnjd.html

Top