图像处理与计算机视觉算法及应用(第2版)
基本信息:
书名原文:Algorithms for Image Processing and Computer Vision,Second Edition
ISBN978-7-302-28222-8
定价:49元
作译者:(加拿大) 帕科尔(Parker,J. R.) 著;景丽 译
内容简介:
作者简介:
J. R. Parker是一名计算机专家和教师,对图像处理和视觉、视频游戏技术以及计算机仿真有着浓厚的兴趣。在根特州立大学获得信息学博士学位之后,Parker博士在加拿大卡尔加里大学任全职教授,讲授计算机科学、艺术和戏剧。他的作品包括150多篇技术论文和4本书,他还是视频游戏Booze Cruise的作者,这个游戏模拟了酒后驾车的情形,用于演示酒后驾车行为的危险性。此外他还开发了很多其他教育游戏。
前言:
人类主要的感官输入来源是视觉系统,人们付出了很多努力致力于通过人工的方式提升这种感官能力。眼镜、望远镜、雷达、红外线传感器和光电倍增器等设备的功能都用于提升我们对世界和宇宙的观察能力。我们甚至在轨道上也建立了望远镜(外太空的眼睛),通过很多这种望远镜能“看到”其他频谱:红外线、紫外线和X射线。这些设备给予了我们几年前想都不敢想的视野,还能让我们观测到裸眼无法观察到的色彩。计算机成为了通过这些设备创建我们能看见的伟大图像的必备工具。
在本书第一版写作的时候,哈勃空间望远镜就已经在轨,并能以很高的速率生成图像。哈勃空间望远镜和欧洲的依巴谷(Hipparcos)望远镜是当时在大气层以上仅有的光学设备。现在有了COROT、Kepler、MOST(加拿大的空间望远镜)和雨燕伽马射线暴探测器(Swift Gamma RayBurst Explorer)。此外,还有Spitzer(红外线)、Chandra(X射线)、GALEX(紫外线)探测器以及很多其他探测器。本书第一版是在一台带有256MB内存、450Mhz奔腾III处理器的计算机上编写的。1999年,第一台数字单反相机投放市场:Nikon D1。这台相机只有274万像素,价格为6000美元。一台典型的PC机硬盘容量为100~200MB。网络摄像机在1997年就出现了,但是非常昂贵而且分辨率很低。通过计算机处理图像的人需要有一个特殊的图像获取卡和比较昂贵的照相机才能开展自己的工作,总共需要大约1000~2000美元的设备。相比那个年代,个人计算机和图像获取的技术已经取得了长足的发展。
1997年,在我多次浏览与图像处理和计算机视觉相关的Internet新闻组的时候,萌生了写这本书第一版的想法。我注意到有一些提问请求反复出现,它们有时候能得到回答,而有时候得不到回答,因此我考虑是否能写一本书来回答这些常见的问题,书籍的形式能够提供完整解释所需要的一些必备的背景信息。然而,由于我当时刚刚完成了另一本书(Practical Computer Vision Using C),因此我没心情再写一本书了。我继续在网上收集信息,希望有朝一日能以合理的方式整理这些信息。我做到了——本书第一版广受好评。感谢你们!
15年后,技术发生了变化,但我惊讶地发现,计算机视觉和图像处理领域的变化却如此之小,至少其变化在可接受的范围内。的确,理论变得更加复杂,而且三维视觉技术也肯定得到了提升。一些机器人视觉系统已经能完成非常有意思的事情,人脸识别也步入了一个新的台阶。然而,简单的字符识别仍然非常简单,还没有进步到能够在大部分情况下可靠工作的地步。和其他类型的软件不一样,视觉系统并没有深入日常的生活。为什么呢?可能是因为视觉问题的确是一个非常棘手的问题。或许有必要对原书进行一次修订?
我的目标有所改变。我现在对这项技术的“民主化”同样感兴趣——也就是说,让任何人都能使用这项技术,不论是在家里、在商业场合还是在学校。当然,您要懂得计算机编程,不过编程技能已经比过去更加普遍。这一版中构建程序所需的所有软件都可以在Internet上免费获得。我使用了免费的编译器(Microsoft Visual Studio Express),OpenCV也能免费下载。阻碍您开发自己的图像分析系统的唯一障碍就是您自己的编程技能。
在这一版中,有一些原始的材料并没有太大的改变。边缘检测、细化、阈值化和形态学一直都不是研究的热点,因此它们在这一版中的相关章节和初版中的相关章节非常接近。软件已经升级为使用Intel的OpenCV系统,对于程序员来说,使用这个系统可以使得图像IO和显示的工作简单得多。甚至从网络摄像机实时获得图像并作为程序的输入也成为了一件简单的事情。第1章讨论了OpenCV使用的基础知识,本书所有的软件都使用OpenCV作为基础。
本书中出现的大部分数学内容都是详细理解书中所描述的算法的必备内容。只有数学才能提供图像处理和视觉系统中的高级方法所需要的推导和证明。在某些情况下,我只涉及了表面知识,更细节的研究留给那些愿意根据每章末的参考文献按图索骥的读者。我精心选择了描述不同方法的文献,有的文献提供了详细且复杂的数学分析,有的文献提供了清晰简洁的讲解。然而,对于某些情况,在文献中几乎没有非常清晰的描述,而且至少需要具备大学数学水平才能理解。在这本书中,我尝试用直观的方式描述问题,为了尽可能地描述清楚而牺牲了一些严谨性(几乎所有其他文献都很严谨)。和正文描述相伴的软件是对数学的替代,可以提供算法的分步描述。
我彻底删除了本书第一版中的一些材料。书中再也没有关于小波的章节了,也没有遗传算法的章节。从另一方面说,本书新添了关于分类器的章节,我认为在第一版中这显然是一个遗漏。这一版中新添的重要的一章是关于利用并行计算解决图像处理问题的章,其中包括通过图形卡(GPU)加速计算高达200倍。还有全新的关于基于内容的搜索的第11章,基于内容的搜索指的是通过图像中的信息获取其他图像。就好像是说:“找出另一张与这张图片类似的图片”。基于内容的搜索会成为未来20年的重要技术。这项技术可以有效地使用现代大容量的磁盘驱动器;而且随着低成本高分辨率数码相机的普及,可以预见人们越来越需要在大量大图像(海量像素数)中搜索图像。
这一版中讨论的大部分算法的源码都可以在本书的网站上找到。关于阈值处理的那一章提供了17个程序,每一个程序实现了不同的阈值算法。现在在Internet上都可以找到细化程序、边缘检测程序以及形态学程序。
关于图像还原的一章仍是该主题实用信息的少有来源之一。符号识别的章节被更新了;然而,由于很多方法都是商用的,因此由于专利和版权的原因,不能描述这些方法,也不能提供相关的软件。不过,其基础内容都得到了描述,而且可以关联到与分类器有关的内容。
我认为利用并行计算处理视觉问题的那一章是本书的亮点。再次,利用可以下载到的工具,这一章展示了如何将网络上的所有计算机都连接起来组建成一个大型的图像处理集群。这一章还讲解了如何利用多核处理器上的所有CPU;最重要的是,这一章还介绍了有关如何利用GPU编程的非常实用的信息,通过GPU可以进行图像处理和视觉任务处理,而不仅仅是显示图形。
最后,我还写了包含了一组精选的图像搜索方法的一章内容。这些方法都有对应的代码展示其算法的实现,再结合本书中的其他代码,您可以花很多时间实验自己的关于组织和搜索图像数据集的想法和算法。
读者可以在本书网站(http://www.wiley.com/go/jrparker)或者http://www.tupwk.com.cn/downpage上下载本书中提到的所有源代码和示例图像。您还可以链接到我的个人主页,在这上面我会添加新的代码和新的图像,甚至还会添加一些新写的材料补充和修订印刷的材料。通过这个网站还可以交流评论和错误,勘误表也会发布在这个网站上,另外读者贡献的软件和在其他系统和编译器上使用这些代码的新思想也会放在这个网站上。
我诚邀您通过网站向我建议您想读到的新的章节的主题。我会注意选择最热的请求,然后在未来在网站上发布那个主题的新章节。一本书,尽管主要通过纸张的形式发布,也不一定是完全静止的!
Jim Parker
加拿大艾伯塔省科克伦
第1章 视觉系统实践——图像显示、
输入/输出和库函数调用 1
1.1 OpenCV 1
1.2 基本的OpenCV代码 2
1.2.1 IplImage数据结构 3
1.2.2 读写图像 5
1.2.3 图像显示 6
1.2.4 示例 6
1.3 图像捕捉 9
1.4 和AIPCV库的接口 11
1.5 网站文件 15
1.6 参考文献 15
第2章 边缘检测技术 17
2.1 边缘检测的目的 17
2.2 传统的方法和理论 19
2.2.1 边缘的模型 20
2.2.2 噪声 21
2.2.3 导数算子 24
2.2.4 基于模板的边缘检测 29
2.3 边缘模型:Marr-Hildreth边缘
检测器 31
2.4 Canny Edge边缘检测器 34
2.5 Shen-Castan(ISEF)边缘
检测器 39
2.6 两种最优边缘检测器
的比较 41
2.7 彩色边缘 44
2.8 Marr-Hildreth边缘检测器
的源代码 46
2.9 Canny边缘检测器的源代码 50
2.10 Shen-Castan边缘检测器
的源代码 58
2.11 网站文件 67
2.12 参考文献 69
第3章 数码形态学 73
3.1 形态学定义 73
3.2 连通性 73
3.3 数码形态学的基本元素——
二值操作 75
3.3.1 二值膨胀 75
3.3.2 实现二值膨胀 79
3.3.3 二值腐蚀 82
3.3.4 二值腐蚀的实现 86
3.3.5 开启和闭合 88
3.3.6 MAX——用于形态学的高级
程序设计语言 93
3.3.7 “命中/不命中”变换 97
3.3.8 识别区域边缘 99
3.3.9 条件膨胀 100
3.3.10 区域计数 102
3.4 灰阶形态学 103
3.4.1 开启操作和闭合操作 105
3.4.2 平滑操作 108
3.4.3 梯度 109
3.4.4 纹理的分割 110
3.4.5 对象的大小分布 111
3.5 彩色形态学 112
3.6 网站文件 113
3.7 参考文献 115
第4章 灰阶分割 117
4.1 灰阶分割的基础 117
4.1.1 使用边缘像素 119
4.1.2 迭代选择法 119
4.1.3 灰阶直方图法 120
4.1.4 使用熵 121
4.1.5 模糊集合 124
4.1.6 最小误差阈值法 126
4.1.7 单阈值选择的示例结果 127
4.2 使用区域阈值 129
4.2.1 Chow-Kaneko算法 130
4.2.2 通过边缘对光照进行
建模 133
4.2.3 实现和结果 135
4.2.4 对比 136
4.3 松弛法 137
4.4 移动平均法 142
4.5 基于聚类的阈值 145
4.6 多重阈值 146
4.7 网站文件 147
4.8 参考文献 148
第5章 纹理和色彩 151
5.1 纹理和分割 151
5.2 灰阶图像中纹理的简单
分析 152
5.3 灰阶共生矩阵 155
5.3.1 最大概率 157
5.3.2 矩 157
5.3.3 对比度 157
5.3.4 同质性 157
5.3.5 熵 158
5.3.6 GLCM描述符的测试
结果 158
5.3.7 纹理操作符的加速 159
5.4 边缘和纹理 161
5.5 能量和纹理 162
5.6 表面和纹理 164
5.6.1 向量散射算法 164
5.6.2 表面曲度算法 166
5.7 分形维度 168
5.8 彩色分割 171
5.9 彩色纹理 174
5.10 网站文件 174
5.11 参考文献 175
第6章 图像细化 179
6.1 骨架概述 179
6.2 中轴变换 180
6.3 迭代式形态学方法 181
6.4 等高线的使用 188
6.5 把对象看做多边形 192
6.6 基于力的图像细化 194
6.6.1 定义 195
6.6.2 力场的使用 195
6.6.3 子像素骨架 198
6.7 Zhang-Suen/Stentiford/Holt组合
算法的源代码 200
6.8 网站文件 210
6.9 参考文献 211
第7章 图像还原 215
7.1 图像降质——真实世界 215
7.2 频域 217
7.2.1 傅里叶变换 217
7.2.2 快速傅里叶变换 219
7.2.3 逆傅里叶变换 222
7.2.4 二维傅里叶变换 223
7.2.5 OpenCV中的傅里叶变换 224
7.2.6 创建人工模糊 226
7.3 逆滤波器 231
7.4 Wiener滤波器 232
7.5 结构化噪声 233
7.6 运动模糊——一种特殊情况 236
7.7 同态滤波器——过滤照度 237
7.7.1 通用频率过滤器 238
7.7.2 分离光照产生的效果 240
7.8 网站文件 241
7.9 参考文献 242
第8章 分类 245
8.1 对象、模式和统计数据 245
8.1.1 特征和区域 247
8.1.2 训练和测试 251
8.1.3 类别内和类别外的差异 253
8.2 最小距离分类器 256
8.2.1 距离度量 257
8.2.2 特征之间的距离 259
8.3 交叉验证 260
8.4 支持向量机 262
8.5 多重分类器——整合
分类器 264
8.5.1 合并多种方法 264
8.5.2 整合类型1的响应 265
8.5.3 评估 266
8.5.4 响应类型之间的转换 267
8.5.5 整合类型2的响应 267
8.5.6 整合类型3的响应 269
8.6 bagging和boosting 269
8.6.1 bagging 269
8.6.2 boosting 269
8.7 网站文件 271
8.8 参考文献 271
第9章 符号识别 273
9.1 问题描述 273
9.2 对简单的完美图像进行
OCR 274
9.3 在扫描的图像上进行OCR——
图像分割 277
9.3.1 噪声 277
9.3.2 分离独立的字形 279
9.3.3 匹配模板 282
9.3.4 统计识别 284
9.4 传真图像的OCR——针对印刷
字符 287
9.4.1 朝向——倾斜检测 287
9.4.2 使用边缘 291
9.5 手写字符 294
9.5.1 字符轮廓的属性 295
9.5.2 凸缺 297
9.5.3 向量模板 301
9.5.4 神经网络 305
9.6 使用多重分类器 312
9.6.1 合并多种方法 312
9.6.2 多重分类器的结果 314
9.7 印刷乐谱识别——案例
研究 315
9.7.1 五线谱线 315
9.7.2 分割 317
9.7.3 音乐符号识别 319
9.8 神经网络识别系统的源代码 320
9.9 网站文件 327
9.10 参考文献 328
第10章 基于内容的搜索——通过示例
搜索图像 333
10.1 搜索图像 333
10.2 维护图像集合 334
10.3 通过示例搜索的特征 336
10.3.1 彩色图像的特征 336
10.3.2 灰阶图像特征 343
10.4 考虑空间因素 345
10.4.1 整体区域 346
10.4.2 矩形区域 346
10.4.3 角度区域 346
10.4.4 环状区域 347
10.4.5 混合区域 348
10.4.6 空间采样的测试 348
10.5 其他要考虑的因素 350
10.5.1 纹理 351
10.5.2 对象、等高线和边缘 351
10.5.3 数据集 351
10.6 网站文件 352
10.7 参考文献 353
第11章 将高性能计算用于视觉处理
和图像处理 357
11.1 多处理器计算的范式 358
11.1.1 共享内存 358
11.1.2 消息传递 359
11.2 执行时间 359
11.2.1 使用clock()函数 359
11.2.2 使用QueryPerformance-
Counter函数 361
11.3 消息传递接口系统 363
11.3.1 安装MPI 363
11.3.2 使用MPI 364
11.3.3 进程间通信 364
11.3.4 运行MPI程序 366
11.3.5 真实的图像计算 367
11.3.6 使用计算机网络——集群
计算 370
11.4 共享内存系统——使用PC
的图形处理器 372
11.4.1 GLSL 373
11.4.2 OpenGL基础 373
11.4.3 OpenGL中的纹理实践 375
11.4.4 着色器编程基础 378
11.4.5 读入并转换图像 381
11.4.6 向着色程序传递参数 382
11.4.7 整合以上内容 384
11.4.8 通过GPU加速 385
11.4.9 开发和测试着色器
代码 385
11.5 寻找所需的软件 386
11.6 网站文件 387
11.7 参考文献 387