数字图像处理—图像分割算法详解(边缘检测、阈值处理)

前言

令R表示一幅图像占据的整个空间区域。图像分割:把R分为n个子区域R1,R2,…,Rn的过程,满足
在这里插入图片描述

点、线、边缘检测

背景知识

一阶导数的近似要求:
(1)在恒定灰度区域必须为零
(2)在灰度台阶或斜坡开始处必须不为零
(3)在沿灰度斜坡点处也必须不为零
∂ f ∂ x = f ′ ( x ) = f ( x + 1 ) − f ( x ) \frac{ \partial f }{ \partial x }=f'(x)=f(x+1)-f(x) xf=f(x)=f(x+1)f(x)
二阶导数近似要求
(1)在恒定灰度区域必须为零
(2)在灰度台阶或斜坡开始处和结束处必须不为零
(3)沿灰度斜坡必须为零
∂ 2 f ∂ x 2 = f ′ ′ ( x ) = f ( x + 1 ) + f ( x − 1 ) − 2 f ( x ) \frac{ \partial ^2 f }{ \partial x^2 }=f''(x)=f(x+1)+f(x-1)-2f(x) x22f=f′′(x)=f(x+1)+f(x1)2f(x)

在这里插入图片描述
从上图我们可以总结出:
1、一阶导数会产生“粗”边缘,而二阶导数会产生细得多的边缘
2、对于孤立噪声点,二阶导数响应幅度强于一阶导数响应幅度
3、在斜坡和台阶边缘中,进入边缘和离开边缘过渡期时的二阶导数的符号相反
4、一个边缘从亮到暗过度,二阶导数为负
5、一个边缘从暗到亮过度,二阶导数为正
6、二阶导数产生双边效应

而计算每个像素位置的一阶导数和二阶导数的方法是空间卷积。
在这里插入图片描述
如对于一个3×3的卷积核
R = w 1 z 1 + w 2 z 2 + . . . + w 9 z 9 = ∑ i = 1 9 w i z i R=w_1z_1+w_2z_2+...+w_9z_9=\sum\limits_{i=1}^{9}w_iz_i R=w1z1+w2z2+...+w9z9=i=19wizi

点检测

基本原理:若滤波器在这一点的响应的绝对值超过一个规定的阈值,则我们说在核的中心位置(x,y)检测到了一个点。在输出图像中,将这样的点标注为1,其他点标注为0。输出表现如下:
在这里插入图片描述
在这里插入图片描述

线检测

对于线检测,可以预计二阶导数将导致更强的滤波器效应,并产生比一阶导数更细的线。
线检测中,会出现二阶导数的双边效应。

产生双边效应的原因是进入边缘和离开边缘时二阶导数符号相反,进入为负二阶导数,出去为正二阶导数
解决方法:只使用拉普拉斯图像的正值

通常拉普拉斯的检测核是各向同性的,因此其响应与方向无关。但是我们想要检测规定方向的线,则我们可以使用如下检测核
在这里插入图片描述

边缘模型

在这里插入图片描述
在这里插入图片描述
由观察可得出结论:
一阶导数的幅度可用来检测图像中的某个点处是否存在一个边缘
二阶导数符号确定一个边缘像素位于该边缘的暗的一侧还是亮的一侧
二阶导数的零交叉点可用于定位粗边缘的中心

在这里插入图片描述
由观察可得出结论:
导数对噪声敏感
二阶导数对噪声更为敏感

总之,通常用于边缘检测的三个步骤如下:

1、为了降低噪声,对图像进行平滑处理
2、检测边缘点
3、边缘定位

基本边缘检测

