本书主要以Python+OpenCV为主,系统地介绍了Python在数字图像处理的各种应用算法和案例,对数字图像处理的各种算法进行讲解和案例分析,以方面读者后期继续进行人工智能、机器学习、深度学习等方面的学习和研究,不再需要更换编程语言和编程环境。
本书主要以介绍图像处理技术和应用实例为主,每个处理技术后面跟着至少一个应用实例,全书共给出189个应用实例程序,每个实例均已通过作者的调试,能够运行正常,读者可直接引用。
近年来,随着人工智能技术的迅猛发展,图像处理的应用领域不断扩大。图像处理技术在国家安全、经济发展的许多领域已经得到广泛应用,在日常生活中也扮演着越来越重要的角色,目前正向更高、更深层次发展。图像处理是分析和操纵数字图像的过程,旨在提高其质量或从中提取一些信息,并用于模式识别。图像处理是一种通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。
数字图像处理是一门综合性很强的学科,已成为高等院校理工科计算机科学与技术、电子信息工程、通信工程、电子科学与技术及相关专业的一门重要的专业课。它可应用于工业、农业、交通、金融、地质、海洋、气象、生物医学、军事、公安、电子商务、卫星遥感、机器人、多媒体、网络通信等领域,有助于取得显著的社会效益和经济效益。
当前,数字图像处理方面的书籍较多,特别是基于MATLAB的数字图像处理书籍很多,而基于“Python + 图像处理库”的数字图像处理书籍较少。虽然网络上基于Python的图像处理方面的教程很多,但很零散,缺乏系统性讲解,不利于初学者学习。本书以Python + OpenCV为主线,系统地介绍Python在数字图像处理方面的各种算法和应用案例,并在Anaconda或PyCharm集成开发环境下编写程序对数字图像处理的各种算法进行讲解,以便读者在继续进行人工智能、机器学习、深度学习等方面的学习和研究时,不需要再更换编程语言和编程环境。
本书重点介绍数字图像处理技术和应用实例,每个处理技术后面会附加至少一个应用实例,读者可以通过深入理解这些处理技术和应用实例,举一反三,将相关知识应用到自己的学习和工作中。本书共13章,具体内容如下:第1章主要介绍数字图像处理技术及应用的基础知识、常用Python数字图像处理库、Anaconda和PyCharm集成环境的下载及安装。第2章到第12章介绍基于Python的图像处理的各种常用算法。其中,第2章主要介绍数字图像的获取和基本运算;第3章主要介绍数字图像的几何运算;第4章主要介绍图像空域增强;第5章主要介绍图像空域滤波;第6章主要介绍图像频域滤波;第7章主要介绍图像退化和复原;第8章主要介绍图像数学形态学;第9章主要介绍边缘检测;第10章主要介绍图像分割;第11章主要介绍彩色图像的处理;第12章主要介绍图像特征的提取与描述。第13章给出6个综合应用实例,读者可通过这些实例将本书的知识融会贯通。
本书由葛广英统稿,赵云龙、葛广英共同完成了本书的编写。董苗苗参与了第2章、第11章和13.6节的编写准备工作;刘羿漩参与了第3章、第6章和13.4节的编写准备工作;梁允泉参与了第4章、第7章和13.3节的编写准备工作;齐振岭参与了第5章、第9章和13.5节的编写准备工作。在本书的编写过程中,编者参阅了大量文献资料和网络上的相关资料,在此对这些资源的作者表示衷心感谢;感谢机械工业出版社的各位编辑为本书的顺利出版所做的组织和协调工作。书中所用图像主要来自MATLAB和Python软件提供的图像、免费图片库以及作者自己拍摄的照片。书中给出的所有应用实例程序均已通过调试,读者可从华章网站(www.hzbook.com)下载程序源代码后直接使用。
本书可作为高等院校理工科电子、通信、计算机科学与技术及相关专业本科生的教材,也可供相关专业的研究生以及从事图像处理、深度学习应用与研究工作的科研工作者和工程师学习参考。
由于数字图像处理技术发展迅猛、软件不断更新升级,加之作者水平所限,本书内容中的不足之处和错误在所难免,恳请广大读者批评指正。
编 者
2021年9月
前言
第1章 图像处理环境 1
1.1 图像处理简介 1
1.1.1 图像处理的应用领域 1
1.1.2 图像处理的常用方法 3
1.2 Python数字图像处理库 4
1.3 Python集成环境的安装 5
1.3.1 Anaconda集成环境的下载与安装 6
1.3.2 PyCharm集成环境的下载与安装 10
1.4 习题 14
第2章 数字图像的获取和基本运算 15
2.1 图像的基本类型 15
2.1.1 二值图像 15
2.1.2 灰度图像 16
2.1.3 索引图像 16
2.1.4 彩色图像 16
2.2 单幅图像的获取 17
2.2.1 图像的读取 17
2.2.2 图像的显示 18
2.2.3 图像的保存 18
2.2.4 图像的属性 19
2.3 视频图像的获取 19
2.3.1 视频文件的读写 20
2.3.2 实时视频图像的获取 20
2.4 图像的算术运算 22
2.4.1 加法运算 22
2.4.2 减法运算 25
2.4.3 乘法运算 27
2.4.4 除法运算 28
2.5 图像的逻辑运算 30
2.5.1 按位与运算 30
2.5.2 按位或运算 30
2.5.3 按位非运算 32
2.5.4 按位异或运算 33
2.5.5 综合实例 34
2.6 习题 34
第3章 数字图像的几何运算 36
3.1 图像平移 36
3.1.1 显示窗口改变的图像平移 37
3.1.2 显示窗口不变的图像平移 38
3.1.3 仿射变换的应用实例 38
3.2 图像缩放 39
3.3 图像旋转 41
3.4 图像剪切 43
3.5 图像的镜像变换 46
3.6 图像的透视变换 47
3.7 图像的极坐标变换 47
3.7.1 数据点坐标系间的转换 48
3.7.2 图像数据坐标系间的转换 48
3.7.3 视频图像坐标系间的转换 49
3.8 习题 51
第4章 图像空域增强 52
4.1 灰度线性变换 52
4.1.1 用OpenCV做灰度变换与颜色空间变换 52
4.1.2 增加或降低图像亮度 54
4.1.3 增强或减弱图像对比度 55
4.1.4 图像反色变换 56
4.2 非线性变换 58
4.2.1 对数变换 58
4.2.2 伽马变换 59
4.3 图像噪声 60
4.3.1 通过Numpy数组库添加噪声 61
4.3.2 通过skimage库添加噪声 65
4.4 直方图均衡化 67
4.4.1 使用Matplotlib库绘制图像直方图 67
4.4.2 使用OpenCV中的函数绘制直方图 69
4.4.3 自定义函数实现直方图均衡化 70
4.4.4 使用OpenCV函数实现直方图均衡化 71
4.4.5 自适应直方图均衡化 73
4.5 直方图规定化 74
4.5.1 自定义映像函数实现直方图规定化 74
4.5.2 直方图反向投影 78
4.6 习题 79
第5章 图像空域滤波 81
5.1 空域滤波 81
5.2 图像平滑 82
5.2.1 均值滤波 82
5.2.2 方框滤波 83
5.2.3 高斯滤波 84
5.2.4 中值滤波 86
5.2.5 双边滤波 87
5.3 图像锐化 89
5.3.1 拉普拉斯滤波 89
5.3.2 自定义卷积核滤波 91
5.3.3 非锐化掩模和高频提升滤波 93
5.4 习题 94
第6章 图像频域滤波 95
6.1 傅里叶变换 95
6.1.1 Numpy中的傅里叶变换 95
6.1.2 OpenCV中的傅里叶变换 96
6.2 低通滤波 98
6.2.1 理想低通滤波 98
6.2.2 巴特沃斯低通滤波 100
6.2.3 高斯低通滤波 102
6.3 高通滤波 103
6.3.1 理想高通滤波 104
6.3.2 巴特沃斯高通滤波 105
6.3.3 高斯高通滤波 107
6.4 带通和带阻滤波 109
6.4.1 带通滤波 109
6.4.2 带阻滤波 112
6.5 同态滤波 115
6.6 习题 116
第7章 图像退化和复原 117
7.1 图像退化与复原的机理 117
7.2 图像的运动模糊 118
7.3 图像的逆滤波 120
7.4 图像的维纳滤波 122
7.5 图像质量的评价 125
7.6 习题 133
第8章 图像数学形态学 134
8.1 结构元素 134
8.1.1 使用OpenCV生成结构元素 134
8.1.2 使用Numpy生成结构元素 135
8.2 腐蚀 136
8.2.1 OpenCV中的腐蚀函数 136
8.2.2 skimage中的腐蚀函数 137
8.3 膨胀 138
8.3.1 OpenCV中的膨胀函数 138
8.3.2 skimage中的膨胀函数 139
8.3.3 OpenCV形态学处理原型函数 140
8.4 开运算 141
8.4.1 OpenCV中的开运算 141
8.4.2 skimage中的开运算 142
8.5 闭运算 143
8.5.1 OpenCV中的闭运算 143
8.5.2 skimage中的闭运算 144
8.6 高帽运算 145
8.6.1 OpenCV中的高帽运算 145
8.6.2 skimage中的高帽运算 146
8.7 黑帽运算 146
8.7.1 OpenCV中的黑帽运算 146
8.7.2 skimage中的黑帽运算 147
8.8 形态学梯度 148
8.9 灰度形态学 151
8.9.1 灰度图像的腐蚀运算 151
8.9.2 灰度图像的膨胀运算 151
8.9.3 灰度图像的开运算和闭运算 152
8.10 形态学运算检测图像的边缘和角点 153
8.10.1 检