1第1章位图基础本章要点:数字图像的基本概念与设备相关位图(DDB)与设备无关位图(DIB)CDib类库的建立数字图像处理的应用1.1数字图像的基本概念计算机屏幕上显示出来的画面通常有两种描述方法:一种为图形,另一种为图像。图形、图像在存储结构和表示方法上有着根本的区别。图形是矢量结构的画面存储形式,是由指令集合组成的描述,这些指令描述构成一幅图的所有直线、圆、圆弧、矩形、曲线等的位置、维数和大小、形状、颜色,显示时需要相应的软件读取这些命令,并将其转变为屏幕上所显示的形状和颜色,图形记录的主要内容是坐标值或坐标值序列,对一般画面内容的颜色或亮度隐含且统一地描述,因此,矢量结构显式地表现画面内容的坐标值。图像是以栅格结构存储画面内容,栅格结构将一幅图划分为均匀分布的栅格,每个栅格称为像素,显式地记录每一像素的光度值(亮度或彩色),所有像素位置按规则方式排列,像素位置的坐标值却是有规则地隐含。图像由数字阵列信息组成,用以描述图像中各像素点的强度与颜色,因此图像适合于表现含有大量细节(如明暗变化、场景复杂和多种颜色等)的画面,并可直接、快速地在屏幕上显示出来。图像占用存储空间较大,一般需要进行数据压缩。色度学理论认为,任何颜色都可由红(Red)、绿(Green)、蓝(Blue)三种基本颜色按照不同的比例混合得到。红、绿、蓝被称为三原色,简称RGB三原色。在PC的显示系统中,显示的图像是由一个个像素组成的,每一个像素都有自己的颜色属性,像素的颜色是基于RGB模型的,每一个像素的颜色由红,绿,蓝三原色组合而成。3种颜色值的结合确定了在图像上看到的颜色。人眼看到的图像都是连续的模拟图像,其形状和形态表现由图像各位置的颜色所决定。因此,自然界的图像可用基于位置坐标的三维函数来表示,即:f(x,y,z)={fred(x,y,z),fgreen(x,y,z),fblue(x,y,z)}其中f表示空间坐标为(x,y,z)位置点的颜色,fred、fgreen、fblue分别表示该位置点的红、绿、蓝三种原色的颜色分量值。他们都是空间的连续函数,即连续空间的每一点都有一个精确的值与之相对应。为了研究的方便,主要考虑平面图像。平面上每一点仅包括两个坐标值,因此,平面图像函数是连续的二维函数,即:f(x,y)={fred(x,y),fgreen(x,y),fblue(x,y)}数字图像是连续图像f(x,y)的一种近似表示,通常用由采样点的值所组成的矩阵来表示:2f(0,0)f(0,1)….f(0,M-1)f(1,0)f(1,1)….f(1,M-1)f(N-1,0)f(N-1,1)….f(N-1,M-1)每一个采样单元叫做一个像素(pixel),上式中,M、N分别为数字图像在横、纵方向上的像素总数。在计算机内通常用二维数组来表示数字图像的矩阵,把像素按不同的方式进行组织或存储,就得到不同的图像格式,把图像数据存成文件就得到图像文件。图像文件按其数字图像格式的不同一般具有不同的扩展名。最常见的图像格式是位图格式,其文件名以BMP为扩展名。图像数字化的精度包括两个部分,即分辨率和颜色深度。分辨率指图像数字化的空间精细程度,有显示分辨率和图像分辨率两种不同的分辨率。图像分辨率是数字化图像时划分图像的像素密度,即单位长度内的像素数,其单位是每英寸的点数DPI(DotsPerInche)。显示分辨率是把数字图像在输出设备(如显示屏或打印机等)上能够显示的像素数目和所显示像素之间的点距。显示分辨率是用户在屏幕上观察图像时,所感受到的分辨率。一般显示分辨率是由计算机的显示卡所决定的。例如标准的VGA显示卡的分辨率是640×480,即宽640点(像素),高480点(像素)。至于较高级的显示卡,通常可以支持800×600或是1024×768点以上。图像分辨率说明了数字图像的实际精细度,显示分辨率说明了数字图像的表现精细度。具有不同的图像分辨率的数字图像在同一输出设备上的显示分辨率相同。数字图像的颜色深度表示每一像素的颜色值所占的二进制位数。颜色深度越大则能表示的颜色数目越多。颜色深度的不同,就产生不同种类的图像文件,在计算机中常使用如下类型的图像文件。1.单色图像单色图像中每个像素点仅占一位,其值只有0或1,0代表黑,1代表白或相反。因为图像中的每个像素仅需1位信息,常把单色图像称为是1位图像。单色图像具有比较简单的格式,一般由黑色区域和白色区域组成。2.灰度图像灰度图像具有如下特征:(1)灰度图像的存储文件带有图像颜色表,此颜色表共有256项,图像颜色表中每一表项由红、绿、蓝颜色分量组成,并且红、绿、蓝颜色分量值都相等,即:fred(x,y)=fgreen(x,y)=fblue(x,y)(2)每个像素由8位组成,其值范围从0~255,表示256种不同的灰度级。每个像素的像素值f(x,y)是图像颜色表的表项入口地址。例如,某灰度图像(16x6)对应的数值矩阵如下:125,153,158,157,127,70,103,120,129,144,144,150,150,147,150,160,133,154,158,100,116,120,97,74,54,74,118,146,148,150,145,157,155,163,95,112,123,101,137,108,81,71,63,81,137,142,146,152,167,69,85,59,65,43,85,34,69,78,104,101,117,132,134,149,54,46,38,44,38,36,44,36,25,48,115,113,114,124,135,152,58,30,44,35,28,69,144,147,57,60,93,106,119,124,131,144,3.伪彩色图像伪彩色图像与灰度图像相似,其存储文件中也带有图像颜色表,伪彩色图像具有如下特征:3(1)图像颜色表中的红、绿、蓝颜色分量值不全相等,即:fred(x,y)≠fgreen(x,y)≠fblue(x,y)(2)整幅图像仅有256种颜色,要表示256种不同的颜色,像素必须由8位组成,每个像素值不是由每个基色分量的数值直接决定,而是把像素值当作图像颜色表的表项入口地址。把具有256色的图像称为8位彩色图像。256色图像有照片效果,比较真实。4.24位真彩色图像具有全彩色照片表达能力的图像为24位彩色图像,24位真彩色图像存储文件中不带有图像颜色表,其具有如下特征:(1)图像中每一像素由RGB三个分量组成,每个分量各占8位,每个像素需24位。(2)fred(x,y)、fgreen(x,y)、fblue(x,y)取值范围为0~255。例如,某彩色图像(6x8)对应的数值矩阵如下:(207,137,130)(220,179,163)(215,169,161)(210,179,172)(210,179,172)(207,154,146)(217,124,121)(215,169,161)(216,179,170)(216,179,170)(207,137,120)(159,51,71)(213,142,135)(216,179,170)(221,184,170)(190,89,89)(204,109,113)(204,115,118)(216,179,170)(220,188,176)(190,77,84)(206,95,97)(217,113,113)(189,85,97)(222,192,179)(150,54,71)(177,65,73)(145,39,65)(150,47,67)(112,20,56)(136,38,65)(112,20,56)(112,20,56)(109,30,65)(112,20,56)(95,19,64)(136,38,65)(91,11,56)(113,25,60)(103,19,59)(81,12,59)(126,62,94)(138,46,71)(103,19,59)(158,65,83)(124,40,70)(145,62,79)(130,46,73)由于24位真彩色图像所需的存储空间很大,处理速度较慢,当需要存储空间不大,并且要求实时快速处理图像时,一般都要利用相应的8位位图对其进行近似处理,因此8位位图是图像技术中涉及范围比较广泛的一种图像表示方法。本书从第二章至第十章介绍8位位图的处理技术。第十一章介绍24位位图的处理技术。1.2与设备相关位图(DDB)与设备相关位图DDB是一种内部位图格式,它显示的图像依计算机显示系统的设置不同而不同,因此一般不存储文件。结构BITMAP定义了DDB位图的类型、宽度、高度、颜色格式和像素位值,该结构在Windows.h中定义如下:typedefstructtagBITMAP{intbmType;//位图类型,必须设为0intbmWidth;//位图宽度intbmHeight;//位图高度intbmWidthBytes;//位图中每一扫描行中的字节数BYTEbmPlanes;//颜色层数BYTEbmBitsPixel;//每一像素所占的位数VoidFAR*bmBits;//存放像素值内存块的地址}BITMAP;4DDB中不包括颜色信息,显示时是以系统的调色板为基础进行各位的颜色映射的,Windows只能保证系统调色板的前二十种颜色稳定不变,所以DDB只能保证正确显示色彩少于二十色的位图。WindowsSDK提供了标准的DDB位图操作函数,MFC中定义了CBitmap类来说明DDB位图,其中封装了与DDB位图操作相关的数据结构和操作函数。表1-1列出了CBitmap类封装的主要函数。表1-1CBitmap类封装的主要函数函数名功能LoadBitmap从应用程序的资源中装入位图资源,并将其与CBitmap对象连接CreateBitmap用指定了宽、高和位模式的内存位图来创建位图,并将其与CBitmap对象连接CreatCompatibleBitmap创建与指定设备兼容的位图,并将其与CBitmap对象连接GetBitmap从位图中获取信息,并填充BITMAP结构SetBitmapBits用指定的图像位来设置位图的位值1.3与设备无关位图(DIB)与设备无关位图DIB可以在不同的机器或系统中显示位图所固有的颜色。与DDB相比而言,DIB是一种外部的位图格式,经常存储以BMP为后缀的位图文件。DIB位图还支持图像数据的压缩。1.BMP文件组成BMP文件由文件头、位图信息头、颜色信息和图像数据四部分组成。位图结构如下所示:位图文件头结构BITMAPFILEHEADER位图信息头结构BITMAPINFOHEADER位图颜色表RGBQUAD位图像素数据2.BMP文件头BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。其结构定义如下:typedefstructtagBITMAPFILEHEADER{WORDbfType;//位图文件的类型,必须为BMDWORDbfSize;//位图文件的大小,以字节为单位WORDbfReserved1;//位图文件保留字,必须为0WORDbfReserved2;//位图文件保留字,必须为0DWORDbfOffBits;//位图数据的起始位置,以相对于位图文件头的偏移量表示,以字节为单位}BITMAPFILEHEADER;53.位图信息头BMP位图信息头数据用于说明位图的尺寸等信息。typedefstructtagBITMAPINFOHEADER{DWORDbiSize;//本结构所占用字节数LONGbiWidth;//位图的宽度,以像素为单位LONGbiHeight;//位图的高度,以像素为单位WORDbiPlanes;//目标设备的级别,必须为1WORDbiBitCount;//每个像素所需的位数,必须是1(双色),4(16色),8(256色)或24(真彩色)之一DWORDbiCompression;//位图压缩类型,必须是0(不压缩),1(BI_RLE8压缩类型)或2(BI_RLE4压缩类