概论

前言

这本书编得很不好,有不少错误之处(一看就是学生搞出来的烂书),但作为速通手册,还是可以阅读一下的。

OpenCV 模块——官网

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。

OpenCV 由一系列 C 函数和少量 C++ 类构成,同时提供了 Python、Java、MATLAB 等语言的接口。

OpenCV 提供了大量的计算机视觉算法和图像处理工具,广泛应用于图像和视频的处理、分析以及机器学习领域。

OpenCV 的设计目标是提供一套简单易用的计算机视觉基础库,帮助开发人员快速构建复杂的视觉应用。

OpenCV 教程

书籍简介

作者:杨淑莹

其他责任人:杨淑莹

出版日期:2024-08-01

出版社:电子工业出版社

页数:311

内容简介

本书介绍了数字图像处理技术和深度学习技术,以及这些技术的应用,全书由12章组成。前九章主要介绍数字图像处理技术,内容包括:Python 环境搭建、位图基础、图像的显示、图像的几何变换、图像灰度变换、图像的平滑处理、图像锐化处理、图像分割及测量、图像的形态学处理,后三章主要介绍深度学习技术,将数字图像处理技术和深度学习技术相结合应用于项目开发,内容包括基于卷积神经网络CNN 模型的汉字识别、基于Faster RCNN 模型的手势识别、基于卷积神经网络CNN 模型的语音识别共三个项目的开发技术。本书仅仅介绍基本的理论知识,同时介绍将理论转化为代码的实现步骤和基于Python 开发工具的编程代码,并且可以将处理前与处理后的图像进行对照比较。实例程序的框架结构简单,代码简洁,使初学Python 者很快就掌握图像处理与图像识别技术。

作者简介

正文摘录

前 言

第1章 图像处理编程基础

1.1 Python开发基础

1.1.1 Python的安装

1.1.2 PyCharm的安装

1.1.3 OpenCV及常用库的配置

1.2 数字图像处理与深度学习技术简介

1.3 系统界面开发基础

1.4 图像显示

1.4.1 待处理图像的显示

1.4.2 处理后图像的显示

第2章 彩色图像特效处理

2.1 图像的颜色表示

2.1.1 像素的颜色

2.1.2 图像的存储结构

栅格存储

位图格式文件扩展名为bmp

分类:

  1. 单色图像
  2. 8位灰度图像
  3. 8位伪彩色图像
  4. 24位真彩色图像

2.1.3 图像的精度

  1. 空间分辨率

空间分辨率指图像数字化的空间精细程度,是数字图像中划分图像的像素密度,即单位长度内的像素数,其单位是DPI(Dots Per Inch)。

  1. 灰度级分辨率

灰度级分辨率表示每一像素的颜色值所占的二进制位数,也叫颜色深度。

2.2 彩色图像的灰度化处理

灰度化处理是使RGB模型中R、G和B分量值相等。常用的转换方式为

$$Gray(i, j) = 0.11 \times R(i,j) + 0.59\times G(i,j)+0.3\times B(i,j)$$

灰度化处理还有其他的方法,比如取三个分量的最大值、最小值、算术平均值等,目的都是使R、G和B分量值相等。

灰度图像只能表示256种颜色,且灰度图像中只有灰度而没有色彩。

2.3 彩色图像的着色处理

先灰度化处理,再修改对应的RGB通道值。

2.4 彩色图像的亮度调整

亮度的调整是指人眼亮度感觉的调整,可以通过对RGB颜色增加或减少相同的增量来显示。

2.5 彩色图像的对比度调整

增加对比度的意思就是把感兴趣的颜色范围拉开,使得该范围内的像素,其颜色亮的越亮,暗的越暗,从而达到了增强对比度的目的。对比度实际就是颜色分量值之间的差值。调整对比度实际就是对每一颜色分量值的最大值和最小值进行处理。

增强因子

阈值法

2.6 彩色图像的曝光处理

图像曝光或多或少地损失了在原图像中可以看到的那些明快的颜色和色调。曝光处理的效果是基于照片技术的。曝光图像的算法原理是逆转数值小于128的RGB三分量。比如:

$$g(i,j)=255-f(i,j), if f(i,j)<128$$

