第0章 数字图像处理概述 1
0.1 数字图像 1
0.1.1 什么是数字图像 1
0.1.2 数字图像的显示 1
0.1.3 数字图像的分类 2
0.1.4 数字图像的实质 3
0.1.5 数字图像的表示 4
0.1.6 图像的空间和灰度级分辨率 5
0.2 数字图像处理与识别 6
0.2.1 从图像处理到图像识别 6
0.2.2 什么是机器视觉 8
0.2.3 数字图像处理和识别的应用实例 8
0.3 数字图像处理的预备知识 8
0.3.1 邻接性、连通性、区域和边界 8
0.3.2 距离度量的几种方法 10
0.3.3 基本的图像操作 10
第1章 Matlab图像处理编程基础 12
1.1 Matlab操作简介 12
1.1.1 Matlab软件环境 12
1.1.2 文件操作 13
1.1.3 在线帮助的使用 14
1.1.4 变量的使用 16
1.1.5 矩阵的使用 18
1.1.6 细胞数组(Cell Array)和结构体(Structure) 21
1.1.7 关系运算与逻辑运算 22
1.1.8 常用图像处理数学函数 22
1.1.9 Matlab程序流程控制 23
1.1.10 M文件编写 27
1.1.11 Matlab函数编写 28
1.2 Matlab图像类型及其存储方式 29
1.3 Matlab的图像转换 33
1.4 读取和写入图像文件 35
1.5 图像的显示 37
第2章 Visual C++图像处理编程基础 39
2.1 位图文件及其C++操作 39
2.1.1 设备无关位图 39
2.1.2 BMP图像文件数据结构 39
2.2 认识CImg类 42
2.2.1 主要成员函数列表 42
2.2.2 公有成员 43
2.3 CImg类基础操作 44
2.3.1 加载和写入图像 44
2.3.2 获得图像基本信息 47
2.3.3 检验有效性 48
2.3.4 按像素操作 49
2.3.5 改变图像大小 50
2.3.6 重载的运算符 51
2.3.7 在屏幕上绘制位图图像 51
2.3.8 新建图像 52
2.3.9 图像类型的判断与转化 54
2.4 DIPDemo工程 55
2.4.1 DIPDemo主界面 55
2.4.2 图像操作和处理类——CImg和CImgProcess 56
2.4.3 文档类——CDIPDemoDoc 57
2.4.4 视图类——CDIPDemoView 58
2.5 CImg应用示例 58
2.5.1 打开图像 58
2.5.2 清空图像 60
2.5.3 像素初始化方法 61
2.5.4 保存图像 61
第3章 图像的点运算 63
3.1 灰度直方图 63
3.1.1 理论基础 63
3.1.2 Matlab实现 64
3.1.3 Visual C++实现 67
3.2 灰度的线性变换 69
3.2.1 理论基础 69
3.2.2 Matlab实现 70
3.2.3 Visual C++实现 72
3.3 灰度对数变换 73
3.3.1 理论基础 74
3.3.2 Matlab实现 74
3.3.3 Visual C++实现 75
3.4 伽玛变换 76
3.4.1 理论基础 76
3.4.2 Matlab实现 77
3.4.3 Visual C++实现 79
3.5 灰度阈值变换 80
3.5.1 理论基础 80
3.5.2 Matlab实现 81
3.5.3 Visual C++实现 82
3.6 分段线性变换 83
3.6.1 理论基础 83
3.6.2 Matlab实现 84
3.6.3 Visual C++实现 88
3.7 直方图均衡化 90
3.7.1 理论基础 90
3.7.2 Matlab实现 91
3.7.3 Visual C++实现 93
3.8 直方图规定化(匹配) 94
3.8.1 理论基础 95
3.8.2 Matlab实现 95
3.8.3 Visual C++实现 97
第4章 图像的几何变换 101
4.1 解决几何变换的一般思路 101
4.2 图像平移 103
4.2.1 图像平移的变换公式 103
4.2.2 图像平移的实现 104
4.3 图像镜像 106
4.3.1 图像镜像的变换公式 106
4.3.2 图像镜像的实现 106
4.4 图像转置 109
4.4.1 图像转置的变换公式 110
4.4.2 图像转置的实现 110
4.5 图像缩放 111
4.5.1 图像缩放的变换公式 112
4.5.2 图像缩放的实现 112
4.6 图像旋转 114
4.6.1 以原点为中心的图像旋转 114
4.6.2 以任意点为中心的图像旋转 115
4.6.3 图像旋转的实现 116
4.7 插值算法 118
4.7.1 最近邻插值 118
4.7.2 线性插值及其Visual C++实现 119
4.7.3 高阶插值 121
4.8 图像配准 124
4.8.1 什么是图像配准 124
4.8.2 人脸图像配准的Matlab实现 124
4.9 Visual C++实用案例——汽车牌照的投影失真校正 128
4.9.1 系统分析与设计 129
4.9.2 系统实现 130
4.9.3 功能测试 136
第5章 空间域图像增强 140
5.1 图像增强基础 140
5.1.1 为什么要进行图像增强 140
5.1.2 图像增强的分类 140
5.2 空间域滤波 141
5.2.1 空间域滤波和邻域处理 141
5.2.2 边界处理 142
5.2.3 相关和卷积 143
5.2.4 滤波操作的Matlab实现 143
5.2.5 滤波操作的Visual C++实现 146
5.3 图像平滑 148
5.3.1 平均模板及其实现 148
5.3.2 高斯平滑及其实现 151
5.3.3 通用平滑滤波的Visual C++实现 154
5.3.4 自适应平滑滤波 156
5.4 中值滤波 156
5.4.1 性能比较 156
5.4.2 一种改进的中值滤波策略 161
5.4.3 中值滤波的工作原理 162
5.5 图像锐化 162
5.5.1 理论基础 162
5.5.2 基于一阶导数的图像增强——梯度算子 163
5.5.3 基于二阶微分的图像增强——拉普拉斯算子 167
5.5.4 基于一阶与二阶导数的锐化算子的比较 169
5.5.5 高提升滤波及其实现 171
5.5.6 高斯-拉普拉斯变换(Laplacian of a Gaussian,LoG) 175
第6章 频率域图像增强 178
6.1 频率域滤波——与空间域滤波殊途同归 178
6.2 傅立叶变换基础知识 178
6.2.1 傅立叶级数 179
6.2.2 傅立叶变换 181
6.2.3 幅度谱、相位谱和功率谱 183
6.2.4 傅立叶变换的实质—基的转换 185
6.3 快速傅立叶变换(Fast Fourier Transform,FFT)及实现 187
6.3.1 FFT变换的必要性 187
6.3.2 常见的FFT算法 188
6.3.3 按时间抽取的基-2 FFT算法 188
6.3.4 离散反傅立叶变换的快速算法(IFFT) 192
6.3.5 N维快速傅里叶变换(FFTN) 192
6.3.6 Matlab实现 192
6.3.7 Visual C++实现 198
6.4 频域滤波基础 206
6.4.1 频域滤波与空域滤波的关系 206
6.4.2 频域滤波的基本步骤 206
6.4.3 频域滤波的Matlab实现 207
6.4.4 频域滤波的Visual C++实现 208
6.5 频域低通滤波器 210
6.5.1 理想低通滤波器及其实现 210
6.5.2 高斯低通滤波器及其实现 215
6.6 频率域高通滤波器 220
6.6.1 高斯高通滤波器及其实现 220
6.6.2 频域拉普拉斯滤波器及其实现 224
6.7 Matlab综合案例——利用频域滤波消除周期噪声 227
6.7.1 频域带阻滤波器 227
6.7.2 带阻滤波消除周期噪声 229
6.8 频域滤波器与空域滤波器之间的内在联系 232
第7章 彩色图像处理 233
7.1 彩色基础 233
7.1.1 什么是彩色 233
7.1.2 我们眼中的彩色 234
7.1.3 三原色 234
7.1.4 计算机中的颜色表示 235
7.2 彩色模型 236
7.2.1 RGB模型 236
7.2.2 CMY、CMYK模型 238
7.2.3 HSI模型 241
7.2.4 HSV模型 249
7.2.5 YUV模型 254
7.2.6 YIQ模型 260
7.2.7 Lab模型简介 264
7.3 全彩色图像处理基础 264
7.3.1 彩色补偿及其Matlab实现 265
7.3.2 彩色平衡及其Matlab实现 267
第8章 形态学图像处理 270
8.1 预备知识 270
8.2 二值图像中的基本形态学运算 272
8.2.1 腐蚀及其实现 273
8.2.2 膨胀及其实现 280
8.2.3 开运算及其实现 284
8.2.4 闭运算及其实现 287
8.3 二值图像中的形态学应用 289
8.3.1 击中与击不中变换及其实现 289
8.3.2 边界提取与跟踪及其实现 291
8.3.3 区域填充及其Visual C++实现 296
8.3.4 连通分量提取及其实现 299
8.3.5 细化算法及其Visual C++实现 305
8.3.6 像素化算法及其Visual C++实现 310
8.3.7 凸壳及其Visual C++实现 316
8.3.8 bwmorph函数 319
8.4 灰度图像中的基本形态学运算 320
8.4.1 灰度膨胀及其实现 320
8.4.2 灰度腐蚀及其实现 324
8.4.3 灰度开、闭运算及其实现 328
8.4.4 顶帽变换(top-hat)及其实现 331
8.5 小结 334
第9章 图像分割 335
9.1 图像分割概述 335
9.2 边缘检测 336
9.2.1 边缘检测概述 336
9.2.2 常用的边缘检测算子 337
9.2.3 Matlab实现 340
9.2.4 Visual C++实现 343
9.3 霍夫变换 350
9.3.1 直线检测 350
9.3.2 曲线检测 352
9.3.3 任意形状的检测 353
9.3.4 Hough变换直线检测的Matlab实现 354
9.3.5 Hough变换直线检测的Visual C++实现 357
9.4 阈值分割 361
9.4.1 阈值分割方法 361
9.4.2 Matlab实现 364
9.4.3 Visual C++实现 366
9.5 区域分割 368
9.5.1 区域生长及其实现 368
9.5.2 区域分裂与合并及其Matlab实现 373
9.6 小结 378
第10章 特征提取 379
10.1 图像特征概述 379
10.1.1 什么是图像特征 379
10.1.2 图像特征的分类 379
10.1.3 特征向量及其几何解释 379
10.1.4 特征提取的一般原则 380
10.1.5 特征的评价标准 381
10.2 基本统计特征 381
10.2.1 简单的区域描绘子及其Matlab实现 381
10.2.2 直方图及其统计特征 383
10.2.3 灰度共现矩阵及其Visual C++实现 385
10.3 特征降维 388
10.3.1 维度灾难 388
10.3.2 特征选择简介 389
10.3.3 主成份分析(Principal Component Analysis,PCA) 390
10.3.4 快速PCA及其实现 397
10.4 综合案例——基于PCA的人脸特征抽取 399
10.4.1 数据集简介 399
10.4.2 生成样本矩阵 400
10.4.3 主成份分析 401
10.4.4 主成份脸可视化分析 402
10.4.5 基于主分量的人脸重建 404
10.5 局部二进制模式 406
10.5.1 基本LBP 406
10.5.2 圆形邻域的LBP P,R算子 407
10.5.3 统一化LBP算子——Uniform LBP及其Matlab实现 407
10.5.4 MB-LBP及其Matlab实现 411
10.5.5 图像分区及其Matlab实现 417
第11章 图像识别初步 421
11.1 模式识别概述 421
11.1.1 模式与模式识别 421
11.1.2 图像识别 422
11.1.3 关键概念 422
11.1.4 识别问题的一般描述 423
11.1.5 过度拟合(Overfit) 424
11.1.6 模式识别系统结构 425
11.1.7 训练/学习方法分类 425
11.2 模式识别方法分类 426
11.2.1 统计模式识别 426
11.2.2 句法模式识别 426
11.2.3 小结 427
11.3 最小距离分类器和模板匹配 428
11.3.1 最小距离分类器及其Matlab实现 428
11.3.2 基于相关的模板匹配 430
11.3.3 相关匹配的计算效率 436
第12章 人工神经网络 438
12.1 人工神经网络简介 438
12.1.1 仿生学动机 438
12.1.2 人工神经网络的应用实例 440
12.2 人工神经网络的理论基础 441
12.2.1 训练线性单元的梯度下降算法 441
12.2.2 多层人工神经网络 447
12.2.3 sigmoid单元 448
12.2.4 反向传播(BP,Back Propogation)算法 450
12.2.5 训练中的问题 453
12.3 基于ANN的数字字符识别系统DigitRec——分析与设计 454
12.3.1 任务描述 454
12.3.2 数据集简介 455
12.3.3 设计要点 455
12.4 基于ANN的数字字符识别系统DigitRec——实现 457
12.4.1 构建神经元结构—SNeuron 457
12.4.2 构建神经网络网络层——SNeuronLayer 459
12.4.3 神经网络信息头——NEURALNET_HEADER 460
12.4.4 神经网络类——CNeuralNet 460
12.4.5 神经网络的训练数据类—CNeuralData 473
12.4.6 误差跟踪类——CValueTrack 478
12.4.7 训练对话框类——CTrainDlg 481
12.4.8 测试对话框类——CTestDlg 484
12.5 基于ANN的数字字符识别系统DigitRec——测试 487
12.5.1 训练 488
12.5.2 测试 489
12.6 改进的DigitRec 490
12.6.1 数字字符图像的预处理类——COCRImageProcess 490
12.6.2 输入图像的预处理——实现 491
12.6.3 输入图像的预处理——测试 504
12.7 神经网络参数对训练和识别的影响 506
12.7.1 隐藏层单元数目的影响 506
12.7.2 学习率的影响 508
12.7.3 训练时代数目的影响 508
第13章 支持向量机 511
13.1 支持向量机的分类思想 511
13.1.1 分类模型的选择 511
13.1.2 模型参数的选择 512
13.2 支持向量机的理论基础 512
13.2.1 线性可分情况下的SVM 512
13.2.2 非线性可分情况下的C-SVM 516
13.2.3 需要核函数映射情况下的SVM 518
13.2.4 推广到多类问题 521
13.3 SVM的Matlab实现 523
13.3.1 训练——svmtrain 523
13.3.2 分类——svmclassify 525
13.3.3 应用实例 526
13.4 综合案例——基于PCA和SVM的人脸识别系统 526
13.4.1 人脸识别简介 527
13.4.2 前期处理 527
13.4.3 数据规格化(Scaling) 528
13.4.4 核函数的选择 531
13.4.5 参数选择 532
13.4.6 构建多类SVM分类器 535
13.4.7 实验结果 537