Main Content

MATLAB 中使用图像类型

MATLAB® 将图像表示为数组(通常是二维矩阵),其中每个元素对应所显示图像的一个像素。在 MATLAB 中处理图像类似于处理任何其他类型的矩阵数据,您可以在 MATLAB 中将任何二维数据显示为图像。显示图像有两种常见方式:

图像类型

具有不同数组维度的三种常见图像类型是索引图像、灰度图像(强度图像)和 RGB 图像(真彩色图像)。下表摘要显示了这些图像类型。

图像类型数据矩阵颜色图矩阵示例
索引图像m×np×3

读取和显示索引图像

Three cobs of corn displayed with color.

灰度(强度)图像m×n默认情况下没有,但您可以应用颜色图。

读取和显示灰度图像

Three cobs of corn displayed in gray.

RGB(真彩色)图像m×n×3

读取和显示 RGB 图像

Image of the earth.

如果您正在处理图像文件,可以使用 imfinfo 函数检查图像类型。例如,确定 peppers.png 的图像类型。

info = imfinfo("peppers.png");
info.ColorType
ans = 'truecolor'

读取和显示图像文件

处理图像通常涉及将图像数据加载到 MATLAB 工作区中,显示图像以及处理图像数据。但是,处理图像的过程取决于图像类型。

索引图像

索引图像存储为图像数据矩阵 X 和颜色图矩阵 mapmap 的每一行指定单一颜色的红、绿和蓝分量。索引图像使用像素值到颜色图值的直接映射。每个图像像素的颜色通过使用 X 的对应值作为存储在颜色图中颜色值的索引(指针)来确定。X 是包含整数的 m×n 矩阵,其中值 1 指向 map 中第一行,值 2 指向第二行,依此类推。

例如,对于此玉米的索引图像,数据矩阵中的值 2 是颜色图第 2 行的索引,数据矩阵中的值 15 是颜色图第 15 行的索引。

Image of three ears of corn and its data matrix and colormap. The data matrix contains integer values that map into the colormap, which contains red, green, and blue values for pixel colors.

读取和显示索引图像

使用 imread 加载索引图像,同时指定数据矩阵 X 和颜色图 map 作为输出参量。然后用颜色图显示数据矩阵。

[X,map] = imread("corn.png");
imshow(X,map)

map 存储与图像文件相关联的颜色图。不过,您可以使用 imshow 函数指定任何颜色图。例如,将 map 转换为灰度颜色图并使用新颜色图显示图像数据。

newmap = cmap2gray(map);
imshow(X,newmap)

您可以使用矩阵下标从图像数据矩阵中选择单个像素。图像数据矩阵的大小对应于图像中的像素数。例如,X 表示由 415 行和 312 列像素组成的图像。

sz = size(X)
sz = 1×2

   415   312

获取 X 的第 2 行第 15 列像素的颜色图索引。

val = X(2,15)
val = uint8
    39

map 进行索引,并显示该像素的红色、绿色和蓝色强度的三个值。

color = map(val,:)
color = 1×3

    0.4588    0.2902    0.2627

灰度(强度)图像

灰度图像有时也称为强度图像,它是一个存储为 m×n 的数据矩阵 X,其中的值表示某一范围内的强度。灰度图像表示为单个矩阵,矩阵的每个元素对应一个图像像素。尽管灰度图像很少与颜色图一起保存,但它仍需要用灰度颜色图来显示。实际上,灰度图像被当做索引图像处理。

例如,对于玉米的此灰度图像,数据矩阵包含范围 [0, 255] 内的整数来表示每个像素的强度。

Grayscale image of three ears of corn and its data matrix. The data matrix contains integer values that represent the color intensities for the corresponding image pixels.

读取和显示灰度图像

将灰度图像加载到工作区中并显示该图像。

X = imread("corn_gray.png");
imshow(X)

您可以使用不同颜色图显示灰度图像。例如,通过使用 winter 颜色图以不同深浅的蓝色和绿色显示灰度图像。

imshow(X,winter)

您可以使用矩阵下标来访问图像的像素强度。例如,获取 X 的第 2 行第 15 列像素的灰度强度值。

val = X(2,15)
val = uint8
    156

RGB(真彩色)图像

RGB 图像,有时称为真彩色图像,以 m×n×3 数据数组形式存储,该数组定义了对应图像每个像素的红色、绿色和蓝色分量。图形文件格式将 RGB 图像存储为 24 位图像,其中红色、绿色和蓝色分量各占 8 位。这样排列便可能产生 1600 万种颜色。这种可复制现实中图像的精度由此得名“真彩色图像”。

RGB 图像不使用颜色图。每个像素的颜色由存储在每个像素位置的颜色平面的红色、绿色和蓝色强度决定。例如,RGB 图像 X 中的像素 (10, 5) 的红色、绿色和蓝色分量分别存储在 X(10,5,1)X(10,5,2)X(10,5,3) 中。

Image of Earth and its 3-D data array. The data array contains red, green, and blue intensity values for the corresponding image pixels.

读取和显示 RGB 图像

加载 RGB 图像。由于 RGB 图像数据存储为一个 m×n×3 数组,其中每个像素由其红色、绿色和蓝色强度值表示,因此图像数据 X 包含颜色数据。然后显示图像。

X = imread("earth.jpg");
imshow(X)

您可以通过 RGB 图像的数据数组轻松访问图像大小和颜色。图像数据数组的大小对应于图像中的像素数。例如,X 表示由 257 行和 250 列像素组成的图像。

size(X)
ans = 1×3

   257   250     3

要确定像素的颜色,请查看存储在数据数组的第三个维度中的 RGB 三元组。例如,获取 X 的第 50 行第 150 列的像素的颜色。这些元素分别表示像素颜色的红色、绿色和蓝色强度,范围为 0 到 255。

color = X(50,150,1:3)
color = 1x1x3 uint8 array
color(:,:,1) =

   119


color(:,:,2) =

   102


color(:,:,3) =

   110

将数组数据显示为图像

使用数组数据可能涉及将其显示为图像以理解和分析复杂模式,例如数据值的相对强度。使用 imageimagesc 函数,您可以将工作区中任何二维矩阵的数据显示为图像,并对其应用颜色图。

例如,创建一个二维矩阵。然后,将其显示为图像。

X = 4*peaks(100);
image(X)

为了更好地可视化数据值的差异,您可以通过使用 imagesc 函数并指定颜色图来自定义图像数据的显示方式。使用颜色栏显示图像,以查看图像数据如何映射到针对不同强度应用的颜色图。

imagesc(X);
colormap(turbo)
colorbar

将坐标区范围样式设置为 "equal",以便 MATLAB 保留图像的纵横比,并将像素显示为正方形。此外,设置坐标区范围。

axis equal
xlim([0 100])
ylim([0 100])

另请参阅

函数

属性

相关主题