1、第第2章章 数字图像表示及其处理数字图像表示及其处理本章重点:本章重点:图像的数字化以及数字化图像表示方法图像的数字化以及数字化图像表示方法图像图像存储格式存储格式用用VC+实现图像的读、写以及显示的编程实现图像的读、写以及显示的编程2.1 人眼成像过程人眼成像过程2.2 简单的图像形成模型简单的图像形成模型2.3 图像的数字化图像的数字化2.4 数字图像的基本类型数字图像的基本类型2.5 数字图像的基本文件格式数字图像的基本文件格式第第2章章 数字图像表示及其处理数字图像表示及其处理2.1 人眼成像过程人眼成像过程 人眼是一个平均半径为人眼是一个平均半径为20mm的的球状器官。它由三层薄膜包
2、围。球状器官。它由三层薄膜包围。最外层是坚硬的蛋白质膜,其最外层是坚硬的蛋白质膜,其中,位于前方的大约中,位于前方的大约16部分部分为有弹性的透明组织,称为角为有弹性的透明组织,称为角膜,光线膜,光线从这里进入眼内。从这里进入眼内。其余其余56为白色不透明组织,称为巩膜,作用是巩固和为白色不透明组织,称为巩膜,作用是巩固和保护整个眼球。中间一层由虹膜和脉络膜组成。保护整个眼球。中间一层由虹膜和脉络膜组成。虹膜的中间有一个圆孔,称为瞳孔。它的大小可以由连虹膜的中间有一个圆孔,称为瞳孔。它的大小可以由连接虹膜的环状肌肉组织来调节,以控制进入眼睛内部的接虹膜的环状肌肉组织来调节,以控制进入眼睛内部的
3、光通量大小,其作用和照相机中的光圈一样。最内一层光通量大小,其作用和照相机中的光圈一样。最内一层为视网膜,它的表面分布有大量光敏细胞。为视网膜,它的表面分布有大量光敏细胞。除了三层薄膜,在瞳孔后面还有一个扁球形的透明水晶体。除了三层薄膜,在瞳孔后面还有一个扁球形的透明水晶体。水晶体的作用如同可变焦距的一个透镜,它的曲率可以由水晶体的作用如同可变焦距的一个透镜,它的曲率可以由睫状肌的收缩进行调节,从而使景象始终能刚好地聚焦于睫状肌的收缩进行调节,从而使景象始终能刚好地聚焦于黄斑区。眼睛的晶状体和普通光学透镜之间的主要差别在黄斑区。眼睛的晶状体和普通光学透镜之间的主要差别在于前者的适应性强。于前者
4、的适应性强。用眼睛看建筑物侧面的图解,C点是晶状体的光心2.2 简单的图像形成模型简单的图像形成模型一幅图像实际上记录的是物体辐射能量的空间分布,一幅图像实际上记录的是物体辐射能量的空间分布,这个分布是空间坐标、时间和波长的函数,即这个分布是空间坐标、时间和波长的函数,即:I=(x,y,z,t)。当一幅图像为平面单色静止图像时,空间坐标变量当一幅图像为平面单色静止图像时,空间坐标变量z,波长波长和时间变量和时间变量t可以从函数中去除,一幅图像可以从函数中去除,一幅图像可以用二维函数可以用二维函数f(x,y)来表示来表示:f(x,y)=i(x,y)r(x,y)这里这里 0i(x,y)0r(x,y
5、)1 反射分量限制在反射分量限制在0和和1之间。之间。i(x,y)的性质取决于照射的性质取决于照射源,而源,而r(x,y)取决于成像物体的特性。取决于成像物体的特性。2.3 图像的数字化图像的数字化数字图像可以理解为对二维函数数字图像可以理解为对二维函数f(x,y)进行采样和进行采样和量化量化(即离散处理即离散处理)后得到的图像,因此,通常用二后得到的图像,因此,通常用二维矩阵来表示一幅数字图像。维矩阵来表示一幅数字图像。将一幅图像进行数字化的过程就是在计算机内生成将一幅图像进行数字化的过程就是在计算机内生成一个二维矩阵的过程。一个二维矩阵的过程。数字化过程包括三个步骤:扫描、采样和量化。数字
6、化过程包括三个步骤:扫描、采样和量化。2.3.1 采样采样 采样(采样(Sampling):对图像空间坐标的离散化,它对图像空间坐标的离散化,它决定了图像的空间分辨率。决定了图像的空间分辨率。用一个网格把待处理的图像覆盖,然后把每一小用一个网格把待处理的图像覆盖,然后把每一小格上模拟图像的各个亮度取平均值,作为该小方格格上模拟图像的各个亮度取平均值,作为该小方格中点的值;或者把方格的交叉点处模拟图像的亮度中点的值;或者把方格的交叉点处模拟图像的亮度值作为该方格交叉点上的值。值作为该方格交叉点上的值。采样行采样列像素行间隔采样间隔图像的采样图像的采样对一幅图像采样时,若每行(即横向)像素为对一幅
7、图像采样时,若每行(即横向)像素为N个,个,每列(即纵向)像素为每列(即纵向)像素为M个,则图像大小为个,则图像大小为MN个像素,从而个像素,从而f(x,y)构成一个构成一个MN实数矩阵:实数矩阵:)1,1()0,1()1,1()1,1()0,1()1,0()1,0()0,0(),(NMfMfNfffNfffyxf 每个元素为图像每个元素为图像f(x,y)的离散采样值,称之为像元的离散采样值,称之为像元或像素。或像素。2.3.1 量化量化把采样后所得的各像素灰度值从模拟量到离散量的把采样后所得的各像素灰度值从模拟量到离散量的转换称为图像灰度的量化。转换称为图像灰度的量化。量化是对图像幅度坐标的
8、离散化,它决定了图像的量化是对图像幅度坐标的离散化,它决定了图像的幅度分辨率。幅度分辨率。量化的方法包括:分层量化、均匀量化和非均量化的方法包括:分层量化、均匀量化和非均匀量化。匀量化。分层量化是把每一个离散样本的连续灰度值只分层量化是把每一个离散样本的连续灰度值只分成有限多的层次。分成有限多的层次。均匀量化是把原图像灰度层次从最暗至最亮均均匀量化是把原图像灰度层次从最暗至最亮均匀分为有限个层次,如果采用不均匀分层就称匀分为有限个层次,如果采用不均匀分层就称为非均匀量化。为非均匀量化。(a)量化量化 (b)量化为量化为8 bit量化示意图量化示意图(a)256(a)256级灰度图象级灰度图象
9、(b)(b)子图子图 (c)(c)子图对应的量化数据子图对应的量化数据 图像量化实例图像量化实例(a)(b)(c)对一幅图像,当量化级数一定时,采样点数对对一幅图像,当量化级数一定时,采样点数对图像质量有着显著的影响。采样点数越多,图图像质量有着显著的影响。采样点数越多,图像质量越好;当采样点数减少时,图上的块状像质量越好;当采样点数减少时,图上的块状效应就逐渐明显。效应就逐渐明显。当图像的采样点数一定时,采用不同量化级数当图像的采样点数一定时,采用不同量化级数的图像质量也不一样。量化级数越多,图像质的图像质量也不一样。量化级数越多,图像质量越好,当量化级数越少时,图像质量越差。量越好,当量化
10、级数越少时,图像质量越差。量化级数最小的极端情况就是二值图像,图像量化级数最小的极端情况就是二值图像,图像会出现假轮廓。会出现假轮廓。采样点数和量化级数的关系:采样点数和量化级数的关系:(a)(a)采样点采样点256256256256时的图像时的图像 (b)(b)采样点采样点64646464时的图像时的图像(c)(c)采样点采样点323232 2时的图像时的图像(d)(d)采样点采样点161616 6时的图像时的图像 采样点数与图像质量之间的关系采样点数与图像质量之间的关系(a)(b)(c)(d)(a)(a)量化为量化为2 2级的级的LenaLena图像图像 (b)(b)量化为量化为1616级
11、的级的LenaLena图像图像(c)(c)量化为量化为256256级的级的LenaLena图像图像 量化级数与图像质量之间的关系量化级数与图像质量之间的关系2.4 数字图像的基本类型数字图像的基本类型计算机一般采用两种方式存储静态图像:计算机一般采用两种方式存储静态图像:位映射(位映射(Bitmap),即位图存储模式;),即位图存储模式;向量处理(向量处理(Vector),也称矢量存储模式。),也称矢量存储模式。位图也称为栅格图像,是通过许多像素点表示一幅位图也称为栅格图像,是通过许多像素点表示一幅图像,每个像素具有颜色属性和位置属性。图像,每个像素具有颜色属性和位置属性。矢量图只存储图像内容
12、的轮廓部分,而不是存储图矢量图只存储图像内容的轮廓部分,而不是存储图像数据的每一点。像数据的每一点。2.4.1 二值图像二值图像二值图像也叫黑白图像,就是图像像素只存在二值图像也叫黑白图像,就是图像像素只存在0,1两个值。两个值。二进制的二进制的lenna图像图像2.4.2 灰度图像灰度图像灰度图像是包含灰度级的图像,如灰度图像是包含灰度级的图像,如64级,级,256级级等。等。如当像素灰度级用如当像素灰度级用8 bit表示时,每个像素的取值表示时,每个像素的取值就是就是256种灰度中的一种,即每个像素的灰度值为种灰度中的一种,即每个像素的灰度值为0到到255中的一个。中的一个。通常,用通常,
13、用0表示黑,表示黑,255表示白,从表示白,从0到到255亮度逐亮度逐渐增加。渐增加。2.4.3 索引图像索引图像索引图像把像素值直接作为索引颜色的序号。索引图像把像素值直接作为索引颜色的序号。根据索引颜色的序号就可以找到该像素的实际颜色。根据索引颜色的序号就可以找到该像素的实际颜色。当把索引图像读入计算机时,索引颜色将被存储到当把索引图像读入计算机时,索引颜色将被存储到调色板中。调色板中。调色板是包含不同颜色的颜色表,每种颜色以红,调色板是包含不同颜色的颜色表,每种颜色以红,绿,蓝三种颜色的组合来表示。调色板的单元个数绿,蓝三种颜色的组合来表示。调色板的单元个数是与图像的颜色数一致的。是与图
14、像的颜色数一致的。256色图像有色图像有256个索引个索引颜色,相应的调色板就有颜色,相应的调色板就有256个单元。个单元。2.4.4 RGB彩色图像彩色图像RGB图像是一类图像的总称。图像是一类图像的总称。这类图像不使用单独的调色板,每一个像素的颜色这类图像不使用单独的调色板,每一个像素的颜色由存储在相应位置的红、绿、蓝颜色分量共同决定。由存储在相应位置的红、绿、蓝颜色分量共同决定。RGB图像是图像是24位图像,红、绿、蓝分量分别占用位图像,红、绿、蓝分量分别占用8位,理论上可以包含位,理论上可以包含16M种不同的颜色。种不同的颜色。2.5 数字图像的基本文件格式数字图像的基本文件格式每一种
15、图像文件均有一个文件头,每一种图像文件均有一个文件头,在文件头之后才在文件头之后才是图像数据。是图像数据。文件头的内容一般包括文件类型、文件制作者、制文件头的内容一般包括文件类型、文件制作者、制作时间、版本号、文件大小等内容。作时间、版本号、文件大小等内容。各种图像文件的制作还涉及到图像文件的压缩方式各种图像文件的制作还涉及到图像文件的压缩方式和存储效率等。和存储效率等。常用的图像文件存储格式主要有常用的图像文件存储格式主要有BMP文件、文件、JPG文文件、件、PCX文件、文件、TIFF文件以及文件以及GIF文件等。文件等。2.5.1 BMP图像文件格式图像文件格式第一部分为位图文件头第一部分
16、为位图文件头BITMAPFILEHEADER,它是一个结构体,其定义如下:它是一个结构体,其定义如下:typedef struct tagBITMAPFILEHEADER WORD bfType;DWORDbfSize;WORD bfReserved1;WORD bfReserved2;DWORDbfOffBits;BITMAPFILEHEADER;这个结构的长度是固定的,为这个结构的长度是固定的,为14个字节(个字节(WORD为无符号为无符号16位二进制整数,位二进制整数,DWORD为无符号为无符号32位位二进制整数)。二进制整数)。第二部分为位图信息头第二部分为位图信息头BITMAPINF
17、OHEADER,也是一个结构,其定义如下:也是一个结构,其定义如下:typedef struct tagBITMAPINFOHEADER DWORD biSize;LONGbiWidth;LONGbiHeight;WORDbiPlanes;WORDbiBitCount;DWORDbiCompression;DWORDbiSizeImage;LONGbiXPelsPerMeter;LONGbiYPelsPerMeter;DWORDbiClrUsed;DWORDbiClrImportant;BITMAPINFOHEADER;这个结构的长度是固定的,为这个结构的长度是固定的,为40个字节(个字节(L
18、ONG为为32位二进制整数)。其中,位二进制整数)。其中,biCompression的有效的有效值为值为BI_RGB、BI_RLE8、BI_RLE4、BI_BITFIELDS。第三部分为调色板第三部分为调色板(Palette)。真彩色图像不需要调。真彩色图像不需要调色板。调色板实际上是一个数组,色板。调色板实际上是一个数组,共有共有biClrUsed个元素。数组中每个元素的类型是个元素。数组中每个元素的类型是RGBQUAD结结构,占构,占4个字节,其定义如下:个字节,其定义如下:typedef struct tagRGBQUAD BYTE rgbBlue;/该颜色的蓝色分量该颜色的蓝色分量 B
19、YTE rgbGreen;/该颜色的绿色分量该颜色的绿色分量 BYTE rgbRed;/该颜色的红色分量该颜色的红色分量 BYTE rgbReserved;/保留值保留值 RGBQUAD;第四部分就是实际的图像数据。对于用到调色板的第四部分就是实际的图像数据。对于用到调色板的位图,图像数据就是该像素颜色在调色板中的索引位图,图像数据就是该像素颜色在调色板中的索引值,对于真彩色图像,图像数据就是实际的值,对于真彩色图像,图像数据就是实际的R、G、B值。值。对于对于2色位图,用色位图,用1位就可以表示该像素的颜色(一位就可以表示该像素的颜色(一般般0表示黑,表示黑,1表示白),所以一个字节可以表示
20、表示白),所以一个字节可以表示8个像素。个像素。对于对于16色位图,用色位图,用4位可以表示一个像素的颜色,位可以表示一个像素的颜色,所以所以1个字节可以表示个字节可以表示2个像素。个像素。对于对于256色位图,一个字节刚好可以表示色位图,一个字节刚好可以表示1个像素。个像素。2.5.2 TIFF图像文件格式图像文件格式标记图像文件格式标记图像文件格式TIFF(Tag Image File Format)是是目前图像文件格式中最复杂的一种,也是目前流行目前图像文件格式中最复杂的一种,也是目前流行的图像文件交换标准之一。的图像文件交换标准之一。TIFF格式文件的设计考虑了扩展性、格式文件的设计考
21、虑了扩展性、方便性和可方便性和可修改性,因此非常复杂,要求用更多的代码来控制修改性,因此非常复杂,要求用更多的代码来控制它,结果导致文件读写速度慢,它,结果导致文件读写速度慢,TIFF代码也很长。代码也很长。TIFF文件由文件头、参数指针表与参数域、参数文件由文件头、参数指针表与参数域、参数数据表和图像数据数据表和图像数据4部分组成。部分组成。参数指针由一个参数指针由一个2字节的整数和其后的一系列字节的整数和其后的一系列12字节参数域字节参数域构成,最后以一个长整型数结束。若最后的长整型数为构成,最后以一个长整型数结束。若最后的长整型数为0,表示文件的参数指针表到此为止,否则该长整数为指向下表
22、示文件的参数指针表到此为止,否则该长整数为指向下一个参数指针表的偏移。一个参数指针表的偏移。2.5.3 GIF图像文件格式图像文件格式 GIF(Graphics Interchange Format)文件的全称)文件的全称是图形交换文件格式。是图形交换文件格式。该形式存储的文件主要是为不同的系统平台交流和该形式存储的文件主要是为不同的系统平台交流和传输图像提供方便传输图像提供方便,是在是在Web及其他联机服务上常及其他联机服务上常用的一种文件格式,用于用的一种文件格式,用于 HTML文档中的索引颜文档中的索引颜色图像。图像最大不能超过色图像。图像最大不能超过64 M,颜色最多为,颜色最多为25
23、6色。色。GIF图像文件采取图像文件采取LZW压缩算法,存储效率高,压缩算法,存储效率高,支持多幅图像定序或覆盖,交错多屏幕绘图以及文支持多幅图像定序或覆盖,交错多屏幕绘图以及文本覆盖。本覆盖。GIF主要是为数据流而设计的一种传输格式,而不主要是为数据流而设计的一种传输格式,而不是作为文件的存储格式。是作为文件的存储格式。GIF有五个主要部分以固定顺序出现,所有部分均有五个主要部分以固定顺序出现,所有部分均由一个或多个块由一个或多个块(block)组成。组成。每个块第一个字节中存放标识码或特征码标识。这每个块第一个字节中存放标识码或特征码标识。这些部分的顺序为:文件标志块、逻辑屏幕描述块、些部
24、分的顺序为:文件标志块、逻辑屏幕描述块、可选的可选的“全局全局”色彩表块色彩表块(调色板调色板)、各图像数据块、各图像数据块(或专用的块)以及尾块(结束码)。(或专用的块)以及尾块(结束码)。2.5.4 PCX图像文件格式图像文件格式PCX文件格式由文件格式由ZSoft公司设计公司设计,是最早使用的图像是最早使用的图像文件格式之一。文件格式之一。PCX支持支持256种颜色,结构较简单,存取速度快,种颜色,结构较简单,存取速度快,压缩比适中,适合于一般软件的使用。压缩比适中,适合于一般软件的使用。PCX 格式支持格式支持RGB、索引颜色、灰度和位图颜色、索引颜色、灰度和位图颜色模式,支持模式,支
25、持 RLE 压缩方法,压缩方法,图像颜色的位数可以图像颜色的位数可以是是 1、4、8 或或 24。PCX图像文件由三个部分组成:文件头、图像数据图像文件由三个部分组成:文件头、图像数据和和256色调色板。色调色板。2.5.5 JPEG图像格式图像格式JPEG(Joint Photographers Experts Group)即静止即静止图像压缩标准图像压缩标准,是由是由ISO和和CCITT为静态图像所建为静态图像所建立的第一个国际数字图像压缩标准,主要是为了解立的第一个国际数字图像压缩标准,主要是为了解决专业摄影师所遇到的图像信息过于庞大的问题。决专业摄影师所遇到的图像信息过于庞大的问题。J
26、PEG 格式支持格式支持 24 位颜色,并保留照片和其他连位颜色,并保留照片和其他连续色调图像中存在的亮度和色相的显著和细微的变续色调图像中存在的亮度和色相的显著和细微的变化。化。2.5.6 用用VC+实现实现BMP图像文件的显示图像文件的显示 本节介绍如何在本节介绍如何在VC+6.0中编程实现中编程实现BMP图像的显示。图像的显示。下面介绍具体步骤:下面介绍具体步骤:步骤一、打开步骤一、打开VC+6.0,选择,选择File|New进入界面进入界面 在在Projects中选择中选择MFC AppWinzard(exe),在,在Project name中输入项目名称,本例为中输入项目名称,本例为
27、ReadBMP,在,在Location中输入项中输入项目要保存的文件夹。点击目要保存的文件夹。点击“OK”进入下一步。进入下一步。步骤二、选择文档类型步骤二、选择文档类型 在本例中使用的是单文档视图结构,所以这里选择在本例中使用的是单文档视图结构,所以这里选择Single document。其余部分设置使用。其余部分设置使用VC+6.0的默认设置,点击的默认设置,点击“Finish”完成项目创建。完成项目创建。步骤三、为了将步骤三、为了将BMP中的数据读入到内存中,在中的数据读入到内存中,在项目中建立专门处理项目中建立专门处理BMP文件头和数据的文件:文件头和数据的文件:DIBAPI.H和和D
28、IBAPI.CPP,在其中实现对,在其中实现对BMP文文件的大部分处理。件的大部分处理。选择选择File|New从弹出界面从弹出界面Files选项中选择选项中选择C/C+Header File,建立一个新的头文件。在右边的,建立一个新的头文件。在右边的File输入框中输入文件名,这里命名为输入框中输入文件名,这里命名为DIBAPI,默认,默认后缀为后缀为.H。同上类似,选择同上类似,选择C+Source File建立建立DIBAPI.CPP文件。几文件。几个函数的详细代码解释见教材个函数的详细代码解释见教材31-40页页步骤四、在步骤四、在CReadBMPDoc类中添加变量类中添加变量CPal
29、ette*m_palDIB 和和HDIB m_hDIB。m_hDIB用于保存当前用于保存当前BMP图像句柄,图像句柄,m_palDIB用于指向用于指向BMP图像对应的调图像对应的调色板。在色板。在CReadBMPDoc的构造函数中初始化:的构造函数中初始化:m_hDIB=NULL;m_palDIB=NULL。步骤五、为了取得保存在当前文档中的步骤五、为了取得保存在当前文档中的HDIB和和Palette数据,在数据,在CReadBMPDoc类中添加方法:类中添加方法:GetHDIB和和GetDocPalette,具体,具体 见教材见教材40-41页页步骤六、响应类步骤六、响应类CReadBMPD
30、oc OnOpenDocument事件,以实现事件,以实现打开文件的操作。打开文件的操作。从从“View|ClassWizard”进入进入“MFC ClassWizard”界面,在界面,在“Message Maps”选项中完成消息映射。具体代码见教材选项中完成消息映射。具体代码见教材42-44步骤七、完成图片的打开操作之后,图片的数据就已经步骤七、完成图片的打开操作之后,图片的数据就已经被保存在程序中,为了将图片显示出来还需要响应类被保存在程序中,为了将图片显示出来还需要响应类CReadBMPView的的OnDraw事件,在其中完成图像显示。事件,在其中完成图像显示。具体代码见教材具体代码见教
31、材44页。页。步骤八、编译并运行程序,自此一个用于打开步骤八、编译并运行程序,自此一个用于打开BMP图像图像的单文档视图结构的程序就完成了。通过修改当前位图的单文档视图结构的程序就完成了。通过修改当前位图句柄句柄m_hDIB中存放像素的数据就可以对图像进行改变中存放像素的数据就可以对图像进行改变了。了。2.6 小结小结 一幅图像实际上记录的是物体辐射能量的空间分布,一幅图像实际上记录的是物体辐射能量的空间分布,这个分布是空间坐标、时间和波长的函数。当一幅这个分布是空间坐标、时间和波长的函数。当一幅图像为平面单色静止图像时,图像可以用二维函数图像为平面单色静止图像时,图像可以用二维函数f(x,y
32、)来表示,它是一个有界函数。来表示,它是一个有界函数。将一幅图像数字化的过程主要包括扫描,采样和量将一幅图像数字化的过程主要包括扫描,采样和量化,其结果就是在计算机内生成一个二维矩阵。化,其结果就是在计算机内生成一个二维矩阵。计算机一般采用两种方式存储静态图像:一种是位计算机一般采用两种方式存储静态图像:一种是位映射,即位图存储模式;另一种是向量处理,也称映射,即位图存储模式;另一种是向量处理,也称矢量存储模式。矢量存储模式。位图可以分成二值图像、索引图像、灰度图像和位图可以分成二值图像、索引图像、灰度图像和RGB图像四种。图像四种。常用的图像文件存储格式主要有常用的图像文件存储格式主要有BMP图像文件、图像文件、JPEG图像文件、图像文件、PCX图像文件、图像文件、TIFF图像文件以图像文件以及及GIF图像文件等。图像文件等。