新書推薦:
《
大单元教学设计20讲
》
售價:HK$
76.2
《
儿童自我关怀练习册:做自己最好的朋友
》
售價:HK$
69.4
《
高敏感女性的力量(意大利心理学家FSP博士重磅力作。高敏感是优势,更是力量)
》
售價:HK$
62.7
《
元好问与他的时代(中华学术译丛)
》
售價:HK$
87.4
《
汽车传感器结构·原理·检测·维修
》
售價:HK$
109.8
《
怪谈百物语:不能开的门(“日本文学史上的奇迹”宫部美雪重要代表作!日本妖怪物语集大成之作,系列累销突破200万册!)
》
售價:HK$
65.0
《
罗马政治观念中的自由
》
售價:HK$
50.4
《
中国王朝内争实录:宠位厮杀
》
售價:HK$
61.6
編輯推薦:
Amazon.com计算机视觉类图书第一名!
专门用Python讲解计算机视觉编程
內容簡介:
想要了解计算机视觉的基本理论与算法?这本实践指南绝对会让你爱不释手。本书以大量简单明了的Python示例为依托,全面细致地介绍了对象识别、3D重建、立体成像、增强现实等技术。
书中没有枯燥的理论,而是结合代码示例讨论了计算机视觉的概念与应用。除了提供完整的示例代码以阐述计算机视觉编程的技术与方法,本书还从读者角度出发,提供了很多练习,以便巩固所学知识。只要有一定编程与数学基础,无论学生、研究人员,还是计算机视觉编程爱好者,本书都不容错过。
机器人导航、医学图像分析及其他计算机视觉应用技巧
图像映射与变换,包括纹理扭曲和全景创建
同一场景下多图像的3D重建
使用聚类方法,基于相似性或内容组织图像
构建有效的图像检索技巧,基于视觉内容搜索图像
用算法实现图像内容的分类和对象识别
通过Python接口访问流行的OpenCV库
關於作者:
Jan Erik Solem
瑞典隆德大学副教授(数学成像小组),Polar Rose公司创始人兼CTO,计算机视觉研究者,Python爱好者,技术图书作家,经常出席各种计算机视觉、图像分析、机器智能等国际会议并发表演讲。他主要关注3D重建、变分问题与优化、图像分割与识别、形状分析,有多年Python计算机视觉教学、研究和行业应用经验,技术博客为http:www.janeriksolem.net。另著有Computing with Python: An Introduction to Python for Science and Engineering一书。
目錄 :
推荐序XI
前言XIII
第1章 基本的图像操作和处理1
1.1 PIL:Python图像处理类库1
1.1.1 转换图像格式2
1.1.2 创建缩略图3
1.1.3 复制和粘贴图像区域3
1.1.4 调整尺寸和旋转3
1.2 Matplotlib4
1.2.1 绘制图像、点和线4
1.2.2 图像轮廓和直方图6
1.2.3 交互式标注7
1.3 NumPy8
1.3.1 图像数组表示8
1.3.2 灰度变换9
1.3.3 图像缩放11
1.3.4 直方图均衡化11
1.3.5 图像平均13
1.3.6 图像的主成分分析(PCA)14
1.3.7 使用pickle模块16
1.4 SciPy17
1.4.1 图像模糊18
1.4.2 图像导数19
1.4.3 形态学:对象计数22
1.4.4 一些有用的SciPy模块23
1.5 高级示例:图像去噪24
练习28
代码示例约定29
第2章 局部图像描述子31
2.1 Harris角点检测器31
2.2 SIFT(尺度不变特征变换)39
2.2.1 兴趣点39
2.2.2 描述子39
2.2.3 检测兴趣点40
2.2.4 匹配描述子43
2.3 匹配地理标记图像47
2.3.1 从Panoramio下载地理标记图像47
2.3.2 使用局部描述子匹配50
2.3.3 可视化连接的图像52
练习54
第3章 图像到图像的映射57
3.1 单应性变换57
3.1.1 直接线性变换算法59
3.1.2 仿射变换60
3.2 图像扭曲61
3.2.1 图像中的图像63
3.2.2 分段仿射扭曲67
3.2.3 图像配准70
3.3 创建全景图76
3.3.1 RANSAC77
3.3.2 稳健的单应性矩阵估计78
3.3.3 拼接图像81
练习84
第4章 照相机模型与增强现实85
4.1 针孔照相机模型85
4.1.1 照相机矩阵86
4.1.2 三维点的投影87
4.1.3 照相机矩阵的分解89
4.1.4 计算照相机中心90
4.2 照相机标定91
4.3 以平面和标记物进行姿态估计93
4.4 增强现实97
4.4.1 PyGame和PyOpenGL97
4.4.2 从照相机矩阵到OpenGL格式98
4.4.3 在图像中放置虚拟物体100
4.4.4 综合集成102
4.4.5 载入模型104
练习106
第5章 多视图几何107
5.1 外极几何107
5.1.1 一个简单的数据集109
5.1.2 用Matplotlib绘制三维数据111
5.1.3 计算F:八点法112
5.1.4 外极点和外极线113
5.2 照相机和三维结构的计算116
5.2.1 三角剖分116
5.2.2 由三维点计算照相机矩阵118
5.2.3 由基础矩阵计算照相机矩阵120
5.3 多视图重建122
5.3.1 稳健估计基础矩阵123
5.3.2 三维重建示例125
5.3.3 多视图的扩展示例129
5.4 立体图像130
练习135
第6章 图像聚类137
6.1 K-means聚类137
6.1.1 SciPy聚类包138
6.1.2 图像聚类139
6.1.3 在主成分上可视化图像140
6.1.4 像素聚类142
6.2 层次聚类144
6.3 谱聚类152
练习157
第7章 图像搜索159
7.1 基于内容的图像检索159
7.2 视觉单词160
7.3 图像索引164
7.3.1 建立数据库164
7.3.2 添加图像165
7.4 在数据库中搜索图像167
7.4.1 利用索引获取候选图像168
7.4.2 用一幅图像进行查询169
7.4.3 确定对比基准并绘制结果171
7.5 使用几何特性对结果排序172
7.6 建立演示程序及Web应用176
7.6.1 用CherryPy创建Web应用176
7.6.2 图像搜索演示程序176
练习179
第8章 图像内容分类181
8.1 K邻近分类法(KNN)181
8.1.1 一个简单的二维示例182
8.1.2 用稠密SIFT作为图像特征185
8.1.3 图像分类:手势识别187
8.2 贝叶斯分类器190
8.3 支持向量机195
8.3.1 使用LibSVM196
8.3.2 再论手势识别198
8.4 光学字符识别199
8.4.1 训练分类器200
8.4.2 选取特征200
8.4.3 多类支持向量机201
8.4.4 提取单元格并识别字符202
8.4.5 图像校正205
练习206
第9章 图像分割209
9.1 图割(Graph Cut)209
9.1.1 从图像创建图211
9.1.2 用户交互式分割216
9.2 利用聚类进行分割218
9.3 变分法224
练习226
第10章 OpenCV227
10.1 OpenCV的Python接口227
10.2 OpenCV基础知识228
10.2.1 读取和写入图像228
10.2.2 颜色空间228
10.2.3 显示图像及结果229
10.3 处理视频232
10.3.1 视频输入232
10.3.2 将视频读取到NumPy数组中234
10.4 跟踪234
10.4.1 光流235
10.4.2 Lucas-Kanade算法237
10.5 更多示例243
10.5.1 图像修复243
10.5.2 利用分水岭变换进行分割244
10.5.3 利用霍夫变换检测直线245
练习246
附录A 安装软件包247
A.1 NumPy和SciPy247
A.1.1 Windows247
A.1.2 Mac OS X247
A.1.3 Linux248
A.2 Matplotlib248
A.3 PIL248
A.4 LibSVM249
A.5 OpenCV249
A.5.1 Windows 和 Unix249
A.5.2 Mac OS X249
A.5.3 Linux250
A.6 VLFeat250
A.7 PyGame250
A.8 PyOpenGL250
A.9 Pydot251
A.10 Python-graph251
A.11 Simplejson252
A.12 PySQLite252
A.13 CherryPy252
附录B 图像集253
B.1 Flickr253
B.2 Panoramio254
B.3 牛津大学视觉几何组255
B.4 肯塔基大学识别基准图像255
B.5 其他256
B.5.1 Prague Texture Segmentation Datagenerator与基准256
B.5.2 微软研究院Grab Cut数据集256
B.5.3 Caltech 101256
B.5.4 静态手势数据库256
B.5.5 Middlebury Stereo数据集256
附录C 图片来源257
C.1 来自Flickr的图像257
C.2 其他图像258
C.3 插图258
参考文献259
索引263
內容試閱 :
【前言】
今天,图像和视频无处不在,在线照片分享网站和社交网络上的图像有数十亿之多。几乎对于任意可能的查询图像,搜索引擎都会给用户返回检索的图像。实际上,几乎所有手机和计算机都有内置的摄像头,所以在人们的设备中,有几G 的图像和视频是一件很寻常的事。
计算机视觉就是用计算机编程,并设计算法来理解在这些图像中有什么。计算机视觉的有力应用有图像搜索、机器人导航、医学图像分析、照片管理等。
本书旨在为计算机视觉实战提供一个简单的切入点,让学生、研究者和爱好者充分理解其基础理论和算法。本书中的编程语言是Python,Python 自带了很多可以免费获取的强大而便捷的图像处理、数学计算和数据挖掘模块,可以免费获取。
写作本书的时候,我遵循了以下原则。
鼓励探究式学习,让读者在阅读本书的时候,在计算机上跟着书中示例进行练习。
推广和使用免费且开源的软件,设立较低的学习门槛。显然,我们选择了Python。
保持内容完整性和独立性。本书没有介绍计算机视觉的全部内容,而是完整呈现并 解释所有代码。你应该能够重现这些示例,并可以直接在它们之上构建其他应用。
内容追求广泛而非详细,且相对于理论更注重鼓舞和激励。
总之,如果你对计算机视觉编程感兴趣,希望它能给你带来启发。
先决条件和概述
本书主要针对各种应用和问题探讨理论及算法,下面简单概括一下。
读者须知
基本的编程经验。你需要会使用编辑器,能够运行脚本,知道如何构建代码以及基 本数据类型。熟悉Python,或诸如Ruby、Matlab 等其他脚本语言,这也会对你理解本书有所帮助。
数学基础。如果你知道矩阵、向量、矩阵乘法、标准数学函数以及导数和梯度等概念, 这对于充分利用其中示例非常有益。对于一些较高级的数学例子,你可以轻松跳过。
本书内容
用Python 对图像进行实战编程。
现实世界中各种应用背后的计算机视觉技术。
一些基本算法,以及如何实现并应用这些算法。
本书中的代码示例会向你展示物体识别、基于内容的图像检索、图像搜索、光学字符识别、光流、跟踪、三维重建、立体成像、增强现实、姿态估计、全景创建、图像分割、降噪、图像分组等内容。
各章概览
第1 章 “基本的图像操作和处理”介绍用来处理图像的基本工具及本书用到的核心Python 模块,同时涵盖了很多贯穿全书的基础示例。
第2 章 “局部图像描述子”讲解检测图像兴趣点的方法,以及怎样使用它们在图像间寻找相应点和区域。
第3 章 “图像到图像的映射”描述图像间基本的变换及其计算方法。涵盖从图像扭曲到创建全景图像的示例。
第4 章 “照相机模型与增强现实”介绍如何对照相机建模、生成从三维空间到图像特征的图像投影,并估计照相机视点。
第5 章 “多视图几何”讲解如何对具有相同场景、多视图几何基本面的图像进行处理,以及怎样从图像计算三维重建。
第6 章 “图像聚类”介绍一些聚类方法,并展示如何基于相似性或内容对图像进行分组和组织。
第7 章 “图像搜索”展示如何建立有效的图像检索技术,以便能够存储图像的表示, 并基于图像的视觉内容搜索图像。
第8 章 “图像内容分类”描述了图像内容分类算法,以及怎样使用它们识别图像中的物体。
第9 章 “图像分割”介绍了通过聚类、用户交互或图像模型,将图像分割成有意义区域的不同技术。
第10 章 “OpenCV”展示怎样使用常用的OpenCV 计算机视觉库Python 接口,以及如何处理视频及摄像头的输入。
本书结尾有参考文献。文献条目的引用用方括号表示,如[20]。
计算机视觉简介
计算机视觉是一门对图像中信息进行自动提取的学科。信息的内容相当广泛,包括三维模型、照相机位置、目标检测与识别,以及图像内容的分组与搜索等。本书中, 我们使用广义的计算机视觉概念,包括图像扭曲、降噪和增强现实等①。
计算机视觉有时试图模拟人类视觉,有时使用数据和统计方法,而有时几何是解决问题的关键。在本书中,我们试图对此进行全面介绍。
实用计算机视觉混合了编程、建模和数学技巧,有时很难掌握。我本着“力求简单, 又不影响理解”的精神,有意用最少的理论来展示这些内容。书中对于数学知识的介绍是为了帮助读者理解算法,有些章(主要是第4 章和第5 章)无法避免地涉及很多数学理论。只要读者愿意,可以跳过这些数学理论,直接使用示例代码。
注1: 这些例子生成新的图像,并且比实际地从图像中提取信息需要更多的图像处理。
Python和NumPy
Python 是一门编程语言,其使用贯穿了全书的示例代码。Python 是一种简洁明了的语言,对于输入 输出、数字、图像及绘图都具有良好的支持。这门语言的一些特性需要我们逐渐适应,比如缩进和紧凑语法。要运行代码示例,你需要安装Python 2.6 或之后的版本,因为只有这些版本才提供本书中用到的很多工具包。Python 3.x 版本与2.x 版本有很多语法差异,并且不兼容2.x 版本,也不兼容我们所需的工具包。
熟悉一些基本Python 操作会更容易理解这些内容。对于Python 初学者,我建议读一下Mark Lutz 的书Learning Python[20] 和http:www.python.org 上的在线文档。
在进行计算机视觉编程的时候,我们需要在向量、矩阵的表示上进行操作,这可以通过Python 的NumPy 模块处理;在该模块中,向量和矩阵是用array 类型表示的。对于图像,我们也将采用这种类型的表示。Travis Oliphant 的免费电子书Guide to NumPy[24] 是一本不错的NumPy 参考手册;http:numpy.scipy.org 上的文档对于刚接触NumPy 的读者来说是一个很好的起点。对于结果的可视化,我们会用到Matplotlib 模块;而对于更高级的数学,我们会用到SciPy 模块。这些就是你会用到的核心模块,详见第1 章。
除了这些核心模块,对于某些特殊目的,比如读取JSON 或XML、载入并保存数据、生成图、图形编程、Web 演示、分类器等,我们还会用到很多其他免费模块。这些模块只有在特殊的应用和演示中才需要,如果你对于某种应用不感兴趣,可以跳过。
这里有必要提一下IPython,它是一个交互式Python 壳,使调试和实验变得更简单。对应文档及下载地址见http:ipython.org。
排版约定
代码如下:
# 一些点
x = [100,100,400,400]
y = [200,500,200,500]
# 绘制这些点
plotx,y
本书中的字体约定如下。
楷体
用于定义。
等宽字体( Constant width)
用于函数、Python 模块及代码示例,也用于控制台打印输出。
数学公式为内联式(如 xw x f b T = + ),或者单独居中:
xwf xb ii i =+
只有需要参考的时候我们才对公式进行编号。
在介绍数学知识的部分,标量使用小写字母(s, r, λ, θ…),矩阵(包括图像数组I) 使用大写加粗(A, V, H,…),向量则小写加粗(t, c,…),二维(图像)和三维中的点分别用x=[x, y] 和X[X, Y, Z] 表示。
使用代码示例
本书旨在帮助你完成工作。通常,你可以在程序或文档中使用本书的代码。你不必联系我们请求许可,除非你要复制本书的大量代码。例如,用本书的几段代码编写程序不需要获得许可;售卖或再分发O’Reilly 的图书示例光盘需要获得许可;引用本书和示例代码回答问题不需要获得许可;将本书中的大量示例代码纳入产品文档中需要获得许可。
我们对你在使用时声明引用信息表示感谢,但不强制要求。引用信息通常包括标题、作者、出版商和ISBN, 例如“Programming Computer Vision with Python by Jan Erik Solem O’Reilly. Copyright 2012 Jan Erik Solem, 978-1-449-31654-9.”
如果你觉得使用的代码示例超出合理引用或上述许可范围,请随时和我们联系: permissions@oreilly.com。
Safari Books Online
Safari Books Online(www.safaribooksonline.com)是应需而变的数字图书馆。它同时以图书和视频的形式出版世界顶级技术和商务作家的专业作品。
Safari Books Online 是技术专家、软件开发人员、Web 设计师、商务人士和创意人士开展调研、解决问题、学习和认证培训的第一手资料。
对于组织团体、政府机构和个人,Safari Books Online 提供各种产品组合和灵活的定价策略。用户可通过一个功能完备的数据库检索系统访问O’Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology 以及其他几十家出版社的上千种图书、培训视频和正式出版之前的书稿。要了解Safari Books Online 的更多信息,我们网上见。
联系我们
请把对本书的评价和问题发给出版社。
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)
奥莱利技术咨询(北京)有限公司
O’Reilly 的每一本书都有专属网页,你可以在那儿找到本书的相关信息,包括勘误表、示例代码以及其他信息。本书的网站地址是:
http:shop.oreilly.comproduct0636920022923.do
对于本书的评论和技术性问题,请发送电子邮件到:
bookquestions@oreilly.com
要了解更多O’Reilly 图书、培训课程、会议和新闻的信息,请访问以下网站:
http:www.oreilly.com
我们在Facebook 的地址如下:
http:facebook.comoreilly
请关注我们的Twitter 动态:
http:twitter.comoreillymedia
我们的YouTube 视频地址如下:
http:www.youtube.comoreillymedia
致谢
感谢参与本书写作及出版的每一个人,感谢整个O’Reilly 团队给予的帮助。特别要感谢Andy Oram(O’Reilly)的编辑工作,以及Paul Anagnostopoulos(Windfall Software)的高效出版工作。
很多人对于我分享在网上的书稿发表了评论。感谢Klas Josephson 和Hkan Ard 就本书细致给出意见及反馈,而Fredrik Kahl 和Pau Gargallo 帮助进行了核实。感谢所有读者的鼓励,以及对本书文本和代码示例的改进。很多陌生人通过邮件分享了对书稿的看法,这对我而言是一个巨大的动力。
最后,感谢朋友和家人对我夜以继日写作的理解和支持。特别要感谢长久以来一直支持着我的妻子Sara。