第一章:绪论
1.什么是数字图像处理
图像是一个二维的亮度函数f(x,y),x,y是空间坐标,幅值f是该点的灰度或亮度。
数字图像是指图像在空间坐标和亮度的数字化,由有限的元素组成,每一个元素都有一个特定的位置和幅值,这些元素称为图像元素。
数字图像处理则是指使用计算机来处理这些数字图像。与ps这种处理不同,ps只是剪辑一个图形,而数字图像处理针对的是数字图像(由像素组成),是一种可以流水线的工作。与计算机视觉紧密相关。
2.数字图像处理的起源:
1.通过电缆来发送一些字符,而后进行一个还原,这种图像比较模糊,编码的灰度级只有5个,1929年,可以编码15个灰度级的图像,细节上更加的清晰,但依旧没有使用到计算机。
2.1964年,利用计算机技术改善空间探测器发回的图像。

3.图像识别的应用:

4.数字图像处理的步骤

1.图像获取:获取到需要处理的图片,包含图像预处理,譬如图像缩放,采样量化
2.图像增强:图像的空间比和频率的增强,图像的灰度变化函数,平滑,滤波,增强创造一些主观上的一些图像处理,使人眼看得更加清楚
3.图像还原:改进图像外观,以图像退化的数学或概率模型为基础,使图像逆恢复到原来的样子, 是一个客观的过程
4.彩色图像处理:彩色是提取图像中感兴趣特征的基础
5.小波:以不同分辨率来描述图像的基础,将图像细分为较小的区域
6.压缩:将图片进行一个压缩,降低计算机的存储压力
7.形态学处理:使用形态学的一些理论对图像进行一些处理
8.分割:将一幅图像分成目标和背景两部分,目标就是我们更加感兴趣的区域
9.表示和描述:用一些算法根据图像的特征对图像进行描述
10.目标识别:用图像特征来做一定的识别和比较
前7个步骤输入的是图像,输出的也是图像,而后面3个步骤,输出的是图像的特征,属性,图像处理过程,要根据实际问题,来选择合适的处理,并不是每次图像处理都需要使用上面所有的步骤。
5.数字图像处理系统的组成

1.首先,通过图像传感器获取到图像
2.通过图像处理硬件对图像进行采样量化,降噪
3.最后传送给计算机,计算机与大容量存储相连,再通过图像显示器来显示出来,硬拷贝指的是打印机,图像处理软件是实现算法的重要工具
第二章:数字图像基础
2.1视觉感知要素
人眼成像:当眼睛聚焦时,眼睛外部的光在视网膜上成像,在视网膜表面的分离光接收器(锥状体、杆状体)提供图案视觉。
1.锥状体:在光线较亮时,工作效果比较好,还有一定的颜色感知能力
2.杆状体:在光线较暗时,工作效果比较好,对颜色识别能力比较差

从2.2图中可以看出在0度的区域(中央凹),锥状体密度远远大于杆状体(视觉效果最好),在盲点区域内,锥状体和杆状体密度为0 ,所以人眼几乎不产生视觉

人的视觉系统能够适应的光强度级别范围是很宽的。从夜视阈值到强闪光约有10^10量级。但人的视觉不能同时在整个范围内工作,不能一会看极亮的东西,一会看极暗的东西,这就是所谓的亮度适应现象。
视觉系统对亮度的感知不是简单的强度函数。例如马赫带现象和同时对比现象。

人眼的感知和实际亮度是有一定差距的,我们会感觉两种不同亮度之间会有一条明显的线,这就是马赫带现象。

中间的框亮度相同,但是在不同亮度背景显示下,左边的框亮度明显更高
人类的感知系统有时会产生视觉错觉。例如2.5图中的第一幅,我们会感觉中间有一个白色的框;第二幅中,会感觉中间有一个白色的圆。但这些都是我们人眼的错觉。

2.2光和光磁波谱
2.3图像感知和获取
图像是由“照射”源和形成图像的“场景”元素对光能的反射或吸收相结合而产生的。这里介绍三种将照射能量变换为数字图像的三种主要传感器配置

