第1章 Visual C++数字图像编程基础 1
1.1 数字图像处理概述 1
1.2 图像和调色板 2
1.2.1 图像 2
1.2.2 调色板 3
1.2.3 色彩系统 3
1.2.4 灰度图 5
1.3 GDI位图 5
1.3.1 从资源中装入GDI位图 6
1.3.2 伸缩位图 8
1.4 与设备相关位图 9
1.5 设备无关位图(DIB) 14
1.5.1 BMP文件中DIB的结构 14
1.5.2 DIB访问函数 17
1.5.3 构造DIB类 21
1.5.4 使用DIB读写BMP文件示例 33
第2章 图像感知与获取 48
2.1 视觉基础 48
2.1.1 视觉系统 48
2.1.2 视觉模型 50
2.2 图像获取 52
2.3 图像采样 53
2.3.1 确定性图像场抽样 53
2.3.2 随机图像取样 55
2.4 量化 57
2.5 图像显示 61
2.5.1 图案法显示 61
2.5.2 图案法显示图像Visual C++实现 63
2.5.3 随机抖动法显示图像 66
2.5.4 随机抖动法显示图像的Visual C++实现 67
3.1 灰度直方图 72
3.1.1 灰度直方图的定义 72
第3章 图像的点运算 72
3.1.2 编程绘制灰度直方图 73
3.2 灰度的线性变换 83
3.2.1 功能与效果 83
3.2.2 原理与算法 84
3.2.3 Visual C++编程实现 84
3.3 灰度的阈值变换 98
3.3.1 功能与效果 98
3.3.2 原理与算法 98
3.3.3 Visual C++编程实现 99
3.4 灰度的窗口变换 106
3.4.1 功能与效果 106
3.4.3 Visual C++编程实现 107
3.4.2 原理与算法 107
3.5 灰度拉伸 117
3.5.1 功能与效果 117
3.5.2 原理与算法 118
3.5.3 Visual C++编程实现 118
3.6 灰度均衡 131
3.6.1 功能与效果 131
3.6.2 原理与算法 131
3.6.3 Visual C++编程实现 132
第4章 图像的几何变换 136
4.1 图像的平移 136
4.1.1 功能与效果 136
4.1.2 原理与算法 137
4.1.3 Visual C++编程实现 139
4.2.2 原理与算法 146
4.2.1 功能与效果 146
4.2 图像的镜像变换 146
4.2.3 Visual C++编程实现 148
4.3 图像的转置 153
4.3.1 功能与效果 153
4.3.2 原理与算法 153
4.3.3 Visual C++编程实现 153
4.4 图像的缩放 157
4.4.1 功能与效果 157
4.4.2 原理与算法 157
4.4.3 Visual C++编程实现 158
4.5 图像的旋转 163
4.5.1 功能与效果 163
4.5.2 原理与算法 164
4.5.3 Visual C++编程实现 167
4.6.2 双线性插值 173
4.6.1 最邻近插值 173
4.6 插值算法简介 173
4.6.3 高阶插值 179
第5章 图像的正交变换 180
5.1 傅立叶变换 180
5.1.1 傅立叶变换的基本概念 180
5.1.2 傅立叶变换的性质 181
5.1.3 离散傅立叶变换 183
5.1.4 离散傅立叶变换的性质 184
5.1.5 快速傅立叶变换 189
5.1.6 Visual C++编程实现图像傅立叶变换 196
5.2 离散余弦变换 203
5.2.1 功能和效果 203
5.2.2 原理和算法 204
5.2.3 Visual C++编程实现图像离散余弦变换 207
5.3.1 沃尔什函数 214
5.3 沃尔什变换 214
5.3.2 沃尔什变换 216
5.3.3 离散沃尔什—哈达玛变换 217
5.3.4 快速沃尔什—哈达玛变换 217
5.3.5 Visual C++编程实现图像沃尔什—哈达玛变换 222
5.4 基于特征向量的变换 230
5.4.1 特征分析 230
5.4.2 主向量分析(PCA) 230
5.4.3 霍特林(Hotelling)变换 231
5.4.4 SVD变换 232
5.4.5 霍特林变换的Visual C++实现 234
5.5 小波变换 247
5.5.1 连续小波变换 248
5.5.2 离散小波变换 250
5.5.4 小波变换的多分辨率分析 251
5.5.3 二进小波变换 251
5.5.5 Mallat算法 252
5.5.6 小波变换的Visual C++实现 254
第6章 图像的增强 269
6.1 图像的灰度修正 270
6.2 模板操作 270
6.3 图像的平滑 274
6.3.1 功能与效果 274
6.3.2 原理与算法 274
6.3.3 Visual C++编程实现 274
6.4 中值滤波 285
6.4.1 功能与效果 285
6.4.2 原理与算法 285
6.4.3 Visual C++编程实现 286
6.5.1 梯度锐化 294
6.5 图像的锐化 294
6.5.2 拉普拉斯锐化 300
6.5.3 高通滤波器 303
6.6 伪彩色和假彩色增强 306
6.6.1 伪彩色和假彩色增强技术 306
6.6.2 Visual C++编程实现 307
第7章 数字图像腐蚀、膨胀和细化算法 315
7.1 数学形态学 315
7.1.1 什么是数学形态学 315
7.1.2 数学形态学中的基本符号和术语 315
7.2 图像腐蚀(Erosion) 317
7.2.1 功能与效果 317
7.2.2 原理与算法 318
7.2.3 Visual C++编程实现 321
7.3.2 原理和算法 330
7.3 图像膨胀(Dilation) 330
7.3.1 功能和效果 330
7.3.3 腐蚀和膨胀的代数性质 332
7.3.4 Visual C++编程实现 333
7.4 开(Open)运算和闭(Close)运算 341
7.4.1 功能和效果 341
7.4.2 原理和算法 343
7.4.3 开、闭运算的代数性质 345
7.4.4 Visual C++编程实现 346
7.5 数学形态学的其他运算 360
7.5.1 击中/击不中(Hit/Miss)变换 360
7.5.2 细化(Thinning) 362
7.5.3 Visual C++编程实现 363
8.1 边缘检测 370
8.1.1 功能与效果 370
第8章 图像边缘检测、提取及轮廓跟踪 370
8.1.2 原理和算法 373
8.1.3 Visual C++编程实现 375
8.2 Hough变换 398
8.2.1 功能与效果 398
8.2.2 原理和算法 399
8.2.3 Visual C++编程实现 400
8.3 轮廓提取与轮廓跟踪 406
8.3.1 功能与效果 406
8.3.2 原理和算法 407
8.3.3 Visual C++编程实现 408
8.4 种子填充 415
8.4.1 功能与效果 415
8.4.2 原理和算法 416
8.4.3 Visual C++编程实现 418
第9章 图像分割 429
9.1 图像分割研究 429
9.1.1 图像分割定义 429
9.1.2 图像分割的方法 430
9.2 并行边界分割 431
9.2.1 边界检测的数学基础 432
9.2.2 数字图像的边界检测 433
9.2.3 并行边界分割的Visual C++实现 434
9.3 串行边界分割 453
9.3.1 边界跟踪 454
9.3.2 边界跟踪的Visual C++实现 455
9.4 并行区域分割 460
9.4.1 阈值分割 460
9.4.2 自适应阈值选取 462
9.4.3 阈值分割的Visual C++实现 463
9.5.1 区域生长 471
9.5 串行区域分割 471
9.5.2 分裂合并 472
9.5.3 区域生长的Visual C++实现 472
9.6 Canny算子 477
9.6.1 Canny算子介绍 478
9.6.2 Canny算子的Visual C++实现 478
第10章 图像配准 498
10.1 图像配准理论基础 498
10.1.1 图像变换 498
10.1.2 相似性测度 499
10.1.3 插值 501
10.1.4 最小二乘法 501
10.2 图像配准中常用的技术 502
10.2.1 点映射 502
10.2.3 特征空间的选择 503
10.2.2 基于弹性模型的匹配 503
10.2.4 相似性测度的选择 504
10.2.5 搜索空间和策略的选择 504
10.3 Visual C++编程实现图像配准 504
第11章 图像复原 546
11.1 图像退化的数学模型 546
11.1.1 退化系统的基本定义 547
11.1.2 连续函数的退化模型 547
11.1.3离散函数的退化模型 548
11.2 运动模糊图像复原 551
11.2.1 由匀速直线运动引起的图像模糊 551
11.2.2 运动模糊图像复原Visual C++实现 553
11.3 非约束复原 564
11.3.1 非约束复原的基本方法 564
11.3.3 逆滤波复原的Visual C++实现 565
11.3.2 逆滤波复原 565
11.3.4 维纳滤波方法 576
11.3.5 维纳滤波的Visual C++实现 578
11.4 约束复原 589
第12章 图像压缩编码 590
12.1 图像压缩编码理论基础 590
12.2 图像编码分类 592
12.3 霍夫曼(Huffman)编码 593
12.3.1 霍夫曼编码理论及算法 593
12.3.2 霍夫曼编码的Visual C++实现 595
12.4 香农—费诺(Shannon-Fano)编码 606
12.4.1 香农—费诺编码的理论及算法 606
12.4.2 香农—费诺码的Visual C++实现 606
12.5 算术编码 618
12.5.1 算术编码的理论及算法 619
12.5.2 算术编码的Visual C++实现 621
12.6 游程编码(Run Length Coding) 630
12.6.1 基本原理 630
12.6.2 PCX文件格式及其编码方法 630
12.6.3 编程实现PCX文件格式的读写 632
12.7 位平面编码 632
12.7.1 位编码理论 632
12.7.2 位平面编码的Visual C++实现 634
12.8 预测编码 637
12.8.1 DPCM的基本原理 638
12.8.2 预测编码的类型 639
12.8.3 预测编码的Visual C++实现 639
12.9 JPEG 2000编码 654
12.9.1 JPEG 2000概述 654
12.9.2 JPEG 2000图像编解码系统 655
12.9.3 JPEG 2000图像压缩码流格式 659