2.7 彩色图像的马赛克处理

马赛克效果原理是将图像从形式上划分为很多小块,在每块内的各个像素都取到相同的RGB分量值,从而对某些细节进行模糊化处理,使图像粗糙化。

2.8 彩色图像的梯度锐化处理

锐化是为了突出图像的变化部分,使模糊的图像变得更加清晰。

梯度锐化算法原理是将要处理的图像像素与它左对角线上的像素之间的差值乘以一个锐化度数,然后加上原先的像素值,即$new f(i,j) = \frac{1}{4} \times abs(f(i,j), f(i-1,j-1)) + f(i,j)$

2.9 彩色图像的浮雕处理

浮雕效果就是只突出图像的变化部分,而相同颜色部分则被淡化,使图像出现纵深感,从而达到浮雕效果。

浮雕效果针对灰度图像处理,就是只将图像的变化部分突出出来,而相同灰度部分则被淡化,使图像出现纵深感,从而达到浮雕效果。将要处理的像素取值为与处于前一个相邻像素间的差值,这样灰度平淡区因差值几乎为零则变成黑色,可以通过加上一个常量来增加一些亮度。

常用方式:$G(i,j) = f(i,j) - f(i-1,j)+constant(128)$

其中,G(i,j)为处理后图像的像素值,f(i,j)为原图像的像素值,f(i-1,j)为前一个相邻像素的值,常量通常取值为128。

2.10 彩色图像的霓虹处理

霓虹效果用来描绘图像的轮廓,勾画颜色变化的边缘,产生轮廓发光的效果。先计算原图像当前像素f(i,j)的红、绿、蓝分量与其相同行f(i+1,j)及相同列f(i,j+1)相邻像素的梯度,即差的平方和的平方根,然后将梯度值作为处理后像素g(i,j)的红、绿、蓝的3个分量。

上式中r1,g1,b1分别为原图像像素f(i,j)的红、绿、蓝分量值,r2,g2,b2分别为原图像同行相邻像素f(i+1,j)的红、绿、蓝分量值,r3,g3,b3分别为原图像同列相邻像素f(i,j+1)的红、绿、蓝分量值,Red,Green,Blue为图像处理后的像素f(i,j)的红、绿、蓝分量值。

数字图像处理风格化效果——霓虹效果

附录——挤压效果

挤压效果是将图像向内挤压,产生收缩变形。

挤压效果的实现可以看成是数学极坐标的一种体现,将当前像素点、图像正中心点和过中心点的水平线这三要素画出一个极坐标,然后根据用户指定的挤压度,在当前点与中心点所连的直线上映射出一个像素点,最后将这个像素点作为目标点输出。

第3章 图像的合成处理

图像的合成是指多幅图像之间进行的相互运算。多幅同样大小的图像可以进行代数运算和逻辑运算。

3.1 图像的代数运算

图像相加的一个重要应用就是对同一场景的多幅图像求平均值,它可以有效地降低随机噪声的影响。

图像相减可用于去除一幅图像中不需要的图案,也可以用于检测同一场景的两幅图像之间的变换,例如检测物体运动。

图像相乘可以遮住图像中的某些部分,仅留下感兴趣的物体。

图像相除可产生对颜色和多光谱图像分析十分重要的比率图像。

3.1.1 图像加运算

3.1.2 图像减运算

3.2 图像的逻辑运算

以下是一些常见的按位逻辑运算的应用场景:

  • 图像融合,实现图像的混合、叠加、过渡和融合效果。
  • 图像分割和掩膜(二进制图像):可以通过位与运算提取图像中感兴趣的区域,或者通过位或运算将不同的图像部分进行组合。
  • 图像修复和去除
  • 图像处理和特征提取:可用于分析和检测图像之间的差异
  • 图像二值化和阈值操作:分割图像、提取感兴趣的目标

3.2.1 位与运算

3.2.2 位或运算

3.2.3 位非运算

3.2.4 位异或运算

第4章 图像的几何变换

4.1 概述

简单讲,几何变换就是建立变化前后像素之间的映射关系。