带状和阵列图像传感器都是由单个图像传感器组成的,对小图像使用单个图像传感器比较合适,而对大图像使用单个图像传感器则需要多次工作,且不稳定,速度慢。要根据实际情况使用使用的传感器。比如,相机使用的就是阵列传感器,一次就可以采集到一幅图像。
简单的图像形成模型:用二维函数形式f(x, y)表示图像,在特定的坐标(x, y)处,f的值或幅度是一个正的标量,其物理意义由图像源决定。且f(x, y)一定是非零和有限的,即:0 < f(x, y) < ∞
函数f(x, y)可由两个分量来表征:
(1)入射到观察场景的光源总量,即入射分量i(x, y);
(2)场景中物体反射光的总量,即反射分量r(x, y);
f(x, y) = i(x, y) r(x, y),且0 < i(x, y) < ∞, 0 < r(x, y) < 1
注:i(x, y)在物理意义上表示一个圆,r(x, y)在物理意义上也不会出现完全的反射,故限制在0(全吸收)和1(全反射)之间。
2.4图像取样和量化
一幅连续图像的x和y坐标及幅度可能都是连续的。为了把它转换为数字图像,必须在坐标和幅度上都做数字化操作。
数字化坐标值(时间)称为取样
数字化幅度值(空间)称为量化。
取样和量化的结果是一个实际矩阵可以用矩阵形式表示一幅数字图像,也可以用变量和幅值都是整数的二维函数表示,如图2.7

矩阵从0开始,表示n*n的矩阵,行和列都是0到 n-1。
每个元素表示一个像素,行和列都是取整数值。
除此之外,还要考虑灰度级的概念,而灰度级一般用2的整数幂表示。
一个M*N的图像,灰度级为2^k,需要的存储空间为M*N*k
取样值是决定一幅图像空间分辨率的主要参数。空间分辨率是图像中可辨别的最小细节。讨论线对,就是为了说明反映原始场景中细节的能力。
灰度级分辨率是指在灰度级别中可分辨的最小变化。
改变取样数目对图像最直观的影响就是其大小。最初的一幅图是1024*1024,下一幅是512*512,整数倍的一个缩小,只对其偶数行和偶数列取样,奇数行和列则舍弃。

通过复制行或列使抽样后的图像复原到原来的大小。从图2.9中可以看出,分辨率越差的图像还原效果越差,其中第六幅图还原效果最差,细节丢失严重

灰度级变化的影响
在图2.10中保持取样数恒定,而以2的整数次幂把灰度级从256减少至2。

在灰度级为2的图像中,灰度只有取0或1,被称为二式图像。(0为黑,1为白)
头部的轮廓基本可以看出来,但是细节基本不可见
图像内插 (放大、收缩、旋转、几何校正),这是一种基本的图像重取样方法。
放大和收缩数字图像要求执行两步操作:
1.计算新的像素在原图的对应位置
2.为这些对应位置赋灰度值
找到插入点的方法有三种:
最近邻法
双线性插值
更多邻点的内插
2.5像素间一些基本关系
2.5.1 相邻像素
- 对于坐标(x, y)的一个像素p有4个水平和垂直的相邻像素(对x或y进行加减),这个像素集称为p的4邻域。
- 像素p的4个对角邻像素(同时对x,y加减)称为p的D邻域。
- 4邻域和D邻域合成一起称为p的8邻域
2.5.2 邻接性、连通性、区域和边界
令V是用于定义邻接性的灰度值集合。
- 4邻接:若q在p的4邻域中,具有V中数值的两个像素p和q是4邻接的。
- 8邻接:若q在p的8邻域中,具有V中数值的两个像素p和q是8邻接的。
- m邻接:若q在p的4邻域中,或q在p的D邻域中,且p的4邻域和q的4邻域的交集中没有来自V中数值的像素,则具有V中数值的两个像素p和q是m邻接的。
在下图中,设v={1}(灰度值为1的像素点,e.g b,c,d),b, d与p为4邻接,b, c, d, f, h与p为8邻接,b, d, h是p的m邻接(b,d在p的4邻接中,h在p的D领域中,且两者的4邻接域没有交集)。

