1.5 图像表达
1.5.1 图像的矩阵表达
任何一幅图像都可看做无数个很小的光点的强度的集合,因此用数学方法描述一幅图像时,常考虑其光点的性质。一幅图像所包含的信息首先表现为光点的强度(intensity),即一幅图像可看成空间各坐标点上光点的强度I的集合。其普遍的数学表达式为
式中,(x, y, z)为空间坐标;λ为波长;t为时间;I为光点(x, y, z)的强度(幅度)。这里表示的是一幅动态t、彩色/光谱λ、三维(x, y, z)的立体图像。
对于静态图像,则与时间无关;对于单色图像(灰度图像),则波长λ为常数;对于二维的平面图像,则与坐标 z 无关。本书主要针对二维的静态灰度图像。术语亮度或灰度经常用于指灰度图像的光点的强度。本书第9章将涉及彩色图像。在RGB彩色系统中,彩色图像包括三个成分的图像,即红(R)、绿(G)、蓝(B)。鉴于此,许多由灰度图像开发的技术可以通过分别处理三个成分的图像扩展到彩色图像。
一幅图像所对应的坐标以及幅值可能是无限的和连续的。这就需要把这类图像转变成数字形式,包括坐标的有限化和离散化(数字化)及幅值的有限化和离散化(数字化)。坐标的数字化称为采样,幅值的数字化称为量化。因此,当一幅图像I=f(x, y) 所对应的坐标(x, y)和幅值I都为有限的和离散的量时,就称为数字图像。
1.坐标系
采样和量化的结果是一个实数矩阵。在本书中我们用两种主要的方式表示数字图像。假定一幅图像被采样成M行N列的图像,我们称图像大小为M×N。坐标 (x, y) 的值是离散量。为了标记清晰方便,对于这些离散坐标采用整数值。在许多图像处理书籍中,图像原点被定义为 (x, y)= (0, 0)。沿着图像的第一行的下一个坐标值是 (x, y)= (0, 1)。记住标记 (0, 1) 被用来表示沿着第一行的第二个样点,这并不意味着图像采样时这些值是物理坐标上的实际值,图1-8(a)表示了这个坐标系。注意x值的范围是0到M-1的整数,y值的范围是0到N-1的整数。
图1-8 坐标系
图像处理工具箱(Image processing toolbox)是MATLAB软件中扩展数字计算环境能力的函数库。MATLAB语言的这些函数及其表达方便了用户的使用,为求解图像处理问题提供了理想的软件编程环境。用于图像处理工具箱(以下简称工具箱)中表示矩阵的坐标系不同于先前所述的常用坐标系。首先,工具箱不用 (x, y) 而用标记 (r, c) 来指示行和列。其次,坐标系的原点是 (r, c)= (1, 1),这样r值的范围是1到M的整数,c值的范围是1到N的整数。这个坐标系表示在图1.8(b)中。
工具箱文件把图 1.8(b)所示的坐标系称为像素坐标系。工具箱不常使用另外一个称为空间坐标坐的坐标系,它用x作为列、y作为行。如无例外,本书将不使用工具箱的空间坐标系,但读者一定会在工具箱文件中遇到这个术语。
2.矩阵形式的图像
由图1.8(a)中的坐标系和先前的讨论可知,数字图像函数可表示如下:
这个等式的右侧是所定义的矩阵形式的图像。这个矩阵的每个元素被称为像素(image element, picture element, pixel, pel)。术语图像(image)和像素被用于后续章节中代表数字图像和它的元素。
图像作为MATLAB矩阵自然可以表示为:
很清楚,除了坐标原点的移动外,两种表达方式是一致的。标记f(p,q)表示位于行p、列q的元素。例如,f(6, 2)是矩阵f的第6行第2列上的元素。典型地,用字母M和N分别表示矩阵的行和列的数值。1×N矩阵被称为行向量(row vector),M×1矩阵被称为列向量(column vector)。1×1矩阵是一个标量(scalar)。
MATLAB中的矩阵命名如A、a、RGB、real_array等变量,必须以字母开头,且仅包括字母、数字及下划线。
1.5.2 图像的数据结构
图像处理中常用的基本数据结构包括矩阵(如上所述)、链码、属性表等;此外还常用分层数据结构,如金字塔和四叉树(pyramids and quadtrees)结构。
数据结构是指数据的组织方式,对算法的选择和其实现的容易程度有明显的影响。数据结构的选择在程序设计中是关键性的步骤。
算法 + 数据结构 = 程序(algorithm + data structure = program)
逻辑 + 控制 = 算法(logic + control = algorithm)
1.图像数据的表示层次
图像数据的表示层次反映图像处理的不同阶段,表达图像数据的不同抽象程度。总的来说有以下几个逐级升高的表示层次。
① 像素层图像:由原始数据组成,是像素亮度的整数矩阵。
② 分割图像:图像被分割为可能属于同一物体的区域。
③ 几何表示:二维(2D)和三维(3D)形状信息。
④ 关系模型:数据更高层次的抽象,使所用数据更为有效。
2.图像的基本数据结构
基本数据结构有矩阵(matrices)、链码(chains)、图形(graphs)、物体属性表(lists of object properties)、关系数据库(relational databases)等。它们不仅用于图像信息的直接表示,而且还是更复杂的图像分层表示方法的基础,如金字塔(pyramids)和四叉树(quadtrees)结构。
(1)矩阵
矩阵是低层图像表示的最普通的数据结构,矩阵元素是整型数值,如1.5.1节所述。这类图像数据通常是图像获取设备(摄像机、扫描仪等)的直接输出。
(2)链码
链码描述物体的边界,链码中的符号一般对应于图像基元的邻接关系,如图1-9所示。链码可以用静态数据结构来表示,如 1 维数组,取其大小为链码的最大可能长度;也可以用动态数据结构来表示,而且这样在节省存储空间方面更合适。
图1-9 链码示例,参考像素用箭头标注:00077665555556600000006444444442221111112234445652211
(3)行程编码
行程编码通常用于图像矩阵中符号串的表示。例如,传真机就使用这种方式。在二值图像中,行程编码仅记录图像中属于物体的区域。图像的每行表示成一个子表,它的第一个元素为行号;然后是两个纵坐标构成的项,第一个为行程开始的纵坐标(列号),第二个为行程结束的纵坐标。一行中可以有若干个这样的序列项,如图1-10所示。
图1-10 行程编码示例,编码为(11144)(214)(52355)
行程编码也可用于表示含有多个亮度层次的图像,这时子表中必须记录序列的亮度值。
(4)拓扑数据结构
图像被描述成一组元素及其相互关系的图结构。例如,赋值的属性图、区域邻接图。区域邻接图示例如图1-11所示。
图1-11 区域邻接图示例
(5)关系结构
信息集中在语义上重要的图像组成部分上(它们是图像分割的结果),即物体之间的关系上,适用于高层次的图像理解工作。例如,使用关系结构描述自然场景的示意图及物体关系属性表如图1-12所示。
图1-12 基于关系结构描述物体
3.图像的分层数据结构
分层数据结构将图像描述成若干不同粒度的层次,使算法可以根据需要将处理控制在较小的数据量上;只有必要时,处理才会在最高的数据分辨率上进行。两种典型的分层表示的数据结构是金字塔(pyramids)和四叉树(quadtrees)结构。
(1)金字塔
图像的M-pyramid金字塔结构是一个图像序列{ML, ML-1,…, M0} ,其中ML是具有原始图像分辨率的图像,即原始图像本身,然后依次降低一半分辨率得到该图像序列。当原始图像的分辨率是2的整数幂时,M0则仅对应于一个像素。当需要对图像的不同分辨率同时进行处理时,可以采用这种数据结构。分辨率每降低一层,数据量则减少到原数据量的1/4,因而处理速度差不多提高4倍。
M-pyramid金字塔结构存储所有图像矩阵需要的像素个数为
一般而言,同时使用几个分辨率层次比仅使用单个层次优越,这些图像可以表示成树状金字塔结构的T-pyramid。T-pyramid是树结构,每个结点有4个子结点,如图1-13所示。
图1-13 T-pyramid
(2)四叉树
四叉树是对T-pyramid的改进,除叶子结点外,每个结点有4个子结点(西北NW:north-western,东北NE:north-eastern,西南SW:south-western,东南SE:south-eastern)。与T-pyramid一样,在每个层次图像被分解为4个象限。如果父结点有4个与它的值(如亮度)一样的子结点,则无须保留这些子结点,如图1-14所示。
图1-14 四叉树
图像分层表示的缺点如下:
① 依赖于物体的位置、方向和相对大小。
② 两个仅有微小差别的相似图像可能会具有非常不同的金字塔结构或四叉树结构。
③ 甚至当两个图像描述的是完全相同而只是略微移动了的景物时,可能会产生完全不同的表示。