几何变换可以实现图像各像素点以坐标原点为中心的平移、缩放、镜像、旋转等各种变化。一般来说,变换后的点集=变化矩阵T✖变换前的点集矩阵。

复合变换(级联变换):基本变换按顺序进行

常用的图形变换模型有如下三种形式:

  • 刚体变换:任意两像素点之间距离不变,仅局限在平移、旋转和反转(镜像)
  • 仿射变换:直线保持平行关系,适用于平移、旋转、缩放和反转(镜像)等情况
  • 投影变换:直线仍是直线,但基本不再保持平行关系

4.2 图像平移

4.3 图像镜像

4.4 图像缩放

4.5 图像转置

4.6 投影变换

4.7 图像旋转

小结

本章主要解决输入图像位置的标准化及大小的正规化,从而方便进行图像几何校正。

图像的几何校正主要包括如下两步:

(1)空间坐标变换。重新排列图像平面上的像素以恢复原有的空间关系。

(2)灰度值的确定。对空间变换后的像素赋予相应的灰度值,使之恢复原位置的灰度值,称为灰度插值。

第5章 图像的灰度变换

5.1 概述

灰度变化目的是改善画质,使图像的显示效果更加清晰。灰度变化可以增大图像的动态范围,扩展图像的对比度,使图像特征变得明显。灰度变化有时又被称为图像的对比度增强或对比度拉伸。

图像对比度增强的方法可以分为两类:

(1)直接对比度增强方法

灰度变化函数

(2)间接对比度增强方法

直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法。

5.2 二值化和阈值处理

5.3 灰度线性变换与分段线性变换

5.3.1 灰度线性变换

5.3.2 分段线性变换

5.4 灰度非线性变换

5.4.1 灰度对数变换

5.4.2 灰度指数变换

5.4.3 灰度幂次变换

5.5 灰度直方图

5.5.1 灰度直方图的概念

5.5.2 直方图正规化

5.5.3 直方图均衡化

5.5.4 自适应直方图均衡化

第6章 图像平滑处理

6.1 概述

图像平滑滤波的目的是消除噪声,保留有用信号,降低干扰,改善图像质量。同时,在提取较大目标前,去除太小的细节,或将目标内的小间断连接起来,平滑滤波也起到模糊作用。平滑滤波使图像的低频分量增强,同时削弱高频分量,用于消除图像中的随机噪声,起到平滑作用。

对图像像素的处理方式可以划分为点处理和区域处理。

图像平滑常用的方法是采用区域处理,利用相邻的像素值进行均值滤波或中值滤波。

6.2 噪声消除法

6.2.1 二值图像的黑白点噪声滤波

6.2.2 消除孤立黑像素点

6.3 邻域平均法

邻域平均法是一种利用模板对图像进行模板操作(卷积运算)的方法。

均值滤波器对高斯噪声的滤波效果较好,对椒盐噪声的滤波效果不好。原因:

  • 高斯噪声均值为0
  • 椒盐噪声随机分布在不同的位置上,图像中有干净点也有污染点,噪声的均值不为0

邻域平均法通过一点和邻域内像素点求平均值来去除突变的像素点,优点是算法简单,计算速度快,代价是会造成图像一定程度上的模糊。

6.3.1 3 ×3均值滤波

6.3.2 N×N均值滤波

6.3.3 超限邻域平均法

6.3.4 方框滤波

6.4 高斯滤波

高斯滤波中卷积核中的值按照距离中心点的远近分别赋予不同的权重值。

6.5 中值滤波

邻域平均法属于低通滤波的处理方法。它在抑制噪声的同时使图像变得模糊,即图像的细节(例如边缘信息)被削弱,因而造成视觉上的失真。如果目的只是把干扰去除,而不是刻意让图像模糊,那么中值滤波能够抑制噪声又可以保持细节,是比较好的选择。

6.5.1 N×N中值滤波

6.5.2 十字形中值滤波

6.5.3 N×N最大值滤波

6.6 双边滤波

双边滤波可以有效保护图像的边缘信息。

6.7 2D卷积核的实现

自定义卷积核实现图像的平滑处理。可以使用cv2.filter2D()

6.8 加噪声处理

6.8.1 随机噪声

6.8.2 椒盐噪声

