本书介绍如何用流行的Python 图像处理库、机器学习库和深度学习库解决图像处理问题。先介绍经典的图像处理技术,然后探索图像处理算法的演变历程,始终紧扣图像处理以及计算机视觉与深度学习方面的**进展。全书共12 章,涵盖图像处理入门基础知识、应用导数方法实现图像增强、形态学图像处理、图像特征提取与描述符、图像分割,以及图像处理中的经典机器学习方法等内容。
本书适合Python 工程师和相关研究人员阅读,也适合对计算机视觉、图像处理、机器学习和深度学习感兴趣的软件工程师参考。
1. 图像处理、计算机视觉与深度学习的**进展。
2. 实战性较强,涵盖图像修复、梯度融合、变分去噪、接缝雕刻、图像绗缝和人脸变形等新应用。
3. 用流行的Python 图像处理库、机器学习库和深度学习库解决图像处理问题。
桑迪潘.戴伊(Sandipan Dey)是一位兴趣广泛的数据科学家,主要研究机器学习、深度学习、图像处理和计算机视觉,曾在推荐系统、行业动态预测模型、传感器定位模型、情感分析和设备预测等众多数据科学领域工作过。
桑迪潘.戴伊拥有美国马里兰大学计算机科学硕士学位,在IEEE 数据挖掘会议和期刊上发表了数篇学术论文,并在数据科学、机器学习、深度学习、图像处理及相关课程/专业等方面获得了100 多个慕课(mooc)学习认证。他经常在博客空(sandipanweb)撰写博客,是机器学习教育爱好者。
第1 章 图像处理入门 1
1.1 什么是图像处理及图像处理的应用 2
1.1.1 什么是图像以及图像是如何存储的 2
1.1.2 什么是图像处理 4
1.1.3 图像处理的应用 4
1.2 图像处理流程 4
1.3 在Python 中安装不同的图像处理库 6
1.3.1 安装pip 6
1.3.2 在Python 中安装图像处理库 6
1.3.3 安装Anaconda 发行版 7
1.3.4 安装Jupyter 笔记本 7
1.4 使用Python 进行图像输入/输出和显示 8
1.4.1 使用PIL 读取、保存和显示图像 8
1.4.2 使用matplotlib 读取、保存和显示图像 10
1.4.3 使用scikit-image 读取、保存和显示图像 12
1.4.4 使用SciPy 的misc 模块读取、保存和显示图像 14
1.5 处理不同的文件格式和图像类型,并执行基本的图像操作 15
1.5.1 处理不同的文件格式和图像类型 16
1.5.2 执行基本的图像操作 20
小结 38
习题 39
拓展阅读 40
第2 章 采样、傅里叶变换与卷积 41
2.1 图像形成—采样和量化 42
2.1.1 采样 42
2.1.2 量化 48
2.2 离散傅里叶变换 51
2.2.1 为什么需要DFT 51
2.2.2 用快速傅里叶变换算法计算DFT 51
2.3 理解卷积 56
2.3.1 为什么需要卷积图像 57
2.3.2 使用SciPy 信号模块的convolve2d 函数进行卷积 57
2.3.3 使用SciPy 中的ndimage.convolve 函数进行卷积 61
2.3.4 相关与卷积 62
小结. 66
习题. 66
第3 章 卷积和频域滤波 67
3.1 卷积定理和频域高斯模糊 67
3.2 频域滤波 75
3.2.1 什么是滤波器 75
3.2.2 高通滤波器 76
3.2.3 低通滤波器 81
3.2.4 DoG 带通滤波器 87
3.2.5 带阻(陷波)滤波器 88
3.2.6 图像复原 90
小结 98
习题 98
第4 章 图像增强 99
4.1 逐点强度变换—像素变换 100
4.1.1 对数变换 101
4.1.2 幂律变换 103
4.1.3 对比度拉伸 104
4.1.4 二值化 108
4.2 直方图处理—直方图均衡化和直方图匹配 112
4.2.1 基于scikit-image 的对比度拉伸和直方图均衡化 113
4.2.2 直方图匹配 117
4.3 线性噪声平滑 120
4.3.1 PIL 平滑 120
4.3.2 基于SciPy ndimage 进行盒核与高斯核平滑比较 124
4.4 非线性噪声平滑 124
4.4.1 PIL 平滑 125
4.4.2 scikit-image 平滑(去噪) 127
4.4.3 SciPy ndimage 平滑 131
小结 132
习题 133
第5 章 应用导数方法实现图像增强 134
5.1 图像导数—梯度和拉普拉斯算子 134
5.1.1 导数与梯度 135
5.1.2 拉普拉斯算子 138
5.1.3 噪声对梯度计算的影响 140
5.2 锐化和反锐化掩模 141
5.2.1 使用拉普拉斯滤波器锐化图像 141
5.2.2 反锐化掩模 142
5.3 使用导数和滤波器进行边缘检测..144
5.3.1 用偏导数计算梯度大小 145
5.3.2 scikit-image 的Sobel 边缘检测器 146
5.3.3 scikit-image 的不同边缘检测器—Prewitt、Roberts、Sobel、Scharr 和
Laplace 148
5.3.4 scikit-image 的Canny 边缘检测器 151
5.3.5 LoG 滤波器和DoG 滤波器 152
5.3.6 基于LoG 滤波器的边缘检测 157
5.3.7 基于PIL 发现和增强边缘 159
5.4 图像金字塔—融合图像 160
5.4.1 scikit-image transform pyramid 模块的高斯金字塔 160
5.4.2 scikit-image transform pyramid 模块的拉普拉斯金字塔 162
5.4.3 构造高斯金字塔 164
5.4.4 仅通过拉普拉斯金字塔重建图像 168
5.4.5 基于金字塔的图像融合 170
小结 172
习题 173
第6 章 形态学图像处理 174
6.1 基于scikit-image 形态学模块的形态学图像处理 174
6.1.1 对二值图像的操作 175
6.1.2 利用开、闭运算实现指纹清洗 183
6.1.3 灰度级操作 184
6.2 基于scikit-image filter.rank 模块的形态学图像处理 185
6.2.1 形态学对比度增强 186
6.2.2 使用中值滤波器去噪 187
6.2.3 计算局部熵 188
6.3 基于SciPy ndimage.morphology 模块的形态学图像处理 189
6.3.1 填充二值对象中的孔洞 189
6.3.2 采用开、闭运算去噪 190
6.3.3 计算形态学Beucher 梯度191
6.3.4 计算形态学拉普拉斯 193
小结 194
习题 194
第7 章 图像特征提取与描述符 196
7.1 特征检测器与描述符 196
7.2 哈里斯角点检测器 198
7.2.1 scikit-image 包 198
7.2.2 哈里斯角点特征在图像匹配中的应用 200
7.3 基于LoG、DoG 和DoH 的斑点检测器 204
7.3.1 高斯拉普拉斯 204
7.3.2 高斯差分 205
7.3.3 黑塞矩阵 205
7.4 基于方向梯度直方图的特征提取 206
7.4.1 计算HOG 描述符的算法206
7.4.2 基于scikit-image 计算HOG 描述符 207
7.5 尺度不变特征变换 208
7.5.1 计算SIFT 描述符的算法.208
7.5.2 opencv 和opencv-contrib 的SIFT 函数 209
7.5.3 基于BRIEF、SIFT 和ORB 匹配图像的应用 210
7.6 类Haar 特征及其在人脸检测中的应用 217
7.6.1 基于scikit-image 的类Haar 特征描述符 218
7.6.2 基于类Haar 特征的人脸检测的应用 219
小结 222
习题 222
第8 章 图像分割 223
8.1 图像分割的概念 223
8.2 霍夫变换—检测图像中的圆和线 224
8.3 二值化和Otsu 分割 227
8.4 基于边缘/区域的图像分割 229
8.4.1 基于边缘的图像分割 229
8.4.2 基于区域的图像分割 231
8.5 基于菲尔森茨瓦布高效图的分割算法、SLIC 算法、快速移位图像分割算法、
紧凑型分水岭算法及使用SimpleITK 的区域生长算法 234
8.5.1 基于菲尔森茨瓦布高效图的分割算法 235
8.5.2 SLIC 算法 238
8.5.3 快速移位图像分割算法 240
8.5.4 紧凑型分水岭算法 241
8.5.5 使用SimpleITK 的区域生长算法 243
8.6 活动轮廓算法、形态学蛇算法和基于OpenCV 的GrabCut 图像分割算法 245
8.6.1 活动轮廓算法 245
8.6.2 形态学蛇算法 247
8.6.3 基于OpenCV 的GrabCut 图像分割算法 250
小结 253
习题 253
第9 章 图像处理中的经典机器学习方法 255
9.1 监督学习与无监督学习 255
9.2 无监督机器学习—聚类、PCA 和特征脸 256
9.2.1 基于图像分割与颜色量化的k 均值聚类算法 256
9.2.2 用于图像分割的谱聚类算法 260
9.2.3 PCA 与特征脸 261
9.3 监督机器学习—基于手写数字数据集的图像分类 268
9.3.1 下载MNIST(手写数字)数据集 270
9.3.2 可视化数据集 270
9.3.3 通过训练KNN、高斯贝叶斯和SVM 模型对MNIST 数据集分类 272
9.4 监督机器学习—目标检测 278
9.4.1 使用类Haar 特征的人脸检测和使用AdaBoost 的级联分类器—Viola-Jones 算法 279
9.4.2 使用基于HOG 特征的SVM 检测目标 283
小结 287
习题 287
第10 章 图像处理中的深度学习—图像分类 289
10.1 图像处理中的深度学习 289
10.1.1 什么是深度学习 290
10.1.2 经典学习与深度学习 290
10.1.3 为何需要深度学习 292
10.2 卷积神经网络 292
10.3 使用TensorFlow 或Keras 进行图像分类 295
10.3.1 使用TensorFlow 进行图像分类 295
10.3.2 使用Keras 对密集全连接层进行分类 302
10.3.3 使用基于Keras 的卷积神经网络进行分类 306
10.4 应用于图像分类的主流深度卷积神经网络 311
小结 322
习题 322
第11 章 图像处理中的深度学习—目标检测等 323
11.1 YOLO v2 323
11.1.1 对图像进行分类与定位以及目标检测 324
11.1.2 使用卷积神经网络检测目标 325
11.1.3 使用YOLO v2 326
11.2 利用DeepLab v3+的深度语义分割 333
11.2.1 语义分割 334
11.2.2 DeepLab v3+ 334
11.3 迁移学习—什么是迁移学习以及什么时候使用迁移学习 337
11.4 使用预训练的Torch 模型和cv2 实现神经风格迁移 342
11.4.1 了解NST 算法 342
11.4.2 使用迁移学习实现NST 342
11.4.3 计算总损失##344
11.5 使用Python 和OpenCV 实现神经风格迁移 344
小结 347
习题 347
第12 章 图像处理中的其他问题 348
12.1 接缝雕刻 348
12.1.1 使用接缝雕刻进行内容感知的图像大小调整 349
12.1.2 使用接缝雕刻移除目标.352
12.2 无缝克隆和泊松图像编辑 354
12.3 图像修复 356
12.4 变分图像处理 358
12.4.1 全变分去噪 359
12.4.2 使用全变分去噪创建平面纹理卡通图像 361
12.5 图像绗缝 362
12.5.1 纹理合成 362
12.5.2 纹理迁移 362
12.6 人脸变形 363
小结 364
习题 364