数字图像处理 第七章 邻域运算
CH7 邻域运算 一、引言 二、平滑 三、中值滤波 四、边缘检测 五、细化 上机实习
邻域运算与点运算一起构成最基本、最重要的图像处理方法。 1 引言 1)邻域运算 定义 输出图像中每个像素是由对应的输入像素及其一个邻域内的像素共同决定时的图像运算。 通常邻域是远比图像尺寸小的一规则形状。如下面情况中,一个点的邻域定义为以该点为中心的一个圆内部或边界上点的集合。 邻域运算与点运算一起构成最基本、最重要的图像处理方法。
1 引言 点+的邻域
1 引言 举例 另一种表达 $进一步阅读:Gonzalez, p91.
1 引言 2)相关与卷积 信号与系统分析中基本运算相关与卷积,在实际图像处理中都表现为邻域运算。 两个连续函数f(x)和g(x)的相关记作:
1 引言 3)模板(template,filter mask)的相关与卷积运算 给定图像f(x,y)大小N*N,模板T(i,j)大小m*m(m为奇数)。 常用的相关运算定义为:使模板中心T((m-1)/2,(m-1)/2) 与f(x,y)对应。
1 引言 相关运算
1 引言 卷积运算定义为:
1 引言 4)相关与卷积的物理含义 相关运算是将模板当权重矩阵作加权平均; 而卷积先沿纵轴翻转,再沿横轴翻转后再加权平均。 如果模板是对称的,那么相关与卷积运算结果完全相同。 邻域运算实际上就是卷积和相关运算,用信号分析的观点就是滤波。
2 平滑 图像平滑的目的 假设 从信号分析的观点 问题 是消除或尽量减少噪声的影响,改善图像的质量。 在假定加性噪声是随机独立分布的条件下,利用邻域的平均或加权平均可以有效的抑制噪声干扰。 从信号分析的观点 图像平滑本质上低通滤波。将信号的低频部分通过,而阻截高频的噪声信号。 问题 往往图像边缘也处于高频部分。
2 平滑 1)邻域平均(矩形邻域和圆形邻域) 注意:大卷积模板可以加大滤波程度,但也会导致图像细节的损失。
2 平滑 无噪声朱家角风光 有高斯噪声的朱家角风光
2 平滑 通过T3邻域平均后的朱家角风光 通过T5邻域平均后的朱家角风光
2 平滑 2)高斯滤波(Gaussian Filters) 采用高斯函数作为加权函数。 原因一:二维高斯函数具有旋转对称性,保证滤波时各方向平滑程度相同; 原因二:离中心点越远权值越小。确保边缘细节不被模糊。
2 平滑 设计离散高斯滤波器的方法: 设定σ2和n,确定高斯模板权值。如σ2 =2和n=5: [i,j] -2 -1 1 2 0.135 1 2 0.135 0.287 0.105 0.606 0.779 采用高斯滤波的例子
2 平滑 整数化和归一化后得: [i,j] -2 -1 1 2 3 4 6 7
2 平滑 通过T5邻域平均后的朱家角风光 经过高斯滤波后的朱家角风光
3 中值滤波 1)什么是中值滤波 2)中值滤波的要素 3)中值滤波的优点 与加权平均方式的平滑滤波不同,中值滤波用一个含有奇数点的滑动窗口,将邻域中的像素按灰度级排序,取其中间值为输出像素。 2)中值滤波的要素 中值滤波的效果取决于两个要素:邻域的空间范围和中值计算中涉及的像素数。(当空间范围较大时,一般只用某个稀疏矩阵做计算)。 3)中值滤波的优点 中值滤波能够在抑制随机噪声的同时不使边缘模糊。但对于线、尖顶等细节多的图像不宜采用中值滤波。
3 中值滤波 例 有椒盐噪声的朱家角风光 用3*3的滤波窗口对上图做二维中值滤波
4 边缘检测 1)什么是边缘检测 边缘是指图像中灰度发生急剧变化的区域。图像灰度的变化可以用图像的梯度反映。 边缘检测:求连续图像f(x,y)梯度的局部最大值和方向。 $进一步阅读:Gonzalez, p463.
4 边缘检测
4 边缘检测 梯度最大值及其方向
4 边缘检测 最简单的梯度近似计算为:
4 边缘检测 2)梯度算子 在离散情况下常用梯度算子来检测边缘,给定图像f(m,n)在两个正交方向H1和H2上的梯度φ1(m,n)和φ2(m,n)如下: 则边缘的强度和方向由下式给出:
4 边缘检测 3)常用边缘检测算子 Roberts算子: 其卷积模板分别是: Roberts算子特点是边缘定位准,对噪声敏感。
4 边缘检测 Prewitt算子:采用3x3模板。 Prewitt算子:平均、微分对噪声有抑制作用。
4 边缘检测 Sobel算子:与Prewitt算子类似,采用了加权。 Isotropic Sobel算子: Sobel算子在实际中最常用。
4 边缘检测
4 边缘检测 Lenna的Sobel边界
4 边缘检测 Lenna的Prewitt边界
4 边缘检测 Lenna的Roberts边界
4 边缘检测 4)边缘检测算法的基本步骤 (1)滤波。边缘检测主要基于导数计算,但受噪声影响。但滤波器在降低噪声的同时也导致边缘强度的损失。 (2)增强。增强算法将邻域中灰度有显著变化的点突出显示。一般通过计算梯度幅值完成。 (3)检测。但在有些图像中梯度幅值较大的并不是边缘点。最简单的边缘检测是梯度幅值阈值判定。 (4)定位。精确确定边缘的位置。
4 边缘检测
4 边缘检测 5)二阶算子(拉普拉斯算子) 直方图法 梯度阈值法 二阶过零点法
4 边缘检测 一阶导数的局部最大值对应着二阶导数的零交叉点(Zero crossing)。这样通过求图像的二阶导数的零交叉点就能找到精确边缘点。 在二维空间,对应二阶导数算子有拉普拉斯算子。
4 边缘检测 是不依赖边缘方向的二阶微分算子,是一个标量而不是一个向量,具有旋转不变性即各向同性的性质。
注意:与梯度算子的不同, 只需要一个卷积模板 4 边缘检测 用卷积模板表示为: 注意:与梯度算子的不同, 只需要一个卷积模板
4 边缘检测 例:在下列图像中,判断一阶差分梯度算子和Laplacian算子的区别。图中…处表示1,其他为0。 其中一阶差分梯度算子采用
4 边缘检测
4 边缘检测 A图中对孤立的点,输出的是一个扩大略带模糊的点和线。 B图和C图中对线的端点和线,输出的是加粗了的端点和线。 D中对阶跃线,输出的只有一条线。 对梯度运算,梯度算子的灰度保持不变。而对拉氏算子,孤立点增加4倍,端点增加3倍,线增加2倍,界线不变。 拉氏算子在实际应用中对噪声敏感。因此在实际中通常不直接使用。
4 边缘检测 6)过零点检测:Marr算子(LoG算法) (1)基本原理 A) 对有噪声信号,先滤波 B) 再对g(x)求一阶或二阶导数以检测边缘点
4 边缘检测 因此下面两步骤在数学上是等价的: 求图像与滤波器的卷积,再求卷积的拉氏变换。 求滤波器的拉氏变换,再求与图像的卷积。 C) 滤波器h(x)应满足以下条件
4 边缘检测
4 边缘检测 (2)Marr边缘检测算法 step1:平滑滤波器采用高斯滤波器; step2:边缘增强用二阶导数(二维拉普拉斯函数); 因为采用Laplacian算子,故有LoG(Laplacian of Gaussian)滤波器。
4 边缘检测 离散拉普拉斯高斯模板(5*5,delta=2)
Difference of Gaussian 4 边缘检测 (3)为符合人类视觉生理,用DoG逼近 Difference of Gaussian
4 边缘检测 (4)Marr过零点检测的优缺点 过零点(Zero-crossing)的检测所依赖的范围与参数delta有关,但边缘位置与delta的选择无关,若只关心全局性的边缘可以选取比较大的邻域(如delta= 4 时,邻域接近40个像素宽)来获取明显的边缘。 过度平滑形状,例如会丢失角点; 倾向产生环行边缘。 为什么?请思考。
4 边缘检测 Marr边缘Delta=2
4 边缘检测 Marr边缘delta=4
4 边缘检测 7)Canny边缘检测——最优的阶梯型边缘检测算法 (1)基本原理 图像边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘的位置。 根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。 类似与Marr(LoG)边缘检测方法,也属于先平滑后求导数的方法。
4 边缘检测 (2)Canny边缘检测算法 step1:用高斯滤波器平滑图像; step2:用一阶偏导的有限差分来计算梯度的幅值和方向;
4 边缘检测 step2:一阶差分卷积模板:
4 边缘检测 step3:非极大值抑制 仅仅得到全局的梯度并不足以确定边缘,因此为确定边缘,必须保留局部梯度最大的点,而抑制非极大值。(non-maxima suppression,NMS) 解决方法:利用梯度的方向。 1 2 3 8 4 7 6 5
4 边缘检测 四个扇区的标号为0到3,对应3*3邻域的四种可能组合。 在每一点上,邻域的中心像素M与沿着梯度线的两个像素相比。如果M的梯度值不比沿梯度线的两个相邻像素梯度值大,则令M=0。 即:
4 边缘检测 step4:阈值化 减少假边缘段数量的典型方法是对N[i,j]使用一个阈值。将低于阈值的所有值赋零值。但问题是如何选取阈值? 解决方法:双阈值算法。 在T1中收取边缘,将T2中所有间隙连接起来。
4 边缘检测 Canny边缘 Tao=2
4 边缘检测 Canny边缘 Tao=4
4 边缘检测 边缘检测的小结 评价边缘检测器性能的测度 (1)假边缘概率; (2)丢失边缘概率; (3)边缘方向角估计误差; (4)边缘估计值到真边缘的距离平方均值; (5)畸变边缘和其他诸如角点和结点的误差范围。
5 细化 1)什么是细化? 2)一些基本概念 3)细化的要求 4)细化算法
5 细化 1)什么是细化(thinning) 细化是一种二值图像处理运算。可以把二值图像区域缩成线条,以逼近区域的中心线。 细化的目的是减少图像成分,只留下区域最基本的信息,以便进一步分析和处理。 细化一般用于文本分析预处理阶段。
5 细化 插入华的图像
5 细化 2)基本概念 4邻点(4-neighbors):如果两个像素有公共边界,则称它们互为4邻点。 (1)近邻 4邻点(4-neighbors):如果两个像素有公共边界,则称它们互为4邻点。 8邻点(8-neighbors):如果两个像素至少共享一个顶角,则称它们互为8邻点。 (2)连通 一个像素与它的4邻点是4连通(4-connected)关系; 一个像素与它的8邻点是8连通(8-connected)关系;
5 细化 从像素0到像素n的路径是指一个像素序列,0,1,…,k,…,n,其中k与k+1像素互为邻点。 如果邻点关系是4连通的,则是4路径; (3)路径 从像素0到像素n的路径是指一个像素序列,0,1,…,k,…,n,其中k与k+1像素互为邻点。 如果邻点关系是4连通的,则是4路径; 如果邻点关系是8连通的,则是8路径; (4)前景 图像中值为1的全部像素的集合称为前景(foreground),用S来表示。
5 细化
5 细化 (5)连通性 (6)连通成分 (7)简单边界点 已知像素 ,如果存在一条p到q的路径,且路径上全部像素都包含在S中,则称p与q是连通的。 连通性具有:自反性、互换性和传递性。 (6)连通成分 一个像素集合,如果集合中每一个像素与其他像素连通,则称该集合是连通成分(connected component)。 (7)简单边界点 S中的一个边界点P,如果其邻域中只有一个连通成分,则P是简单边界点。
5 细化 判断下图中哪些是简单边界点? A不是 B是 C是 D是 E不是 1 P
5 细化 3)细化要求 (1)连通区域必须细化成连通线结构; (2)细化结果至少是8连通的; (3)保留终止线的位置; (4)细化结果应该近似于中轴线; (5)由细化引起的附加突刺应该是最小的。
5 细化 4)细化算法 在至少3x3邻域内检查图像前景中的每一个像素,迭代削去简单边界点,直至区域被细化成一条线。 算法描述: 对于每一个像素,如果 A) 没有上邻点(下邻点、左邻点、右邻点); B) 不是孤立点或孤立线; C) 去除该像素点不会断开连通区域,则删除该像素点; D) 重复这一步骤直到没有像素点可以去除。 有条件限制
5 细化 每次细化分4步(不去除只有一个邻点),具体过程如下: (1)八连通下北向边界点(n=0, p=1)可删除条件 上式排除下面5种情况: 1 P nw n ne w p e sw s se
(2)八连通下的南向边界点(s=0, p=1)可删除条件: (3)八连通下的西向边界点(w=0, p=1)可删除条件: 5 细化 (2)八连通下的南向边界点(s=0, p=1)可删除条件: (3)八连通下的西向边界点(w=0, p=1)可删除条件: 1 P 1 P
5 细化 (4)八连通下的东向边界点(e=0, p=1)可删除条件: 排除了下面5种情况: 1 P
要点小结 1、邻域运算、相关、卷积、滤波等概念以及相互关系。 2、平滑问题的描述,邻域平均和高斯滤波的解决方法。 3、中值滤波与邻域平均和高斯滤波的区别。 4、什么是边缘检测及基本步骤。 5、常用边缘检测算子和相互间区别。
要点小结 6、边缘检测中的二阶算子(拉普拉斯算子) 7、边缘检测的Marr算子:基本原理、步骤和优缺点 8、边缘检测的Canny算子:基本原理、步骤和主要算法思想 9、细化的概念、原理和算法。
习题 1、一幅8*8的图像f(i,j)其灰度值由下列函数给出,用3*3中值滤波器作用于该图像上,求输出图像。注意保持边界像素灰度不变。 0 30 60 90 120 150 180 210 30 0 30 60 90 120 150 180 60 30 0 30 60 90 120 150 90 60 30 0 30 60 90 120 120 90 60 30 0 30 60 90 150 120 90 60 30 0 30 60 180 150 120 90 60 30 0 30 210 180 150 120 90 60 30 0
习题 0 0 30 60 90 120 150 0 0 30 30 60 90 120 150 150 30 30 30 30 60 90 120 120 60 60 30 30 30 60 90 90 90 90 60 30 30 30 60 60 120 120 90 60 30 30 30 30 150 150 120 90 60 30 30 0 0 150 120 90 60 30 0 0
上机实习题 1、用MATLAB软件产生一个被高斯噪声污染的lenna图像,使用T3、T5、高斯滤波、中值滤波进行处理,并观察处理后图像效果。 2、使用Sobel算子、Prewitt算子和Roberts算子进行lenna图像的边缘检测,对这幅图像加上噪声后重新进行边缘检测。观察各算子的不同,以及边缘是否在正确的位置。 3、在MATLAB中用edit edge命令,阅读edge.m文件的源代码,分析每一条语句的作用,并写出程序流程图。 4、用Matlab实现Marr边缘检测器,并作用于lenna图像和lenna的噪声图像,比较Marr算子与Sobel算子的不同。 5、用绘图软件写一个汉字(注意笔画要粗),然后写一个细化程序细化这个汉字。 6、实习四(必做)。作业截止日期2007年4月10日。