图像类型
索引图像
索引图像由数据矩阵 X
和颜色图矩阵 map
组成。map
是一个 double
类的 m×3 数组,由 [0, 1] 范围内的浮点值组成。map
的每一行指定单一颜色的红、绿和蓝分量。索引图像使用像素值到颜色图值的“直接映射”。每个图像像素的颜色是以 X
中的对应值为索引求得的 map
中的值。因此 X
值必须是整数。值 1 指向 map
中第一行,值 2 指向第二行,以此类推。使用以下语句显示索引图像
image(X); colormap(map)
颜色图通常与索引图像一起存储,而且当您使用 imread
函数时,颜色图会随着索引图像一起加载。但您不仅限于使用默认的颜色图,您可以根据意愿选择任何一个颜色图。属性 CDataMapping
的说明描述了如何修改所使用映射的类型。
下一幅图展示了索引图像的结构。图像中的像素以整数表示,该整数是颜色图中存储的颜色值的指针(索引)。
图像矩阵和颜色图中值的关系取决于图像矩阵的类。如果图像矩阵是 double
类,那么值 1 指向颜色图中的第一行,值 2 指向第二行,以此类推。如果图像矩阵是 uint8
或 uint16
类,那么有个偏移 - 值 0 指向颜色图中的第一行,值 1 指向第二行,以此类推。在图形文件格式中使用偏移是为了使可支持的颜色数目达到最大。在上面的图像中,图像矩阵是 double
类。由于没有偏移,值 5 指向颜色图的第五行。
灰度(强度)图像
灰度图像有时也称为强度图像,它是一个数据矩阵 I
,其中的值表示某一范围内的强度。灰度图像表示为单个矩阵,矩阵的每个元素对应一个图像像素。矩阵可能是 double
、uint8
或 uint16
类。尽管灰度图像很少与颜色图一起保存,但它仍需要用颜色图来显示。实际上,灰度图像被当做索引图像处理。
此图窗描绘了一幅 double
类的灰度图像。
要显示灰度图像,使请用 imagesc
(“图像缩放”)函数,它允许设置强度图像的范围。imagesc
会调整图像数据以使用整个颜色图。使用 imagesc
的双输入形式显示灰度图像,例如:
imagesc(I,[0 1]); colormap(gray);
imagesc
的第二个输入参数指定了所需的强度范围。imagesc
函数通过将范围内的第一个值(通常是 0)映射到第一个颜色图条目,第二个值(通常是 1)映射到最后一个颜色图条目来显示 I
。这两者之间的颜色值在余下的颜色图颜色中呈线性分布。
尽管常规的做法是使用灰度颜色图显示灰度图像,但您也可以使用其他颜色图。例如,以下语句以不同深浅的蓝色和绿色显示灰度图像 I
:
imagesc(I,[0 1]); colormap(winter);
要将具有任意值范围的矩阵 A
显示为灰度图像,请使用 imagesc
的单参数形式。使用一个输入参数,imagesc
会将数据矩阵的最小值映射为第一个颜色图条目,最大值映射为最后一个颜色图条目。例如:这两个线条是等价的:
imagesc(A); colormap(gray) imagesc(A,[min(A(:)) max(A(:))]); colormap(gray)
RGB(真彩色)图像
RGB 图像,有时称为真彩色图像,以 m×n×3 数据数组形式存储,该数组定义了对应图像每个像素的红色、绿色和蓝色分量。RGB 图像不使用调色板。每个像素的颜色由存储在每个像素位置的颜色平面的红色、绿色和蓝色强度决定。图形文件格式将 RGB 图像存储为 24 位图像,其中红色、绿色和蓝色分量各占 8 位。这样便可能产生 1600 万种颜色。这种可复制现实中图像的精度由此被称为“真彩色图像”。
RGB MATLAB® 数组可以是 double
、uint8
或 uint16
类。在 double
类的 RGB 数组中,每个颜色分量都是 0 到 1 之间的值。颜色分量为 (0,0,0) 的像素显示为黑色,颜色分量为 (1,1,1) 的像素显示为白色。每个像素的三个颜色分量沿数据数组的第三个维度存储。例如像素 (10,5) 的红色、绿色和蓝色分量分别存储在 RGB(10,5,1)
、RGB(10,5,2)
和 RGB(10,5,3)
中。
要显示真彩色图像 RGB
,请使用 image
函数:
image(RGB)
下一幅图显示 double
类的 RGB 图像。
要确定 (2,3) 处像素的颜色,请查看存储在 (2,3,1:3) 的 RGB 三元组:假设 (2,3,1) 包含值 0.5176
,(2,3,2) 包含 0.1608
,(2,3,3) 包含 0.0627
。则 (2,3) 处的像素颜色是
0.5176 0.1608 0.0627