油墨和颜料的三基色是CMY(Cyan / Magenta / Yellow,青/洋红/黄)而不是RGB,CMY三基色的特点是油墨和颜料用得越多,颜色越暗(或越黑),所以将CMY称为三减色,而RGB称为三加色。理论上讲,等量的CMY可以合成黑色,但实际上纯黑色是很难合成出来的,所以彩色印刷机和彩色打印机要提供专门的黑色油墨,被人们称为四色印刷,四色印刷的彩色模型为CMYK模型。
3.HSI彩色空间
另一种常见的彩色模型是HSI(Hue / Saturation / Intensity,色调/饱和度/强度)模型。采用色调和饱和度来描述颜色,是从人类的色视觉机理出发提出的。
色调Hue表示颜色,颜色与彩色光的波长有关,将颜色按红橙黄绿青蓝紫顺序排列定义色调值,并且用角度值(0o~360o)来表示。例如红、黄、绿、青、蓝、洋红的角度值分别为0o、60o、120o、180o、240o和300o。
饱和度Saturation表示色的纯度,也就是彩色光中搀杂白光的程度。白光越多饱和度越低,白光越少饱和度越高且颜色越纯。饱和度的取值采用百分数(0%~100%),0%表示灰色光或白光,100%表示纯色光。
强度Intensity表示人眼感受到彩色光的颜色的强弱程度,它与彩色光的能量大小(或彩色光的亮度)有关,因此有时也用亮度Brightness来表示。
通常把色调和饱和度统称为色度,用来表示颜色的类别与深浅程度。人类的视觉系统对亮度的敏感程度远强于对颜色浓淡的敏感程度,对比RGB彩色空间,人类的视觉系统的这种特性采用HSI彩色空间来解释更为适合。
HSI彩色描述对人来说是自然的、直观的,符合人的视觉特性,HSI模型对于开发基于彩色描述的图像处理方法也是一个较为理想的工具,例如在HSI彩色空间中,可以通过算法直接对色调、饱和度和亮度独立地进行操作。采用HSI彩色空间有时可以减少彩色图像处理的复杂性,提高处理的快速性,同时更接近人对彩色的认识和解释。
图1-6 HSI彩色空间示意图
HSI彩色空间是一个圆锥型空间模型,如图1-6(a)所示。圆锥模型可以将色调、强度以及饱和度的关系变化清楚地表现出来。圆锥型空间的竖直轴表示光强I,顶部最亮表示白色,底部最暗表示黑色,中间是在最亮和最暗之间过渡的灰度。圆锥型空间中部的水平面圆周是表示色调H的角度坐标,如图1-6(b)所示。
在处理彩色图像时,为了处理方便,经常要把RGB三基色表示的图像数据转换成HSI数据。RGB彩色空间转换到HSI彩色空间的转换公式参见(1-2)式、(1-3)式、(1-4)式。
(1-2)
(1-3)
其中,
(14)
1.1.5 灰度图像和彩色图像
计算机上显示的图像经常有二值图像、灰度图像、伪彩色图像及真彩色图像等不同格式类型。而灰度和彩色格式是数字图像处理中最常用到的类型,本书所涉及的各种图像处理算法都是以这两种类型图像为处理对象的。
1.灰度图像
灰度图像是数字图像的最基本形式,灰度图像可以由黑白照片数字化得到,或从彩色图像进行去色处理得到。灰度图像只表达图像的亮度信息而没有颜色信息,因此,灰度图像的每个像素点上只包含一个量化的灰度级(即灰度值),用来表示该点的亮度水平,并且通常用1个字节(8个二进制位)来存储灰度值。
如果灰度值用1个字节表示,则可以表示的正整数范围是0~255,也就是说,像素灰度值取值在0~255之间,灰度级数为256级。注意到人眼对灰度的分辨能力通常在20~60级,因此,灰度值存储以字节为单位既保证了人眼的分辨能力,又符合计算机数据寻址的习惯。在特殊应用中,可能需要采用更高的灰度级数,例如CT图像的灰度级数高达数千,需要采用12位或16位二进制位存储数据,但这类图像通常都采用专用的显示设备和软件来进行显示和处理。
2.彩色图像
彩色图像的数据不仅包含亮度信息,还包含颜色信息。彩色的表示方法是多样化的,最常见的是三基色模型,例如RGB(Red / Green / Blue,红绿蓝)三基色模型,利用RGB三基色可以混合成任意颜色。因此,RGB模型在各种彩色成像设备和彩色显示设备中使用,常规的彩色图像也都是用RGB三基色来表示的,每个像素包括RGB三基色数据,每个基色用1个字节(8位二进制位)表示,则每个像素的数据为3个字节(即24位二进制位),这就是人们常说的24位真彩色。
1.2 BMP文件结构及其存取
数字图像在外存储器设备中的存储形式是图像文件,图像必须按照某个已知的、公认的数据存储顺序和结构进行存储,才能使不同的程序对图像文件顺利进行打开或存盘操作,实现数据共享。图像数据在文件中的存储顺序和结构称为图像文件格式。目前广为流传的图像文件格式有许多种,常见的格式包括BMP、GIF、JPEG、TIFF、PSD、DICOM、MPEG等。在各种图像文件格式中,一部分是由某个软硬件厂商提出并被广泛接受和采用的格式,例如BMP、GIF和PSD格式;另一部分是由各种国际标准组织提出的格式,例如JPEG、TIFF和DICOM,其中JPEG是国际静止图像压缩标准组织提出的格式,TIFF是由部分厂商组织提出的格式,DICOM是医学图像国际标准组织提出的医学图像专用格式。
BMP文件是Windows操作系统所推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,所以称为位图(bitmap)文件,因其文件扩展名
为BMP,故称为BMP文件格式,简称BMP文件。本书对图像的算法编程都是针对BMP图像文件的,因此在本章中我们详细介绍BMP文件结构及其读写操作,以加深对图像数据的理解。
1.2.1 BMP文件结构
如图1-7所示,BMP图像文件被分成4个部分:位图文件头(Bitmap File Header)、位图信息头(Bitmap Info Header)、颜色表(Color Map)和位图数据(即图像数据,Data Bits或Data Body)。
第1部分为位图文件头BITMAPFILEHEADER,是一个结构体类型,该结构的长度是固定的,为14个字节。其定义如下:
typedef struct tagBITMAPFILEHEADER {
WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits;
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER; BITMAPFILEHEADER结构的各个域详细说明如下:
— bfType:位图文件类型,必须是0x424D,即字符串“BM”,也就是说,所有的“*.bmp”文件的头两个字节都是“BM”。
— bfSize:位图文件大小,包括这14个字节。
— bfReserved1, bfReserved2:Windows保留字,暂不用。
— bfOffBits:从文件头到实际的位图数据的偏移字节数,图1-7中前3个部分的长度之和。
图1-7 BMP文件结构示意图
第2部分为位图信息头BITMAPINFOHEADER,也是一个结构体类型的数据结构,该结构的长度也是
固定的,为40个字节(WORD为无符号16位整数,DWORD为无符号32位整数,LONG为32位整数)。其定义如下:
typedef struct tagBITMAPINFOHEAD
ER
{
DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant;
} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
BITMAPINFOHEADER结构的各个域的详细说明如下:
— biSize:本结构的长度,为40个字节。 — biWidth:位图的宽度,以像素为单位。