第7章 图像边缘锐化处理

在图像处理中,平滑处理(也称为模糊处理)是一种常见的操作,用于减少图像中的噪声或细节。

OpenCV 提供了多种平滑处理的方法,本文将详细讲解四种常用的平滑处理技术:均值滤波、高斯滤波、中值滤波和双边滤波。

7.1 概述

从本质上说,图像边缘是图像局部特性不连续性(灰度突变、颜色突变等)的反映,它标志着一个区域的终结和另一个区域的开始。边缘提取首先检出图像局部特性的不连续性,然后再将这些不连续的边缘像素连成完整的边界。边缘的特性是沿边缘走向的像素变化平缓,而垂直于边缘方向的像素变化剧烈。

图像平滑往往使图像中的边界、轮廓变得模糊,而且单纯的微分运算会使低频成分损失很多,为了减少这类不利效果的影响,不丢失低频信息,提升边缘强度,这就需要利用图像边缘锐化技术,使边缘变得清晰。图像锐化处理也被称为高频提升滤波器。利用边缘检测方法求出边缘后,对边缘求梯度,将原图像和梯度图像叠加在一起,内容完整保留,而突出高频成分,同时,具有边缘锐化处理的效果。

7.2 图像微分边缘检测

7.2.1 纵向微分边缘检测

7.2.2 横向微分边缘检测

7.2.3 双向一次微分边缘检测

7.3 常用的边缘检测算子及方法

7.3.1 Roberts边缘检测算子

7.3.2 Sobel边缘检测算子

7.3.3 Prewitt边缘检测算子

7.3.4 Scharr边缘检测算子

7.3.5 Krisch自适应边缘检测

7.3.6 Laplacian算子

7.3.7 LoG算子

7.3.8 Canny边缘检测

7.4 梯度锐化

7.4.1 提升边缘

7.4.2 根据梯度二值化图像

第8章 图像形态学处理

8.1 概述

目标和结构元素(刷子)是形态学的基本术语。

形态学图像处理通常表现为一种邻域运算形式,在每个像素位置上邻域结构元素与二值图像对应的区域进行特定的逻辑运算,逻辑运算的结果为输出图像的相应元素。

数学形态学最常见的基本运算有七种,分别为腐蚀、膨胀、开运算、闭运算、细化、黑帽和礼帽运算。用这些运算及其组合可以进行图像形状和结构的分析与处理,包括图像分割、特征抽取、边缘检测、图像滤波、图像增强和恢复等方面的工作。

图像形态学操作是图像处理中的一种重要技术,主要用于处理二值图像(即黑白图像)。

OpenCV 中的图像形态学操作是图像处理中的重要工具,通过腐蚀、膨胀、开运算、闭运算和形态学梯度等操作,可以实现对图像的噪声去除、对象分离、边缘检测等效果。掌握这些操作有助于更好地处理和分析图像数据。

以下是 OpenCV 中常用的形态学操作及其函数:

操作函数说明应用场景
腐蚀cv2.erode()用结构元素扫描图像,如果结构元素覆盖的区域全是前景,则保留中心像素。去除噪声、分离物体。
膨胀cv2.dilate()用结构元素扫描图像,如果结构元素覆盖的区域存在前景,则保留中心像素。连接断裂的物体、填充空洞。
开运算cv2.morphologyEx()先腐蚀后膨胀。去除小物体、平滑物体边界。
闭运算cv2.morphologyEx()先膨胀后腐蚀。填充小孔洞、连接邻近物体。
形态学梯度cv2.morphologyEx()膨胀图减去腐蚀图。提取物体边缘。
顶帽运算cv2.morphologyEx()原图减去开运算结果。提取比背景亮的细小物体。
黑帽运算cv2.morphologyEx()闭运算结果减去原图。提取比背景暗的细小物体。

8.2 图像腐蚀

作用:消除物体边界点,使边界向内收缩,可以去除小于结构元素的物体。

8.2.1 水平腐蚀

8.2.2 垂直腐蚀

8.2.3 全方向腐蚀

8.3 图像膨胀

作用:对二值化物体的边界点进行扩充,将与物体边界点接触的所有背景点合并到该物体中,从而使边界向外部扩张。