m邻接是8邻接的改进,为了消除8邻接产生的二义性。如图2.11中,8邻接中p到c有两条路径,但采用m邻接就只有一条p到c的路径(p到b再到c)。
从具有坐标(x,y)的像素p到具有坐标(s,t)的像素q的通路(或曲线)是特定的像素序列,在图2.11中,bcph四点为一条通路,通路长度为3。
连通性:
令S代表一幅图像中像素的子集。如果在S中,p和q之间存在一个全部由S中的像素组成的通路,则可以说两个像素p和q在S中是连通的。对于S中的任何像素p,S中连通到该像素的像素集叫做S的连通分量。如果S仅有一个连通分量,则集合S叫做连通集:
区域和边界:
令R是图像中的像素子集。如果R是连通集:则称R为一个区域。一个区域R的边界(也称为边缘或轮廓)是区域中像素的集合,该区域有个或多个不在R中的邻点。
2.5.3 距离度量
距离度量函数:对于像素点p(x, y), q(s, t), z(v, w)若满足下列条件,则D为距离度量函数。
- D(p, q) ≥ 0(D(p, q) = 0,当且仅当p = q)
- D(p, q) = D(q, p)
- D(p, z) ≤ D(p, q) + D(q, z),(相当于三角形的两边之和大于第三边)
p和q的欧氏距离:(距点(x, y)的距离小于等于某个值r的像素,是中心在(x, y)且半径为r的圆平面。)
p和q的D4距离: (距点(x, y)的街区距离小于等于某个值r的像素,是中心在(x, y)的菱形。)
p和q的D8距离:(距点(x, y)的棋盘距离小于等于某个值r的像素形成中心在(x, y)的方形)
p和q间的距离Dm定义为最短m通路的长度,Dm距离和D4、D8距离不同,它需要考虑连通性的问题。

如图2.12所示,p到q的街区距离(D4)为5,棋盘距离(D8)为3, Dm距离为4
第三章:灰度变换与空间滤波
3.1 背景知识
空间域处理可由下式定义:g(x, y) = T[f(x, y)]。(T是对f的一种操作,定义在(x, y)的邻域,另外T能对输入图像集进行操作)。
邻域通常是中心在(x, y)的矩形,有时也采用其他形状,如圆的数字近似,但矩形邻域是到目前为止最好的邻域,因为它在计算机上实现起来更容易。
T操作最简单的形式是邻域为1×1的尺度(即单个像素),在这种情况下,g仅仅依赖于f在(x, y)点的值,T操作成为灰度级变换函数(也叫作强度映射),形式为:s = T( r)。其中s和r为所定义的变量,分别是g和f在任意点(x, y)的灰度值。
灰度变换是所有图像处理技术中最简单的技术。r和s分别表示处理前后的像素值,这些值与s = T( r)表达式的形式有关。其中T是把像素值r映射到像素值s的一种变换。
3.2 一些基本的灰度变换函数
本小节主要讲4个基本灰度变换函数,如图3.1所示。

3.2.1 图像反转
灰度级范围为[0, L - 1]的图像反转可以由反比变换得到,表达式为:
用这种方式倒转图像的强度产生图像反转的对等图像。这种处理尤其适用于增强嵌入于图像暗色区域的白色或灰色细节,特别是当黑色面积占主导地位时。
3.2.2 对数变换
对数变换的通用形式为:
其中c是一个常数,设r≥0。此种变换使一窄带低灰度输入图像值映射为一宽带输出值。相对的是输入灰度的高调整值。可以利用这种变换来扩展被压缩的高值图像中的暗像素。(使一些不易被观察到的细节显示出来)
3.2.3 幂次变换
幂次变换的基本形式为:
其中c和γ为正常数。γ>1的值和γ<1的值产生的曲线有相反的效果。此种变换使一窄带低灰度输入图像值映射为一宽带输出值。(在γ<1时,暗的地方,把窄的范围拉伸到宽的范围,使一些细节更清晰地表现出来,相比较对数变换,幂次变换更加灵活一些)