若要得到一幅图像的梯度,就要在图像的每个像素位置计算偏导数。使用前向差分得:
g x ( x , y ) = ∂ f ( x , y ) ∂ x = f ( x + 1 , y ) − f ( x , y ) g_x(x,y)=\frac{ \partial f (x,y)}{ \partial x }=f(x+1,y)-f(x,y) gx(x,y)=xf(x,y)=f(x+1,y)f(x,y)
g y ( x , y ) = ∂ f ( x , y ) ∂ y = f ( x , y + 1 ) − f ( x , y ) g_y(x,y)=\frac{ \partial f (x,y)}{ \partial y }=f(x,y+1)-f(x,y) gy(x,y)=yf(x,y)=f(x,y+1)f(x,y)
若要实现上式,可用以下模板实现:
加粗样式
但当我们对对角边缘感兴趣时,我们需要的是一个二维核,即引入罗伯特交叉梯度算子

在这里插入图片描述
2×2大小的核概念上很简单,但在计算边缘时,它们远不如中心对称的核有用。中心对称的最小尺寸为3×3。这些核考虑了中心点对侧数据的性质,并带来了有关边缘方向的更多信息。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
任意一对核与一幅图像卷积都可以得到梯度向量 g x 、 g y g_x、g_y gxgy。求梯度幅度时,由于平方根计算开销大,则常用绝对值来近似梯度幅度。
M ( x , y ) ≈ ∣ g x ∣ + ∣ g y ∣ M(x,y)≈|g_x|+|g_y| M(x,y)gx+gy
这两个公式的细微不同是在中心系数上使用了权值2,可以证明在中心位置使用2可以平滑图像。
Sobel核能够更好地抑制噪声,用途更广。
但是这些核不再是各向同性的,而只为垂直边缘和水平边缘给出各向同性的结果。
在这里插入图片描述
(a)原图
(b)x方向的梯度分量,sobel方法得到
(c) y方向的梯度分量
(d) ∣ g x ∣ + ∣ g y ∣ |g_x|+|g_y| gx+gy

可以看到(d)图中仍然出现了一些我们不想要的细节。

处理这些细节的方法:(1)图像平滑(2)阈值处理(3)平滑和阈值处理

更为先进的边缘检测技术

Marr-Hildreth 边缘检测子

1、它应该是一个能计算图像中每一点处的一阶导数或二阶导数的数字近似的微分算子
2、它应能被“调整”以便在任何期望的尺寸上起作用

满足以上条件的为二维高斯函数
G ( x , y ) = e − x 2 + y 2 2 σ 2 G(x,y)=e^{-\frac{x^2+y^2}{2\sigma ^2}} G(x,y)=e2σ2x2+y2
∇ 2 G ( x , y ) = ( x 2 + y 2 − 2 σ 2 σ 4 e − x 2 + y 2 2 σ 2 ) \nabla ^2G(x,y)=(\frac{x^2+y^2-2\sigma ^2}{\sigma ^4}e^{-\frac{x^2+y^2}{2\sigma ^2}}) 2G(x,y)=(σ4x2+y22σ2e2σ2x2+y2)
这个表达式称为高斯拉普拉斯(LoG)函数
在这里插入图片描述
Marr-Hildreth算法如下:
首先让LoG核与输入图像卷积
g ( x , y ) = [ ∇ 2 G ( x , y ) ] ⋆ f ( x , y ) g(x,y)=[\nabla ^2G(x,y)]\star f(x,y) g(x,y)=[2G(x,y)]f(x,y)
然后寻找g(x,y)的过零点来确定f(x,y)边缘的位置

算法小结:
1、用一个n×n高斯低通滤波核对输入图像进行滤波
2、计算第一步得到图像的拉普拉斯
3、找到步骤2 所得图像的过零点

算法中有两个问题:
1、如何规定高斯核的大小?
到均值的举例大于 3 σ 3\sigma 3σ时,高斯函数的值小到可以忽略,最小整数不小于 6 σ 6\sigma 6σ,使用更大的内核对结果几乎没有影响。
2、如何寻找过零点?
在滤波后的图像g(x,y)的任意像素p处,使用以p为中心的一个3×3邻域。p处的过零点意味着它至少有两个相对相邻像素符号不同
计算过零点是Marr-Hildreth算法的关键特征
在这里插入图片描述
(a)原图
(b)Marr-Hildreth算法步骤1、2得到的结果
©使用零阈值时,图(b)中的过零点
(d)使用阈值大于图(b)中图像极大值的4%,找到的过零点。可以发现不相关的特征被滤除了,并得到了细边缘。

