图像
图像
基本知识
色彩是物体发出或反射的光在视觉系统中形成的反应,这种反应使人么得以从视觉上区分物体的大小,形状,结构和属性
色彩的三特性
亮度:指发光的明暗程度,由色光所含的能量决定。光源色光的亮度正比于它的光通量(光功率);物体色彩色光的亮度正比于个点反射的光通量光源功率越大,物体放射能力越强,则物体越亮;反之,越暗
色调:指颜色的类别,如通所说的红色,绿色,蓝色,品红,青色等色调。光源的色调由其光谱决定;物体的色调由照射光源的光谱和物体本省反射特性决定。
饱和度:是指色调深浅的程度。
RGB模型
用红、绿、蓝三种基本颜色表示其他颜色的模型。
CMYK模型
是用物质吸收光的数量表示色彩的方式,即通过青,品,黄三原色颜料混合表示颜色。
数值图像:是用二维像素矩阵表示的图像
像素:像素是图像平面中特定位置上的一个点,具有一定的颜色属性。
二值图像与灰度图像:像素值仅仅为两种颜色的图像是二值图像。像素值分布在RGB色彩空间中的灰度(即亮度)线上的数字图像是灰度图像。
彩色图像:彩色图像是由三幅原色图像(红色,绿色和蓝色图像)融合而成的图像。
8位彩色图像 24位彩色图像
真彩图形:像素值直接表示了颜色属性的彩色图像称为真彩图像。
伪彩图像:伪彩图像是指像素值不直接表示颜色值本身而是表示了颜色在调色板中索引的彩色图形。
图像文件的格式
BMP位图(无压缩),GIF(字典压缩),JEPG(行程压缩,正交余弦变换)
BMP图像
BMP(Bitmap,位图)图像又称位图图像,是Microsoft、IBM等公司制定的图像文件标准。BMP文件中图像数据是以非常自然的位映射方式存储的,并且没有被压缩(绝大多数情况下如此),所以,BMP文件是最基本的图像文件,广泛应用于各类操作系统,几乎所有的图形图像软件都支持BMP图像格式。
BMP图像文件一般由四部分组成,如图6-13所示。
第一部分是位图文件信息头,主要包括文件类型、文件大小、图像数据偏移量等信息。第二部分是位图格式信息头,包含有 BMP 图像的宽、高、位深度、压缩方法等信息。第三部分是调色板,该部分是可选的,有些位图需要调色板,而真彩图像(如 24 位的 BMP 图像)就不需要调色板。第四部是位图数据,是真正存储像素值的地方,一般会远远大于前面三个部分。图像数据的格式因 BMP 位图使用的位数不同而不同。
面给出 BMP 文件每一部分的具体格式。
(1)文件信息头
图 6-14 表示了位图文件信息头部的结构,图中给出了各字段的英文名称、中文名称,以及所占据的字节数。可以看到该部分由 4 个字段组成。
第一个部分是文件标识符,一般是"BM"这两个字母,占两个字节。
第二部分是整个文件的大小(以字节为单位),占 4 个字节。但是,需要指出的是,这里存储的文件大小实际上是整个文件的大小减 6 个字节,也就是从 File Size 后面开始计算的文件大小。
第三部分是保留字段,有 4 个字节。之所以设置保留字段,是因为当初制定该标准的时候,专家们认为未来可能存在某种扩展的需要。但是到目前为止这 4 个字节也没有什么特别的用途,所以设置为 0。当然,用户完全可以在这 4 个字节中装入自定义信息,这不会影响对文件的使用。
第四部分是位图数据偏移量(offset),也就是从文件最开始位置算起,直到位图数据第一个字节之间的字节数,如图 6-15 所示。
图 6-15 位图数据偏移量的含义
显然,设置位图数据偏移量的目的,就是为了让处理程序能够快速定位到图像数据本身。例如,当打开一个位图文件后,如果有一个指针已经指向了文件的第一个字节,那么,只要在这个指针的基础上简单地加上一个 offset,就能得到图像数据的第一个字节的地址。
(2)位图格式信息头
这部分包含有 BMP 图像的宽、高、位深度、压缩方法等信息,共计 11 个字段。显然它描述了图像的各种属性,其结构如图 6-16 所示,图中给出了各字段的英文名称、中文名称,以及所占据的字节数。
Bitmap Header Size,位图信息头的大小,占 4 个字节 |
Width,图像的宽度,以像素为计算单位,占 4 个字节 |
Height,图像的高度,以像素为计算单位,占 4 个字节 |
Planes,位平面数,占 2 个字节 |
BitCount Per Pixel,每个像素的位数,占 2 个字节 |
Compression,压缩方式代码,占 4 个字节 |
Bitmap Data Size,位图数据大小,占 4 个字节 |
X Pixels Per Meter,水平分辨率,占 4 个字节 |
Y Pixels Per Meter,垂直分辨率,占 4 个字节 |
Colors Used,调色板使用的颜色数,占 4 个字节 |
Important Colors,重要颜色数,占 4 个字节 |
图 6-16 位图格式信息头的组成
位图格式信息头全面描述了图像的基本属性,为应用程序提供支持。位图信息头的大小记录了这一部分的字节数,我们不妨统计一下,正好 40 个字节。但是,该字段中存储的数实际上是 36,也就是 40 减掉一个 4。
Width 和 Height 是图像的宽度和高度,任何显示操作都需要考虑这两个参数。
位平面是一个遗产(legacy)概念,旧式的显示卡在存储图像时,会将存储空间划分成若干不同的部分,这些不同的部分就是所谓的位平面。由于现代显示卡的存储空间不再这样划分,所以,Planes 总是置 1,应用中可以忽略。
BitCount 是一个很重要的字段,它给出了图像的位深度,其值可以是 1、4、8、16、24、
32 中的一个。如果 BitCount 等于 1,说明文件存储的是一幅二值图像,通常为黑白图像。 BitCount 等于 4 的时候,图像仅仅包含 16 种颜色,常常用于图标等场合。8 位的图像可以包含 256 种颜色,在一些要求不高的场合应用。1、4、8 位的位图都需要调色板支持。
Compression 描述图像的压缩方式。实际上,BMP 图像通常是不压缩的,所以,大多数情况下,该字段被置为 0。但是 BMP 文件标准也支持对图像进行压缩,如果该字段等于 1,表示采用 RLE_8 算法进行压缩,等于 2 表示采用 RLE_4 算法进行压缩。RLE_8 是一种 8 位的行程压缩算法,RLE_4 则是 4 位的行程压缩算法。
Bitmap Data Size 用于表示图像数据的大小,注意,以字节为度量单位。所以,如果图像是 8 位的,那么该值就等于 Width x Height。如果图像是 24 位的,那么该值应等于 Width x Height x 3。在程序设计中,图像大小参数往往用于指导内存分配。
后面几个参数用得较少。水平与垂直分辨率可以用来指导打印程序。重要颜色数常常等于图像用到的所有颜色,这意味着所有颜色都重要,都应该显示出来。当然,该数值也可以小于所有颜色数,这表明只有部分颜色是重要颜色。当显示或打印设备不足以显示或打印所有颜色的时候,重要颜色应该优先得到处理。但是,BMP 文件本身并不能告诉程序,哪些颜色是重要颜色,所以,这个字段也很少被用到。
总之,位图信息头包含了必要的图像信息,为图像处理程序提供了必要的参考。
-
调色板
当图像的位深度是 1、4、8 的时候,文件就会包含调色板。实际上,调色板就是一个颜色列表,图 6-17 是 BMP 文件中的调色板结构。
不难看出,调色板中的所有颜色是按顺序排列的,排列的顺序就是检索的序号,所以,并不需要额外的索引号。每一种颜色占据 4 个字节,其中前三个用于表示 RGB 三原色分量(注意,从高地址到低地址依次为 BGR),另有一个保留字节。对于 4 位的图像,调色板包含 16 种颜色。对于 8 位的图像,调色板则包含 256 种颜色。
-
位图数据
BMP 文件的最后是图像数据部分,也是 BMP 文件的主体。我们先研究 24 位的位图图像,因为 24 位的图像最整齐,也用得最多。图 6-18 表示了 24 位位图数据的存储方式。
可以看到,24 位图像中的像素正是以 RGB24 格式存储的。需要注意,R 处于高位字节(即高地址字节),而 B 则处于低地址字节;每个像素占三个字节,没有保留字节。所以,程序在读取像素值的时候,需要逐字节地取出三个分量。
存储方法是 Bottom-up 模式,这种模式下,首先存储图像最下面的一行,按照从左到右的顺序,依次从低地址到高地址存储,接着是倒数第二行,也是按照从左到右依次从低地址到高地址存储,如此这般,直到第一行(即图像最上面的一行)。Bottom-up 模式如图 6-20 所示。
图 6-20 Bottom-up 存储模式(x 表示图像的左上角)
现在我们要告诉读者,标准 BMP 文件采用的是第二种存储模式,即 Bottom-up 模式。很多人可能会觉得奇怪,为什么 BMP 文件不采用 Top-down 模式。答案是,当初研究这个标准的时候就是这么制定的。其实,上述两种存储模式并没有什么本质性区别,只是程序员在设计程序的时候,需要注意这个顺序特点。例如,当程序员想设计一个显示 BMP 图像的函数时,为了正立显示一幅 BMP 图像,就应当从高地址开始读取图像数据,并自上而下地显示出来。当然,系统提供的标准图像处理函数都已经将这个问题考虑在内了。
最后我们简单概括一下其他位深度条件下的图像存储情况。总体上,各种位深度的 BMP 图像数据的存储,与 24 位图像存储方式是一致的,都遵循 Bottom-up 模式。
但是,对于BitCount=1的图像,每个字节存储8个像素,并且需要注意,在一个字节内,像素按照从左至右(对图像而言)从高位到低位顺序排列,如图6-21所示。
对于4位的图像,每个字节存储两个像素(即颜色索引,等于调色板中颜色的顺序号),并且要注意,在一个字节内,像素按照从左至右(对图像而言)从高4位到低4位顺序排列,如图6-22所示。
对于8位的图像,自然是一个字节存储一个像素(注意,实际上是像素颜色值的索引),如图6-23所示。
对于16位的图像,两个字节表示一个像素,而像素格式可以采用RGB555或RGB565 两种模式,如图6-24所示。
JPEG有损压缩利用了人眼的感知特性,即视觉系统对图像的高频成分不敏感这一事实。而经过DCT变换后得到的高频系数正好被用来丢弃冗余数据,这是通过量化处理实现的。借助优化设计的量化表,量化处理使得大量DCT高频系数被转换成了0,因此后续处理中就非常容易通过行程编码算法实现数据压缩。