3.2.4 分段线性变换函数
- 优点:相比前面所讨论函数的主要在于它的形式可任意合成。
- 缺点:需要更多用户输入。
我们在这主要介绍三种分段线性函数
一、对比拉伸
最简单的分段线性函数之一是对比拉伸变换。低对比度图像可由照明不足、成像传感器动态范围太小,甚至在图像获取过程中透镜光圈设置错误引起。对比拉伸的思想是提高图像理时灰度级的动态范围。
二、灰度切割
在图像中提高特定灰度范围的亮度通常是必要的,也被称为灰度切割。(只改变我们感兴趣的地方)
其一就是在所关心的范围内为所有灰度指定一个较高值,而为其他灰度指定一个较低值。
第二种方法使所需范围的灰度变亮,但是仍保持了图像的背景和灰度色调
三、位图切割
代替提高灰度范围的亮度,而通过对特定位提高亮度,对整幅图像质量仍然是有一定帮助。
3.3 直方图处理
直方图是多种空间域处理技术的基础。
灰度级为[0, L - 1]范围的数字图像的直方图是离散函数h(rk) = nk,这里rk是第k级灰度,nk是图像中灰度级为rk的像素个数。经常以图像中像素的总数(用n表示)来除它的每一个值得到归一化的直方图。因此,一个归一化的直方图由P(rk)=nk/n给出,这里k=0, 1, …, L - 1。 简单的说,P(rk)给出了灰度级为rk发生的概率估计值。
归一化直方图所有分量之和应等于1。
若一幅图像其像素占有全部可能的灰度级范围并且分布均匀,则这样的图像有高对比度和多变的灰度色调。
3.3.1直方图均衡
- 直方图均衡化的目的:寻找变换函数,该函数产生有均匀直方图的输出图像。也就是得到一幅灰度级丰富且动态范围大的图像。
- 该函数仅仅依靠输入图像直方图中的信息就可自动达到这一效果。直方图均衡化的关键:寻找变换函数,该函数产生有均匀直方图的输出图像
考虑连续函数并且让变量r代表待增强图像的灰度级。假设r被归一化到区间[0, L - 1],且r=0表示黑色及r=L - 1表示白色。对于任一满足上述条件的r,我们将注意力集中在变换形式上:
假设变换函数T(r)满足以下条件:
- T( r)在区间0 ≤ r ≤ L - 1中为单值且单调递增
- 当0 ≤ r ≤ L - 1时,0 ≤ T( r) ≤ L - 1
满足这些条件是为了保证原始图像不会变性,保持原始图像灰度级高的地方仍然高,低的仍然低;同时输出图像灰度值的变化范围与原始图像的灰度值变化范围是一样的。
一幅图像的灰度级可视为区间[0, L - 1]内的随机变量。随机变量的基本描绘是其概率密度函数。令Pr( r)和Ps(s)分别表示随机变量r和s的概率密度函数。由基本概率论得到的基本结果是,若Pr( r)和T( r)已知,且在感兴趣的值域上T( r)是连续且可微的,则变换(映射)后的变量s的PDF可由下式得到:
这样,我们看到,输出灰度变量s的 PDF 就由输入灰度的PDF和所用的变换函数决定[回忆可知r和s由T(r)关联起来]。
在图像处理中特别重要的变换函数有如下形式:
为寻找刚才讨论的相应变换的p(S),我们使用式p(S),由基本积分学中的莱布尼茨准则知道,关于上限的定积分的导数是被积函数在该上限的值,即
把 dr/ds的这个结果代人式p(S),并记住概率密度值为正,得到
- 与连续形式不同,一般不能证明离散变换能产生均匀概率密度函数的离散值(均匀直方图)。
- 直方图均衡化具有完全“自动化”的特点
- 计算简单性 也是直方图均衡化的一个优点。
3.2.2直方图匹配 (规定化)
某些图像用均匀直方图的基本增强效果并不理想。有时我们希望处理后的图像具有规定的直方图形状可能更有用。这种用于产生处理后有特殊直方图的方法称为直方图匹配或直方图规定化。
使用下列步骤,可由一幅给定图像得到一幅其灰度级具有指定概率密度函数的图像:
3.2.3 局部直方图处理
有时对整个图像进行均衡化,得到的效果并不理想,这时可以使用小区域细节的局部增强。局部增强的解决方法就是在图像中每一个像素的邻域中,根据灰度级分布(或其他特性)设变换函数。
直方图处理技术很容易适应局部增强,该过程定义一个方形或矩形的邻域并把该区域的中心从一个像素移至另一个像素,在每一个位置的邻域中该点的直方图都要被计算,并且得到的不是直方图均衡化就是规定化的变换函数。这个函数最终被用来映射邻域中心像素的灰度。
3.4 空间滤波
空间滤波是图像处理领域应用广泛的主要工具之一。
空间滤波器组成:(空间滤波器分为线性和非线性 )
- 一个邻域(通常是一个较小的矩形)
- 对该领域所包围图像像素执行的预定义操作
3.4.1 空间滤波机理
使用大小为为m*n的滤波器对大小为M*N的图像进行线性空间滤波,可由下式表示:
其中,x和y可以是图像中任一像素点。 w是滤波器系数,f是相应像素值。