坎尼 边缘检测子

坎尼方法基于如下目标:
1、低错误率
2、边缘点应被很好地定位
3、单个边缘点效应。对于每个真实的边缘点,检测子应只返回一个点

坎尼 边缘检测算法的步骤小结:
o 步骤一:用一个高斯滤波器平滑输入图像
o 步骤二:计算梯度幅值图像和角度图像
o 步骤三:对梯度幅值图像应用非最大抑制
o 步骤四:用双阈值处理和连接分析来检测并连接边缘
o 步骤五:边缘细化算法

下面对于这五个步骤进行解释:
1、令f(x,y)表示输入图像,G(x,y)表示高斯函数
G ( x , y ) = e − x 2 + y 2 2 σ 2 G(x,y)=e^{-\frac{x^2+y^2}{2\sigma ^2}} G(x,y)=e2σ2x2+y2
令G和f的卷积得到平滑后的图像 f s ( x , y ) f_s(x,y) fs(x,y)
f s ( x , y ) = G ( x , y ) ⋆ f ( x , y ) f_s(x,y)=G(x,y)\star f(x,y) fs(x,y)=G(x,y)f(x,y)
2、计算幅度:
M s ( x , y ) = ∣ ∣ ∇ f s ( x , y ) ∣ ∣ = g x 2 ( x , y ) + g y 2 ( x , y ) M_s(x,y)=||\nabla f_s(x,y)||=\sqrt{g_x^2(x,y)+g_y^2(x,y)} Ms(x,y)=∣∣∇fs(x,y)∣∣=gx2(x,y)+gy2(x,y) 计算角度:
α ( x , y ) = a r c t a n [ g y ( x , y ) g x ( x , y ) ] \alpha (x,y)=arctan[\frac{g_y(x,y)}{g_x(x,y)}] α(x,y)=arctan[gx(x,y)gy(x,y)]
梯度图像 ∣ ∣ ∇ f s ( x , y ) ∣ ∣ ||\nabla f_s(x,y)|| ∣∣∇fs(x,y)∣∣通常会在局部极大值附近形成宽脊。如何细化这些宽脊?一种方法是用非极大值抑制

3、非极大值抑制
定义四个基本边缘方向:水平、-45°、垂直、+45°
并将在该方向范围内的边缘定义为这四个基本边缘方向。
在这里插入图片描述
则非极大值抑制方案表述如下:
(1)、寻找最接近 α ( x , y ) \alpha (x,y) α(x,y)的方向 d k d_k dk
(2)、令K表示 ∣ ∣ ∇ f s ∣ ∣ ||\nabla f_s|| ∣∣∇fs∣∣在(x,y)处的值。若K小于 d k d_k dk方向上的点一个或两个邻点处的 ∣ ∣ ∇ f s ∣ ∣ ||\nabla f_s|| ∣∣∇fs∣∣值,则令 g N ( x , y ) = 0 g_N(x,y)=0 gN(x,y)=0,否则,令 g N ( x , y ) = K g_N(x,y)=K gN(x,y)=K
4、最后的运算时对其进行阈值处理,以便减少伪边缘点
在这里插入图片描述

基于阈值的分割方法

全局阈值

在这里插入图片描述

1、选取一个全局阈值 T T T 的初始估计值
2、用 T T T分割图像为两部分: G 1 G1 G1 G 2 G2 G2
3、计算区域 G 1 G1 G1 G 2 G2 G2 中的灰度均值 m 1 m1 m1 m 2 m2 m2
4、计算新的阈值: T = 0.5 ( m 1 + m 2 ) T=0.5(m1+m2) T=0.5(m1+m2)
5、重复步骤 2 − 4 2-4 24,直至 T T T值收敛