8.3.1 水平膨胀

8.3.2 垂直膨胀

8.3.3 全方向膨胀

8.4 图像开运算与闭运算

8.4.1 图像开运算

开运算:先腐蚀再膨胀

腐蚀和膨胀不是一对互逆的操作。

作用:去除孤立的小点等,平滑处理较大物体的边界,同时并不明显改变其面积

8.4.2 图像闭运算

闭运算:先膨胀后腐蚀

功能:填充物体内细小空洞,连接邻近物体,平滑其边界,同时并不明显改变其面积

8.5 形态学梯度运算

形态学梯度运算是利用图像的碰撞图像减去腐蚀图像的一种形态学操作,这种操作可以获得图像的边缘信息。

8.6 黑帽与礼帽运算

黑帽运算:原始图像减去闭运算的结果

作用:获得比原始图像边缘更加黑暗的边缘部分,或者获得图像内部的小孔

礼帽运算:原始图像减去开运算的结果

作用:获得图像的噪声信息或者比原始图像边缘更亮的边缘部分

8.7 图像细化

图像细化其实就是求图像骨架。图像骨架是二维二值目标的重要拓扑描述,指图像中央的骨骼部分,是描述图像几何及拓扑性质的重要特征之一。

细化的目的就是在将图像的骨架提取出来并保持图像细小部分的连通性。对图像进行细化处理有助于突出形状特点和减少冗余信息。

第9章 图像分割与测量

9.1 概述

图像分割与测量是图像识别工作的基础,分割的目的是将图像分为一些有意义的区域,如目标区域或前景区域,然后可以对这些区域进行描述,相当于提取出某些目标区域图像的特征。

图像分割的基础是像素间的相似性和跳变性。

图像分割依据工作对象可以分为点相关分割和区域相关分割。

本章介绍图像分割的基本方法、轮廓提取方法、目标区域的标识、面积测量和周长测量。

9.2 阈值法分割

9.2.1 直方图门限选择法

9.2.2 半阈值选择法

9.2.3 迭代阈值法

9.2.4 Otsu阈值法

9.2.5 自适应阈值法

9.2.6 分水岭算法

模拟水流通过地形起伏的现象

9.3 投影法分割

9.3.1 水平投影分割

9.3.2 垂直投影分割

9.4 轮廓检测

9.4.1 邻域判断法

内部像素点可以删除

9.4.2 边界跟踪法

9.4.3 区域生长法

将具有相似性质的像素集合起来构成区域

9.4.4 轮廓检测与拟合

9.5 目标物体测量

9.5.1 区域标记

9.5.2 面积测量

9.5.3 周长测量

9.6 最小外包形状检测

9.6.1 最小外包矩形

9.6.2 最小外包圆形

9.6.3 最小外包三角形

9.6.4 最小外包椭圆形

9.7 霍夫检测

霍夫变换是一种特征提取(feature extraction),被广泛应用在图像分析(image analysis)、计算机视觉(computer vision)以及数位影像处理(digital image processing)。霍夫变换是用来辨别找出物件中的特征,例如:线条。他的算法流程大致如下,给定一个物件、要辨别的形状的种类,算法会在参数空间(parameter space)中执行投票来决定物体的形状,而这是由累加空间(accumulator space)里的局部最大值(local maximum)来决定。

现在广泛使用的霍夫变换是由Richard Duda和Peter Hart在1972年发明,并称之为广义霍夫变换(generalized Hough transform),广义霍夫变换和更早前1962年的Paul Hough的专利有关。经典的霍夫变换是侦测图片中的直线,之后,霍夫变换不仅能识别直线,也能够识别任何形状,常见的有圆形、椭圆形。1981年,因为Dana H. Ballard的一篇期刊论文"Generalizing the Hough transform to detect arbitrary shapes",让霍夫变换开始流行于计算机视觉界。

9.7.1 霍夫直线检测

9.7.2 霍夫圆检测

第10章 图像频域变换处理

10.1 图像频域变换

图像频域变换是指图像从空域转换到频域的数学变换。常用的频域变换是傅里叶变换和离散余弦变换。

频率的大小反映了信号变化的快慢。