3.4.2 空间相关与卷积
在执行线性空间滤波时,必须清楚地理解两个相近的概念。一个是相关,另一个是卷积。
- 相关是滤波器模板移过图像并计算每个位置乘积之和的处理。
- 卷积的机理相似,但滤波器首先要旋转180°。
卷积求和的公式:
w是滤波器的系数,z是相应的灰度值。
使用空域滤波进行图像处理,被称为空域滤波。模板本身被称为空域滤波器。
3.5 平滑空间滤波器
3.5.1 平滑线性滤波器
平滑滤波器的主要用途:
- 对大图像处理前,删去无用的细小细节
- 连接中断的线段和曲线
- 降低噪音
- 平滑处理,恢复过分锐化的图像
平滑线性空间滤波器的输出(响应)是包含在滤波掩模邻域内像素的简单平均值。因此,这些滤波器也称为均值滤波器。
平滑滤波器用滤波掩模确定的邻域内像素的平均灰度值去代替图像每个像素点的值,这种处理减小了图像灰度的“尖锐”变化。由于典型的随机噪声由灰度级的尖锐变化组成,因此,常见的平滑处理应用就是减噪。
由于图像边缘(几乎总是一幅图像希望有的特性)也是由图像灰度尖锐变化带来的特性,所以均值滤波处理还是存在着不希望的边缘模糊的负面效应。

上图显示了两个3x3的平滑滤波器。第一个滤波器产生掩模下标准的像素平均值,
第二种掩模也叫做加权平均,使用这一术语是指用不同的系数乘以像素,这样,从权值上看,一些像素比另一些更为重要。对于第二种掩模,处于掩模中心位置的像素比其他任何像素的权值都要大,因此,在均值计算中给定的这一像素显得更为重要。而距离掩模中心较远的其他像素就显得不太重要。
3.5.2 统计排序(非线性)滤波器
统计滤波器是一种非线性的空间滤波器,它的响应基于图像滤波器包围的图像区域中像素的排序,然后由统汁排序结果决定的值代替中心像素的值。
统计滤波器中最常见的例子就是中值滤波器
中值滤波器是将像素(在中值计算中包括的原像素值)邻域内灰度的中值代替该像素的值。
中值滤波器的使用非常普遍,这是因为对于一定类型的随机噪声,它提供了一种优秀的去噪能力,比小尺寸的线性平滑滤波器的模糊程度明显要低。
非常适合处理尖锐的亮点和暗点,而且可以很好的保存边缘细节,特别对于椒盐噪声,如下图所示