在这里插入图片描述

Otsu阈值

这种方法的基本思想是:经过正确阈值处理后的类别相对于它们的像素的灰度值而言应是不同的
根据灰度值给出类间最优分离的阈值将会是更好的阈值。

1、计算图像归一化直方图, p i ( i = 0 , 1 , 2 , … , L − 1 ) p_i (i=0,1,2,…,L-1) pi(i=0,1,2,,L1)
2、计算累积直方图 P 1 ( k ) P_1(k) P1(k),令 P 2 ( K ) = 1 − P 1 ( K ) P_2(K)=1-P_1(K) P2(K)=1P1(K)
3、计算累积灰度均值 m 1 m_1 m1 m 2 m_2 m2
4、计算全局灰度 m G m_G mG
5、计算类间方差 v a r ( k ) var(k) var(k)
6、取使得 v a r ( k ) var(k) var(k)最大的 k k k值,即为Otsu阈值 k ∗ k* k

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
右下角为otsu方法得到的

分块阈值

在这里插入图片描述
在某些情况下,如上图一些明确的阈值可能不存在,则可利用图像分块
图像分块:把一幅图像分成不重叠的矩形:光照和反射的不均匀性
在这里插入图片描述
图像分块应用Otsu方法的例子
在这里插入图片描述

自适应阈值

基于局部图像性质的可变阈值处理

m x y 、 σ x y m_{xy}、\sigma _{xy} mxyσxy是图像中以坐标(x,y)为中心的邻域 S x y S_{xy} Sxy所包含的标准差和均值,则
T x y = a σ x y + b m G T_{xy}=a\sigma _{xy}+bm_G Txy=aσxy+bmG
在这里插入图片描述
Q Q Q是以邻域 S x y S_{xy} Sxy中像素计算的参数为基础的一个属性
在这里插入图片描述
在这里插入图片描述

基于移动平均的可变阈值处理

为减少光照偏差,扫描是以Z字形模式逐行执行的。
优点:计算量少;能较好反应时间序列的趋势及其变化
计算移动平均必须具有n个过去观察值
z k + 1 z_{k+1} zk+1表示步骤k+1扫描序列中遇到的点的灰度
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当感兴趣的物体与图像尺寸相比较小(或较细)时,基于移动平均的阈值处理会工作的很好。打印图像和手写文本图像满足这一条件。

基于区域的分割方法

种子区域生长法

区域生长是根据预先定义的生长准则将像素或子区域组合为更大区域的过程。

基本方法是从一组“种子”点开始,将与种子预先定义的性质相似的那些邻域像素添加到每个种子上来形成这些生长区域(如特定范围的灰度或颜色)

令f(x,y)是一幅输入图像;令S(x,y)是一公种子阵列,阵列中种子点所在位置的值为1,其他位置的值是0;令Q是应用到每个位置(x,y)的一个谓词逻辑。假设阵列f和S的大小相同。基于8连接的一个基本区域生长算法说明如下。

1、在 S ( x , y ) S(x,y) S(x,y)中找到所有连通分量,并把每个连通分量简化为1像素;把所有这些像素标记为1,其他像素标记为0
2、在每个点(x,y)形成一幅图像 f Q f_Q fQ:输入图像满足谓词逻辑是 f Q ( x , y ) = 1 f_ Q(x,y)=1 fQ(x,y)=1;在其他情况下, f Q ( x , y ) = 0 f_Q(x,y)=0 fQ(x,y)=0
3、将 f Q f_Q fQ中8连通到种子点的所有1值点,添加到S中的每个种子点,形成图像g。
4、使用不同的区域标记g中每个连通分量。这就是由区域生长得到的分割后的图像