在图像处理中,图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度,也就是图像灰度的变化速度。对图像而言,图像的边缘部分是突变部分,变化较快,因此反映在频域上是高频分量,图像的噪声在大部分情况下也是高频分量;图像平缓变化部分则为低频分量。高频分量解释信号的突变部分,而低频分量决定信号的“整体形象”。

10.1.1 图像傅里叶变换

10.1.2 图像快速傅里叶变换

10.1.3 图像离散余弦变换

10.1.4 图像频域变换原理

傅里叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数。

10.2 频域低通滤波

10.2.1 理想低通滤波

10.2.2 梯形低通滤波

10.2.3 巴特沃思低通滤波

10.2.4 指数低通滤波

10.3 频域高通滤波

10.3.1 理想高通滤波

10.3.2 梯形高通滤波

10.3.3 巴特沃思高通滤波

10.3.4 指数高通滤波

第11章 基于深度学习CNN模型的汉字识别

11.1 深度学习技术概述

11.2 CNN基本概念

滤波器是用于在卷积操作中提取特征的小矩阵(卷积核)。

11.3 汉字识别系统设计

11.4 汉字图像预处理

预处理的步骤:

  1. 获取需要获取的图像
  2. 进行灰度化、二值化处理
  3. 进行腐蚀、膨胀处理。腐蚀在数学形态学中的作用是消除噪声,是使边界向内部收缩的过程,可以把小于结构元素的物体去除。膨胀在数学形态中的作用与腐蚀的作用相反,它是对二值化边界点进行扩充,使边界向外部扩张的过程,使得断裂的笔画连接起来。
  4. 进行投影和分割。
  5. 保持分割后的图像。

11.5 投影与分割

11.6 构建汉字识别模型

11.6.1 构建CNN模型

11.6.2 识别模型训练

11.7 汉字识别模型检验

第12章 基于深度学习CNN模型的语音识别

语音识别模型训练采用的经典方法为提取语音信号的MFCC(梅尔倒谱系数)特征,使用HMM对MFCC特征进行训练。

本模板采用的是语音信号的MFCC特征和CNN来进行模型训练。

12.1 语音识别系统设计

12.2 语音信号预处理及特征提取

12.2.1 语音信号预处理

实现步骤:

  1. 获取语音信号
  2. 语音信号预加重
  3. 语音信号分帧
  4. 语音信号加窗
  5. 语音信号快速傅里叶变换

12.2.2 MFCC特征提取

提取步骤:

  1. 获取语音信号
  2. 语音信号预加重
  3. 语音信号分帧
  4. 语音信号加窗
  5. 语音信号快速傅里叶变换
  6. 语音信号的频谱数据通过三角带通滤波器
  7. 三角带通滤波器输出结果对数运算
  8. 对对数运算结果进行离散余弦变换,得到MFCC特征矩阵
  9. 根据MFCC特征矩阵值把特征矩阵转换为图像

12.3 构建语音识别模型

12.3.1 构建CNN模型

12.3.2 识别模型训练

12.4 语音识别模型检验

语音识别步骤:

  1. 获取待识别语音
  2. 语音信号预处理及MFCC特征提取
  3. 将MFCC特征矩阵转换为图像
  4. 将语音信号输入已经训练好的卷积神经网络中
  5. 将识别结果(拼音)转为漢字结果

第13章 基于深度学习Faster R-CNN模型的手势识别

13.1 R-CNN目标检测与识别模型

13.2 边框回归原理

多元线性回归方程

13.3 Faster R-CNN目标检测与识别模型

13.3.1 Faster R-CNN模型框架

13.3.2 基于区域提议网络的目标检测

13.3.3 基于RoI池化和分类技术的目标识别

13.4 手势识别系统设计

13.5 构建手势识别模型

13.5.1 构建Faster R-CNN模型

  1. 搭建提取主干特征的卷积神经网络
  2. 搭建检测目标的RPN网络
  3. 搭建RoI池化层

13.5.2 Faster R-CNN识别模型训练

  1. 主干特征提取
  2. 锚框贴标签
  3. 计算损失函数
  4. RPN生成RoI

13.6 手势识别模型检验