看到了前面的基础操作介绍,我们再了解一下不同图像的存储格式,更有利于我们理解图像处理的原理。
图像存储格式详细介绍
1. BMP(BitMap Picture)
发展历史
BMP是一种位图文件格式,由微软公司于1986年推出。它最初是为Windows操作系统设计的,后来逐渐被其他操作系统所支持。由于其简单易用的特点,在早期计算机图形学中得到了广泛应用。
描述
BMP是一种与设备无关的位图格式,这意味着无论何种显示设备都可以正确地渲染该图像。BMP文件由四个部分组成:文件头、位图信息头、颜色表(可选)和位图数据。其中,文件头用于描述文件的基本信息;位图信息头则包含了关于图像尺寸、色彩深度等详细信息;颜色表定义了图像中使用的颜色;而位图数据则是实际的像素值。
存储结构示例
字段名称 | 长度(字节) | 描述 |
---|---|---|
文件类型 | 2 | 标识文件为BMP格式 (BM ) |
文件大小 | 4 | 整个文件的大小 |
保留值 | 4 | 保留未使用 |
数据偏移量 | 4 | 从文件开头到图像数据之间的字节数 |
大小 | 4 | 本信息头的长度 |
宽度 | 4 | 图像宽度,以像素为单位 |
高度 | 4 | 图像高度,以像素为单位 |
色彩平面数 | 2 | 总是设置为1 |
位数/像素 | 2 | 每个像素占用的位数 |
压缩方式 | 4 | 表示是否压缩及采用何种压缩算法 |
图像大小 | 4 | 压缩后的图像数据大小 |
水平分辨率 | 4 | 每米的像素数 |
垂直分辨率 | 4 | 每米的像素数 |
使用的颜色数 | 4 | 颜色表中颜色的数量 |
重要颜色数 | 4 | 对图像显示至关重要的颜色数量 |
实际图片数据说明
假设我们有一张10x10像素的单色(黑白)BMP图像,每个像素占1位,总共有100个像素点。文件结构如下:
-
文件头:
- 文件类型:
BM
(2字节) - 文件大小: 54 + 100 = 154字节 (4字节)
- 保留值: 0 (4字节)
- 数据偏移量: 54字节 (4字节)
- 文件类型:
-
位图信息头:
- 大小: 40字节 (4字节)
- 宽度: 10像素 (4字节)
- 高度: 10像素 (4字节)
- 色彩平面数: 1 (2字节)
- 位数/像素: 1位 (2字节)
- 压缩方式: 0 (无压缩) (4字节)
- 图像大小: 100字节 (4字节)
- 水平分辨率: 2835 DPI (4字节)
- 垂直分辨率: 2835 DPI (4字节)
- 使用的颜色数: 2 (4字节)
- 重要颜色数: 0 (4字节)
-
颜色表:
- 黑色: RGB(0, 0, 0) (4字节)
- 白色: RGB(255, 255, 255) (4字节)
-
位图数据:
- 按行排列的100个像素点,每个像素点占1位,共13字节(因为每8个像素点需要1字节存储)
2. JPEG(Joint Photographic Experts Group)
发展历史
JPEG是由联合图像专家组在1992年制定的一种有损压缩标准,旨在解决数字照片和其他连续色调图像所需的大量存储空间问题。JPEG格式因其高效的压缩比和良好的视觉质量而在互联网上广泛传播。
描述
JPEG采用了基于离散余弦变换(DCT)的压缩技术,可以显著减少文件体积而不明显影响画质。JPEG文件由一系列标记段组成,每个标记段包含一个两字节的标识符、两个字节表示内容长度以及具体的数据。
存储结构示例
标记段 | 长度(字节) | 描述 |
---|---|---|
SOI (Start of Image) | 2 | 文件开始标志 (FF D8 ) |
APP0 (JPEG应用段0) | 16 | 应用程序特定信息 |
DQT (定义量化表) | 67 | 量化表参数 |
SOF0 (开始帧0) | 17 | 帧头部信息 |
DHT (定义哈夫曼表) | 328 | 哈夫曼编码表 |
SOS (开始扫描) | 12 + 图像数据 + EOI (End of Image, 2字节) | 扫描开始及结束标志 (FF DA , FF D9 ) |
实际图片数据说明
假设我们有一个简单的JPEG图像,包含以下标记段:
- SOI:
FF D8
- APP0: 包含JFIF头信息
- DQT: 定义量化表
- SOF0: 帧头部信息,例如:
- 图像宽度: 640像素
- 图像高度: 480像素
- 精度: 8位
- DHT: 定义哈夫曼编码表
- SOS: 开始扫描,后跟压缩后的图像数据
- EOI: 文件结束标志
FF D9
3. PNG(Portable Network Graphics)
发展历史
PNG格式是在1995年由一群开发者创建,作为GIF格式的替代品。PNG不仅支持透明背景,还提供了更好的压缩效果,并且是完全无损的。随着Web技术的发展,PNG成为了网页设计师们最喜爱的图像格式之一。
描述
PNG是一种无损压缩的位图格式,具有跨平台兼容性。PNG文件由一个固定的签名序列后跟多个块构成。每个块都有自己的类型代码、长度字段和校验和,确保数据完整性。
存储结构示例
块 | 长度(字节) | 描述 |
---|---|---|
文件签名 | 8 | 确认文件为PNG格式 (89 50 4E 47 0D 0A 1A 0A ) |
IHDR (Image Header) | 17 | 图像基本信息如宽度、高度等 |
PLTE (Palette) | 至少3n+1 | 调色板中的颜色条目 |
IDAT (Image Data) | 至少12 | 实际图像数据 |
IEND (Image Trailer) | 12 | 文件结束标志 |
实际图片数据说明
假设我们有一个简单的PNG图像,包含以下块:
- 文件签名:
89 50 4E 47 0D 0A 1A 0A
- IHDR: 包含图像宽度、高度、位深度等信息
- 宽度: 640像素
- 高度: 480像素
- 位深度: 8位
- 颜色类型: 真彩色带Alpha通道
- PLTE: 如果是调色板图像,则包含调色板条目
- IDAT: 压缩后的图像数据
- IEND: 文件结束标志
4. GIF(Graphics Interchange Format)
发展历史
GIF最早出现在1987年,由CompuServe公司开发。最初版本被称为GIF87a,随后在1989年进行了改进,推出了GIF89a版本,增加了对动画和透明度的支持。尽管存在版权争议,但GIF仍然非常流行,特别是在社交媒体平台上分享简短动画时。
描述
GIF使用LZW压缩算法进行无损压缩,适合存储具有较少颜色变化的简单图形或小型动画。GIF文件结构相对简单,主要包括文件头、逻辑屏幕描述符、全局颜色表(如果有的话)、图像描述符、局部颜色表(如果有的话)以及图像数据。
存储结构示例
字段名称 | 长度(字节) | 描述 |
---|---|---|
文件头 | 6 | “GIF87a” 或 “GIF89a” |
逻辑屏幕描述符 | 7 | 包含屏幕宽度、高度等信息 |
全局颜色表 | 3n | RGB三元组组成的调色板 |
图像描述符 | 10 | 指定图像位置和尺寸 |
局部颜色表 | 3m | 如果存在,则覆盖全局颜色表 |
图像数据 | 变长 | LZW压缩后的像素流 |
实际图片数据说明
假设我们有一个简单的GIF图像,包含以下字段:
- 文件头:
GIF89a
- 逻辑屏幕描述符:
- 宽度: 100像素
- 高度: 100像素
- 调色板大小: 256色
- 全局颜色表: 包含256个RGB三元组
- 图像描述符:
- 左位置: 0
- 上位置: 0
- 宽度: 100像素
- 高度: 100像素
- 图像数据: LZW压缩后的像素流