在这里插入图片描述
(a)原图(b)原图直方图©原始种子图像(d)最终种子图像(e)种子图像和原图的差值(f)图(e)的直方图(g)使用双阈值处理后得到的差值图像(h)使用最小的双阈值得到的差值图像(i)采用区域生长得到的分割结果
在这里插入图片描述

区域分裂合并法

上述讨论的方法为从种子点开始生长区域。另一种方法是,首先将图像细分成一组不相交的区域,然后在满足最初的分割条件下(即本文开头),聚合或分离这些区域。
步骤:

1、把满足 Q ( R i ) = F A L S E Q(R_i)=FALSE Q(Ri=FALSE的任何区域 R i R_i Ri分离成4个不相交的子象限区域。
2、无法进一步分离是,聚合满足谓词逻辑 Q ( R j ∪ R k ) = T R U E Q(R_j\cup R_k)=TRUE Q(RjRk)=TRUE的任意两个邻接区域 R i R_i Ri R k R_k Rk
3、无法进一步聚合时,停止操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如对于天鹅星环图像,可以注意到该区域数据具有随机性,但我们想分割的环状部分其标准差应大于背景和中心区域的标准差,均值应大于暗背景的均值,但小于亮中心区域的均值。于是,可用下列谓词逻辑进行分割,其中 σ \sigma σ和m是正在被处理区域的标准差和均值。
在这里插入图片描述

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Matlab图像处理大作业是一个非常有趣的课程项目,需要对Matlab图像处理进行深入研究和实践。下面是对Matlab图像处理大作业的详细解释: 1. 项目背景 Matlab图像处理大作业是一个学习Matlab图像处理的课程项目。该项目可以帮助学生了解Matlab图像处理的基础知识和实践经验,包括图像预处理、图像增强、图像分割、图像识别等内容。 2. 项目要求 在Matlab中实现以下功能: (1)图像预处理:包括灰度化、二值化、中值滤波等。 (2)图像增强:包括直方图均衡化、拉普拉斯增强、Sobel算子边缘检测等。 (3)图像分割:包括基于阈值的分割、基于区域的分割、基于边缘的分割等。 (4)图像识别:包括基于特征的识别、基于神经网络的识别等。 3. 项目流程 (1)图像预处理:首先将图像转换为灰度图像,然后使用中值滤波进行平滑处理,最后进行二值化处理,得到二值图像。 (2)图像增强:对二值图像进行直方图均衡化,提高图像的对比度。然后使用拉普拉斯增强算法进行图像锐化处理,最后使用Sobel算子进行边缘检测。 (3)图像分割:使用基于阈值的全局分割算法对图像进行分割,得到二值图像。然后使用基于区域的分割算法将图像分成若干个区域,最后使用基于边缘的分割算法对图像进行进一步分割。 (4)图像识别:使用基于特征的识别算法提取图像的特征,然后使用神经网络进行图像识别。 4. 项目实现 (1)图像预处理:使用Matlab自带的imread函数读取图像,然后使用rgb2gray函数将图像转换为灰度图像。接着使用medfilt2函数进行中值滤波平滑处理,最后使用im2bw函数进行二值化处理。 (2)图像增强:使用imhisteq函数进行直方图均衡化处理,使用imfilter函数进行拉普拉斯增强处理,使用edge函数进行Sobel算子边缘检测。 (3)图像分割:使用im2bw函数进行基于阈值的全局分割,使用regionprops函数进行基于区域的分割,使用activecontour函数进行基于边缘的分割。 (4)图像识别:使用Matlab自带的特征提取函数进行特征提取,使用Matlab自带的神经网络工具箱进行神经网络训练和识别。 5. 总结 Matlab图像处理大作业是一个非常有意义的课程项目,可以帮助学生深入了解Matlab图像处理的基础知识和实践经验,提高学生的实践能力和创新能力。在实现该项目的过程中,需要注意算法的正确性和效率,同时要注意代码的规范和注释,以便于代码的维护和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

看星河的兔子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值