3.6 锐化空间滤波器
锐化处理的主要目的是突出图像中的细节或者增强被模糊了的细节,这种模糊不是由于错误操作,就是特殊图像获取方法的固有影响。
用途:
- 加强图像中景物的边缘和轮廓
- 超声探测成像,分辨率低,边缘模糊,通常锐化来改善
- 图像识别中分割前的边缘提取
- 锐化处理恢复过渡平滑曝光不足的图像
锐化处理可以用空间微分来完成。总的来说,微分算子的响应强度与图像在该点的突变程度有关。这样一来,图像微分增强了边缘和其他突变(如噪声)并削弱了灰度变化缓慢的区域。
一阶微分的要求:
(1)在平坦段(灰度不变的区域)微分值为零;
(2)在灰度阶梯或斜坡的起始点处微分值非零;
(3)沿着斜坡面微分值非零。
一阶微分:
二阶微分:(与一阶微分不同,其沿着斜坡面微分值为零。)
3.6.1 拉普拉斯算子
最简单的各向同性微分算子是拉普拉斯算子,一个二元图像函数f(x,y)的拉普拉斯变换定义:
因为任意阶微分都是线性操作,所以拉普拉斯变换也是一个线性算子。为了以离散形式描述这一公式,x方向:
y方向:
遵循这三个公式,两个变量的离散拉普拉斯算子是
锐化滤波器模板:(如下图所示)
- 中心系数为正值,外围为负值,
- 系数之和为零
3.7 混合空间增强法
为了实现一个满意的结果,对给定的图像增强目标常常需要应用多种互补的图像增强技术,如下图所示。
四、实验
4.1灰度变换实验
4.1.1 灰度反转
im1 = imread('01.jpg');
subplot(1,3,1),imshow(im1),title('原图像');
im2 = rgb2gray(im1);
subplot(1,3,2),imshow(im2),title('灰度图');
im3= 255-im2;
subplot(1,3,3),imshow(im3),title('灰度反转图');
4.1.2 对数变换
I=imread('01.jpg');
I1=im2double(I);%对数运算涉及小数,需将图片转为double ,相当于图片像素值除以255
subplot(1,2,1),imshow(I1),title('原图像');
L=log(I1*255+1)/log(256)*255;% I1*255得到图像原始的像素值,再进行对数运算 得到增强后的图像像素值
L1=uint8(L);
subplot(1,2,2),imshow(L1),title('对数变换');
4.1.3 幂次变换
I=imread('01.jpg');%读取图像
I1=im2double(I);
subplot(2,3,1),imshow(I1),title('原图像')
I2=1.1*I1.^(0.75);
subplot(2,3,2),imshow(I2),title('系数=1.1 γ=0.75图像')
I3=1.1*I1.^(0.5);
subplot(2,3,3),imshow(I3),title('系数=1.1 γ=0.55图像')
4.2直方图均衡实验
I = imread('01.jpg');
G = rgb2gray(I);
figure, subplot(2,2,1), imshow(G), title('原图')
subplot(2,2,2), imhist(G), title('原图的直方图') % 显示直方图
I_eq = histeq(G, 256);
subplot(2,2,3), imshow(I_eq), title('均衡化的图')
subplot(2,2,4), imhist(I_eq), title('均衡化后的直方图')% 使用histeq进行直方图均衡化
4.3 空间滤波实验
4.3.1 均值滤波
I = imread('01.jpg'); % 读取图像
I = rgb2gray(I); % 转换为灰度图像
% 定义均值滤波器
h = ones(3,3) / 9; % 3x3的均值滤波器
J = imfilter(I, h); % 应用滤波器
% 显示原始图像和滤波后的图像
subplot(1,2,1), imshow(I), title('初始图像');
subplot(1,2,2), imshow(J), title('均值滤波后的图像');
4.3.2 中值滤波
I = rgb2gray(imread('01.jpg')); %medfilt2函数用于二维中值滤波,需先灰度处理
I_1 = imnoise(I,'salt & pepper',0.05); %对图像添加椒盐噪声
J = medfilt2(I_1,[3 3]); %取3×3大小掩模,对噪声图像进行中值滤波
subplot(1,3,1),imshow(I),title('原图像');
subplot(1,3,2),imshow(I_1),title('添加噪声图像');
subplot(1,3,3),imshow(J),title('中值滤波处理后图像');
4.3.3 拉普拉斯锐化
f = rgb2gray(imread('01.jpg'));
subplot(1,2,1),imshow(f),title('原始图像');
w = fspecial('laplacian',0);
g = imfilter(f,w,'replicate');
subplot(1,2,2),imshow(g),title('锐化图像');