MATLAB计算机视觉经典应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.1.3 图像的类型

在MATLAB中,图像的类型分为4类,分别如下。

• 二进制图像。

• 灰度图像。

• RGB(真彩色)图像。

• 索引(伪彩色)图像。

1. 二进制图像

二进制图像也称为二值图像,通常用一个二维数组来描述,1位表示一个像素,组成图像的像素值非0即1,没有中间值,通常0表示黑色,1表示白色。二进制图像一般用来描述文字或图形,优点是占用空间小,缺点是当表示人物或风景图像时只能描述其轮廓。

在MATLAB中,二进制图像是用一个0和1组成的二维逻辑矩阵表示的。这两个值分别对应黑和白,以这种方式来操作图像可以更容易识别出图像的结构特征。二进制图像操作只返回与其形式或结构有关的信息,如果希望对其他类型的图像进行同样的操作,则首先要将其转换为二进制图像,这可以通过调用MATLAB提供的im2bw函数来实现。二进制图像经常使用位图格式存储。

2. 灰度图像

灰度图像有时也称为强度图像,是一个数据矩阵,其中的值表示某一范围内的强度。灰度图像表示为单个矩阵,矩阵的每个元素对应一个图像像素,矩阵可能是double、uint8或uint16类型。尽管灰度图像很少与颜色图一起保存,但它仍需要用颜色图来显示。实际上,灰度图像被当作索引图像来处理。

典型的双精度灰度图像及其像素值矩阵如图3-4所示。

图3-4 典型的双精度灰度图像及其像素值矩阵

要显示灰度图像,需要用imagesc(图像缩放)函数,它允许设置灰度图像的强度范围。imagesc函数会调整图像数据以使用整个颜色图。使用imagesc函数的双输入形式显示灰度图像,例如:

imagesc函数的第二个输入参数指定了所需的强度范围。imagesc函数通过将范围内的第一个值(通常是0)映射到第一个颜色图条目,将第二个值(通常是1)映射到最后一个颜色图条目来显示灰度图像I。这两者之间的颜色值在余下的颜色图颜色中呈线性分布。

尽管常规的做法是使用灰度颜色图显示灰度图像,但也可以使用其他颜色图。例如,以下语句以不同深浅的蓝色和绿色显示灰度图像I:

要将具有任意值范围的矩阵A显示为灰度图像,需要使用imagesc函数的单参数形式。当使用一个输入参数时,imagesc函数会将数据矩阵的最小值映射为第一个颜色图条目,将最大值映射为最后一个颜色图条目。例如,以下这两个线条是等价的:

3. RGB图像

RGB图像有时称为真彩色图像,以m×n×3数据数组形式存储,该数组定义了对应图像每个像素的红色、绿色和蓝色分量。RGB图像不使用调色板,每个像素的颜色由存储在每个像素位置的颜色平面的红色、绿色和蓝色的强度决定。图形文件格式将RGB图像存储为24位图像,其中红色、绿色和蓝色分量各占8位,这样便可能产生1600万种颜色。由于它可复制现实中图像的精度,因此被称为真彩色图像。

MATLAB中的RGB数组可以是double、uint8或uint16类型。在double类的RGB数组中,每个颜色分量都是0到1之间的值。颜色分量为(0,0,0)的像素显示为黑色,颜色分量为(1,1,1)的像素显示为白色。每个像素的3个颜色分量都沿数据数组的第三个维度存储。例如,像素(10,5)的红色、绿色和蓝色分量分别存储在RGB(10,5,1)、RGB(10,5,2)和RGB(10,5,3)中。

要显示RGB图像,需要使用image函数:

图3-5显示的是double类的RGB图像及其调色板矩阵。

图3-5 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)。

4. 索引图像

索引图像是一种把像素值直接作为RGB调色板下标的图像。在MATLAB中,索引图像包含一个数据矩阵和一个颜色映射(调色板)矩阵map。数据矩阵可以是uint8、uint16或double类型。map是一个m×3的数据阵列,其中每个元素的值均为[0,1]区间的双精度浮点型数据。map矩阵中的每一行分别表示红色、绿色和蓝色的颜色值。索引图像可把像素的值直接映射为调色板数值,每个像素的颜色通过使用数据矩阵的像素值作为map矩阵的下标来获得,如值1指向map矩阵的第1行,值2指向第2行,依次类推。调色板通常与索引图像存储在一起,在装载图像时,调色板将和图像一同自动装载。

图3-6展示了索引图像的像素值与map矩阵的映射关系,图像中的像素以整数表示,该整数是颜色图中存储的颜色值的索引。

图3-6 索引图的像素值与map矩阵的映射关系