【中文转述】
| 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可以将海拔高度数据显示为如下图。的矩阵来代表每一个颜色成分。
- 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
可以看到,矩阵值直接指定了每一个像素的颜色。通过这种表达方式你可以很大程度上控制颜色显示,但是对于工程应用来说它并不是最适合的一种图形格式。中包含一下索引图形:
- load clown %可以在你的matlab中直接输入这个命令
- 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)
- 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
命令的图形:
- imagesc(A)
- colormap(gray(256))
- axis equal
重新按比例显示。
- colormap(jet)
CDataMappling
- h = image(A);
- get(h, 'CDataMapping')
ans =
direct
你可以看到这个属性的默认值为'direct'。这表示A的值直接被用作colormap的索引值。它的值也可以为'scaled',当你使用imagesc时则为这个值。
- h = imagesc(A);
- get(h, 'CDataMapping')
ans =
scaled
比例的最大最小值由axes的CLim(color limits)属性控制。
- h = imagesc(A);
- get(gca, 'CLim')
ans =
1 25
默认情况下,imagesc会将A的最大最小值赋给CLim。你也可以指定你自己的颜色界限,通过添加imagesc函数输入参数。
- imagesc(A, [10 15])
- colormap(gray)
- axis equal
)。
- theta = linspace(0, 2*pi, 256);
- I = repmat((-cos(2*theta) + 1)/2, [256 1]);
- h = imshow(I); % Save the handle for use below.
会自动的为以下参数赋值:
- get(h, 'CDataMapping')
ans =
scaled
对于一个floating-point图形,图像处理工具箱约定将0显示为黑色,1显示为白色。
- get(gca, 'CLim')
ans =
0 1
工具箱会自动使用grayscale colormap
- map = get(gcf, 'Colormap');
- 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
工具箱里的imshow和imtool也可以不使用既定的显示范围而自定义黑和白的值。就像imagesc命令一样,添加一个表示黑和白值的2元素向量的输入参数,如下。0.4及以下表示为黑色,0.6及以上表示为白色。
- imshow(I, [0.4 0.6])
。
- bw = imread('text.png');
- islogical(bw)
ans =
1
- h = imshow(bw);
,则一些像素可能被带透明的显示。