第1章 Visual C++与数字图像处理 1
1.1数字图像处理概述 1
1.1.1图像与数字图像 1
1.1.2数字图像处理研究的内容 3
1.1.3数字图像处理的应用 5
1.2 Visual C++概述 7
1.2.1编程语言的奇迹 7
1.2.2 Visual C++简介 15
1.2.3卓越的集成开发环境 18
1.3在Visual C++中处理数字图像 21
1.3.1位图和调色板 21
1.3.2图形设备接口 22
1.3.3 OpenCV 25
1.3.4 ImageMagick 25
1.4本章实例:利用Visual C++实现画图程序 25
1.4.1实例预览 25
1.4.2开始创建项目 26
1.4.3完成实例编码 28
第2章 色彩系统 34
2.1学习图像处理从认识色彩开始 34
2.1.1什么是颜色 34
2.1.2颜色的属性 36
2.1.3光源能量分布图 37
2.2 CIE色度图 39
2.2.1 CIE色彩模型的建立 39
2.2.2 CIE色度图的理解 41
2.2.3 CIE色度图的后续发展 42
2.3常用色彩空间 43
2.3.1 RGB颜色空间 43
2.3.2 CMY/CMYK颜色空间 44
2.3.3 HSV/HSB颜色空间 46
2.3.4 HSI/HSL颜色空间 47
2.3.5 Lab颜色空间 49
2.3.6 YUV/YCbCr颜色空间 49
2.4色彩空间的转换方法 50
2.4.1 RGB转换到HSV的方法 51
2.4.2 RGB转换到HSI的方法 51
2.4.3 RGB转换到YUV的方法 53
2.4.4 RGB转换到YCbCr的方法 54
2.5本章实例:Photoshop色彩编辑器的实现 55
2.5.1需要解决的若干问题 55
2.5.2开始创建项目 58
2.5.3完成实例编码 58
第3章 图像文件的格式与编码 60
3.1图像文件概述 60
3.1.1图像文件 60
3.1.2图像文件的一般结构 61
3.1.3图像文件的常用参数 61
3.2 BMP文件格式 63
3.2.1文件结构 63
3.2.2文件头和信息头 63
3.2.3主要参数 64
3.3 GIF文件格式 64
3.3.1 GIF格式简介 64
3.3.2 GIF文件结构 65
3.3.3 GIF文件块的结构 66
3.4 PNG文件格式 70
3.4.1 PNG格式简介 70
3.4.2 PNG文件结构 70
3.4.3 PNG中的关键数据块 72
3.5离散余弦变换 73
3.5.1基本概念及数学描述 73
3.5.2离散余弦变换的意义 75
3.5.3离散余弦变换的实现 86
3.6图像的压缩编码 86
3.6.1霍夫曼(Huffman)编码 87
3.6.2 LZW编码 96
3.6.3行程编码 98
3.7 JPEG文件及其解码程序的实现 99
3.7.1 JPEG文件概述 99
3.7.2 JPEG的编解码原理 99
3.7.3 JPEG文件的格式 108
3.7.4 JPEG解码程序的实现 111
第4章 使用DIB处理数字图像 117
4.1设备相关位图和设备无关位图 117
4.1.1设备相关位图(DDB) 117
4.1.2设备无关位图(DIB) 117
4.2 CBitmap类 118
4.2.1创建DDB 118
4.2.2 CBitmap中的成员函数 120
4.2.3应用DDB显示图像 121
4.2.4应用DDB显示大图像 122
4.3进一步了解DIB 130
4.3.1 DIB的结构 131
4.3.2 DIB信息段 131
4.3.3位图数据 133
4.3.4与DIB有关的函数 133
4.4本章实例:DIB类的封装 135
4.4.1类的抽象与设计 135
4.4.2编写构造函数 138
4.4.3 DIB位图的显示 142
4.4.4 BMP文件的存储 143
第5章 使用GDI+处理数字图像 145
5.1 GDI+简介 145
5.1.1 GDI+概述 145
5.1.2 GDI+的结构 146
5.1.3 GDI+在Visual C++ 2005中的配置 146
5.2 GDI+基础 148
5.2.1 Graphics类 148
5.2.2 GDI+的基本数据类型 151
5.2.3 GDI+中的颜色 152
5.3 GDI+处理图像的基本方法 154
5.3.1 GDI+的图像类 154
5.3.2创建图像对象 155
5.3.3图像的显示和缩放 157
5.3.4图像的基本处理方法 162
5.4图像的剪裁 170
5.4.1剪裁区域 170
5.4.2 GraphicsPath类 171
5.4.3 Region类 175
5.5处理图像的色彩 180
5.5.1 ColorMatrix结构体 180
5.5.2改变图像的透明度 181
5.5.3将图像转换为灰度图 185
5.5.4改变图像的亮度 187
5.5.5改变图像的对比度 189
5.6本章实例:播放GIF动画 191
5.6.1播放原理分析 192
5.6.2处理过程 192
5.6.3具体实现 193
第6章 常见图像显示特效 198
6.1显示特效概述 198
6.1.1显示特效基础 198
6.1.2显示特效过程 200
6.1.3显示特效类 201
6.2扫描显示特效 203
6.2.1特效预览 203
6.2.2基本原理和实现方法 204
6.2.3编程实现 205
6.3移动显示特效 206
6.3.1特效预览 206
6.3.2基本原理和实现方法 207
6.3.3编程实现 208
6.4百叶窗显示特效 209
6.4.1特效预览 209
6.4.2基本原理和实现方法 210
6.4.3编程实现 211
6.5栅条显示特效 212
6.5.1特效预览 213
6.5.2基本原理和实现方法 213
6.5.3编程实现 214
6.6马赛克显示特效 216
6.6.1特效预览 216
6.6.2基本原理和实现方法 216
6.6.3编程实现 217
6.7雨滴显示特效 219
6.7.1特效预览 219
6.7.2基本原理和实现方法 219
6.7.3编程实现 220
6.8本章实例:类似ACDSee的图像浏览工具 220
6.8.1实例预览 221
6.8.2概要设计 221
6.8.3完成实例编码 226
第7章 图像的点运算 234
7.1灰度直方图 234
7.1.1灰度直方图 234
7.1.2基本原理 236
7.1.3编程实现 236
7.2灰度线性变换 246
7.2.1基本原理 246
7.2.2编程实现 248
7.3灰度非线性变换 251
7.3.1灰度对数变换 251
7.3.2灰度幂次变换 255
7.3.3灰度指数变换 258
7.4灰度阈值变换 260
7.4.1基本原理 260
7.4.2编程实现 261
7.5灰度拉伸 263
7.5.1基本原理 263
7.5.2编程实现 265
7.6灰度均衡 269
7.6.1基本原理 270
7.6.2编程实现 271
第8章 对图像进行几何变换 273
8.1图像几何变换的基本理论 273
8.1.1图像几何变换概述 273
8.1.2图像几何变换的数学描述 276
8.2图像的平移变换 276
8.2.1效果预览 276
8.2.2基本原理 277
8.2.3编程实现 278
8.3图像的镜像变换 282
8.3.1效果预览 282
8.3.2基本原理 283
8.3.3编程实现 284
8.4图像的转置 287
8.4.1效果预览 288
8.4.2基本原理 288
8.4.3编程实现 288
8.5图像的缩放 290
8.5.1效果预览 290
8.5.2基本原理 291
8.5.3插值算法介绍 292
8.5.4编程实现 295
8.6图像的旋转 300
8.6.1效果预览 300
8.6.2基本原理 300
8.6.3编程实现 304
8.7使用GDI+实现图像的几何变换 310
8.7.1 GDI+的变换操作 311
8.7.2平移 312
8.7.3缩放 314
8.7.4旋转 315
8.7.5变换的组合 319
8.7.6利用矩阵进行其他几何变化 321
第9章 图像的增强处理 325
9.1图像的简单平滑 325
9.1.1邻域处理的基本概念 325
9.1.2图像的简单平滑原理 328
9.1.3图像简单平滑的算法实现 329
9.2图像的高斯平滑 333
9.2.1平滑线性滤波器 333
9.2.2高斯平滑的原理 334
9.2.3高斯分布 335
9.2.4高斯平滑的算法实现 337
9.3图像的中值滤波 341
9.3.1统计排序滤波器 341
9.3.2图像中值滤波的原理 342
9.3.3图像中值滤波的算法实现 344
9.4图像的拉普拉斯锐化 350
9.4.1图像的锐化 350
9.4.2拉普拉斯锐化的原理 351
9.4.3拉普拉斯锐化的算法实现 351
9.5 Sobel边缘细化 356
9.5.1 Sobel边缘细化的原理 356
9.5.2 Sobel边缘细化的编程实现 358
第10章 图像的边缘和轮廓 365
10.1边缘检测 365
10.1.1边缘检测的基本概念 365
10.1.2常规边缘检测 366
10.1.3带方向的边缘检测 372
10.1.4拉普拉斯算子 376
10.2 Hough变换 383
10.2.1平面坐标系的转换 383
10.2.2 Hough变换的思想 385
10.2.3直线的Hough变换 385
10.2.4圆的Hough变换 389
10.2.5彩色图像的Hough变换 390
10.3种子算法 396
10.3.1算法介绍 396
10.3.2编程实现 399
10.4轮廓跟踪 403
10.4.1区域表示方法 403
10.4.2计算区域的面积和周长 411
10.4.3单区域跟踪 412
10.4.4多区域跟踪 415
第11章 图像的形态学处理 419
11.1数学形态学 419
11.2一些必要的概念和符号约定 419
11.3图像的腐蚀 423
11.3.1腐蚀原理 423
11.3.2编程实现 426
11.4图像的膨胀 431
11.4.1膨胀原理 431
11.4.2编程实现 434
11.5腐蚀和膨胀的性质及应用 437
11.5.1腐蚀和膨胀的代数性质 437
11.5.2腐蚀和膨胀的应用 440
11.6开运算和闭运算 446
11.6.1开运算 446
11.6.2闭运算 447
11.6.3编程实现 449
11.6.4开运算和闭运算的代数性质 450
11.7图像形态学的其他运算 452
11.7.1击中/不击中运算 452
11.7.2细化处理 455
11.8基于形态学分水岭的图像分割 459
11.8.1基本概念 459
11.8.2分水岭算法 459
11.8.3编程实现分水岭分割 462
第12章 数字图像的加密与隐藏 471
12.1混沌理论概述 471
12.1.1混沌理论的发展 471
12.1.2混沌的基本概念 473
12.1.3混沌的度量与判定 475
12.2几种典型的混沌系统举例 478
12.2.1 Logistic映射 478
12.2.2 Henon映射 481
12.2.3 Chebychev映射 481
12.3数字图像的混沌加密简介 482
12.3.1密码学与混沌密码学 482
12.3.2图像混沌加密算法的分类 483
12.4基于置乱的图像加密技术 484
12.4.1数字图像与排列变换 484
12.4.2利用Hilbert曲线置乱图像 485
12.4.3利用Arnold变换置乱图像 492
12.4.4数字图像置乱算法的评价 497
12.5混沌在图像加密中的应用 497
12.5.1以排序法为基础的混沌置乱 498
12.5.2基于起始地址法的混沌置乱 508
12.5.3基于灰度值变换的混沌加密 509
12.5.4对图像进行混沌加密的评价 512
12.6数字图像的隐藏技术 516
12.6.1图像融合技术简介 516
12.6.2基于混沌的图像隐藏算法 518
12.6.3图形用户界面设计 519
12.6.4编码实现 520
第13章 使用OpenCV处理数字图像 528
13.1 OpenCV简介 528
13.1.1 OpenCV的前世今生 528
13.1.2 OpenCV的诸多优点 529
13.1.3 OpenCV的命名规则 529
13.1.4 OpenCV的相关资源 530
13.1.5 OpenCV的安装与配置 530
13.2 OpenCV的结构 533
13.2.1 OpenCV的体系结构 534
13.2.2 OpenCV的函数结构 534
13.2.3 OpenCV的功能结构 535
13.2.4 OpenCV的数据结构 536
13.3利用OpenCV显示图像 537
13.3.1图像文件的载入与显示 538
13.3.2图像文件的创建、保存和复制 539
13.4应用OpenCV进行图像平滑 543
13.4.1功能函数描述 543
13.4.2交互界面设计 544
13.4.3编码实现 544
13.5应用OpenCV进行边缘检测 548
13.5.1 Canny准则 548
13.5.2 Canny算法简介 548
13.5.3在OpenCV中使用Canny算法 549
13.6应用OpenCV进行形态学处理 555
13.6.1功能函数描述 555
13.6.2交互界面设计 556
13.6.3编码实现 556
13.7在OpenCV中应用Hough变换 560
13.7.1功能函数描述 560
13.7.2交互界面设计 562
13.7.3编码实现 562
13.8静态人脸检测程序的实现 567
13.8.1人脸检测概述 567
13.8.2算法分析 568
13.8.3编程实现 571
第14章 使用ImageMagick处理图像 577
14.1 ImageMagick简介 577
14.1.1处理数字图像的利器——ImageMagick 577
14.1.2 ImageMagick的特性和功能 578
14.1.3 Magick++ 578
14.2 ImageMagick的使用配置 579
14.2.1下载ImageMagick 579
14.2.2编译ImageMagick 579
14.2.3配置ImageMagick环境 580
14.3 Magick++基础 583
14.3.1第一个Magick++程序 583
14.3.2 Magick++的核心——Image对象 584
14.3.3 Color对象 587
14.3.4 Geometry对象 589
14.4初探Magick++ 591
14.4.1图像的缩放 591
14.4.2图像的旋转 595
14.4.3剪裁图像 595
14.4.4矩阵变换 598
14.4.5图像的镜像和滚动 599
14.5使用Magick++对图像进行增强处理 601
14.5.1调整图像的基本属性 601
14.5.2高斯平滑 604
14.5.3锐化 605
14.5.4去除图像的噪点 606
14.6使用Magick++实现图像特效 609
14.6.1运动模糊特效 609
14.6.2黑洞特效 610
14.6.3浮雕效果 612
14.6.4油画效果 613
14.6.5阴影效果 614
14.6.6旋涡效果 616
14.7其他Magick++用法 618
14.7.1种子填充 619
14.7.2批量处理 621
14.7.3真彩色转256色 624
14.7.4图像合成 626
14.7.5 ImageMagick的C语言接口 628
参考文献 634