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

news2025/1/10 16:35:43

前言

令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是正在被处理区域的标准差和均值。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/552640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【连续介质力学】张量值张量函数

张量值张量函数 张量值张量函数有以下类型:标量,向量和高阶张量 标量值张量函数: Ψ Ψ ( T ) det ⁡ T Ψ Ψ ( T , S ) T : S \Psi \Psi(T) \det T \\ \Psi \Psi(T,S) T:S ΨΨ(T)detTΨΨ(T,S)T:S 其中, T , S T, S …

【JavaEE】MyBatis + 单元测试

目录 MyBaits项目的创建使用 引入相关依赖 配置文件设置 数据库连接 配置XML路径 映射器文件模板 业务代码实例 创建实体类 添加Mapper接口创建映射器 验证是否成功 MyBatis原理 什么是MyBatis 为什么学习MyBatis MyBatis工作原理 单元测试 前置工作 生成测试…

Selenium是什么,带你了解自动化测试的神奇之处

一、使用测试工具 工欲善其事,必先利其器。在开始具体的自动化测试之前,我们需要做好更多的准备,包括以下几个方面: 认识自动化测试 准备自动化测试工具 使用有效的方式 针对具体的测试对象 接下来的第一部分内容,我…

基于Java web的电子商务系统

摘要 【摘要】 所谓电子商务就是在网上开展商务活动,当企业将它的主要业务通过企业内部网(Intranet)、外部网(Extranet)以及Internet与企业的职员、客户供销商以及合作伙伴直接相连时,其中发生的各种活动就…

基于SpringBoot的校园志愿者管理系统的设计与实现

背景 本次设计任务是要设计一个校园志愿者管理系统,通过这个系统能够满足管理员和志愿者的校园志愿者信息管理功能。系统的主要功能包括首页、个人中心、志愿者管理、活动类型管理、活动信息管理、活动报名管理、活动通知管理、活动心得管理、交流反馈、系统管理等…

【LTspice入门】一、LTspice安装

一、LTspice安装 1、仿真的重要性:2、LTspice介绍3、LTspice官网4、LTspice下载与安装 1、仿真的重要性: 掌握好电路仿真有助于加深对电子电路分析理论的理解。 由于电子电路仿真不需要实际的元件和仪器仪表设备,设计者就可以对所涉及的电子电路进行性能…

PCIE总线基本介绍(和PCI总线差异、速率计算、引脚定义)

1、PCI和PCIE的差异 (1)PCIE协议在软件编程上是兼容PCI协议,不同在于PCIE和PCI的控制器; (2)PCIE是差分串行信号线,PCI是电平并行信号线; (3)PCI协议使用INTA#、INTB#、INTC#、INTD#四根中断线来触发终端,PCIE协议没有…

sshd_conf 配置文件详解

/etc/ssh/sshd_config配置文件内容详解。 Port 22 设置SSHD监听端口号。 SSH 预设使用 22 这个port,也可以使用多个port,即重复使用 port 这个设定项!例如想要开放SSHD端口为 22和222,则多加一行内容为: Port 222 即…

kotlin协程async与await

kotlin协程async与await import kotlinx.coroutines.* import kotlin.system.measureTimeMillisfun main() {val time measureTimeMillis {runBlocking {/*** async 是 CoroutineScope 扩展函数,async 和 launch 的区别在于async 可以返回协程结果,而 l…

【002hive基础】hive的库、表与hdfs的组织逻辑

文章目录 一. 数据的组织形式1. hive数据库2. hive表2.1. 内部表和外部表2.2. 分区表与分桶表 3. 视图 二. 底层储存 一. 数据的组织形式 1. hive数据库 hive将不同功能模块的数据,存储在不同的数据库中,在hdfs中以文件夹的形式显示。 2. hive表 2.1.…

Excel统计函数AVEDEV,稳住我们能赢

你的关注,是我最大的动力!你的转发,我的10W!茫茫人海有你的支持,给我无限动力。 1、AVEDEV函数。 (1)说明。 返回一组数据点到其算术平均值的绝对偏差的平均值。 AVEDEV函数是对一组数据中变化…

Linux---phy外设调试

文章目录 一、phy设备概述二、内核驱动配置与设备树添加三、其他补充 一、phy设备概述 我们知道在计算机网络上有一个OSI 7层模型: 应用层:网络服务与最终用户的一个接口。 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP 表…

服务(第二十七篇)squid-传统、穿透、反向代理

squid代理服务器: 主要提供缓存加速、应用层过滤控制的功能。 代理的工作机制: 1、代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。 2、将获得的网页数据(静态 Web 元素)保存到缓存中并发送给客户机&#x…

【Anaconda+Pytorch+DGL】安装+配置详细过程

文章目录 Anaconda安装1、进入[Anaconda官网](https://www.anaconda.com/)下载,下载完成后安装指令默认直到完成安装。2、进入Anaconda Prompt,使用conda指令来为不同的版本创建单独的环境: Pytorch安装1、打开NVIDIA控制面板,帮助…

Python+Yolov5水稻病害侦测识别

程序示例精选 PythonYolov5水稻病害侦测识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonYolov5水稻病害侦测识别>>编写代码&#xff0c;代码整洁&#xff0c;规则&am…

gcc/g++ 、Make/Makefile、CMake/CMakeLists.txt、qmake关系简述

1、gcc与g 首先来了解下编译器的主要工作流程&#xff1a; 源码&#xff08;Source Code&#xff09;>> 预处理器&#xff08;Preprocessor&#xff09;>> 编译器&#xff08;Compiler&#xff09; >> 汇编程序&#xff08;Assembler&#xff09;>> …

深度学习踩坑经验沉淀【持续更新】

背景 在深度学习炼丹过程中&#xff0c;总会遇到各种奇怪问题&#xff0c;这个时候总会在csdn和知乎平台找到答案&#xff0c;那每次遇到的问题是解决了&#xff0c;但没有记录起来&#xff0c;确实太可惜&#xff0c;因为未来某个时间或者某个人会遇到类似问题&#xff0c;所…

HBase应用场景和最佳实践

HBase 作为 Apache 基金会的 Hadoop 项目的一部分&#xff0c;将 HDFS 作为文件存储系统&#xff0c;使用 MapReduce 进行分布式的数据批量处理&#xff08;非实时数据批量处理&#xff09;、利用Zookeeper提供协同管理服务&#xff0c;为 Hadoop 提供海量数据管理服务&#xf…

ROS学习(5)——话题消息与服务

节点之间的消息通信分为几种形式&#xff1a; 话题(topic):单向消息发送/接收方式服务(service):双向消息请求/响应方式动作(action):双向消息目标(goal)/结果(result)/反馈(feedback)方式参数服务器(参数共享模式) 种类区别话题异步单向连续单向的发送/接收数据的情况服务同步…

【重生之我是蜘蛛侠】手把手教你用python爬虫,跟着做就好了

&#x1f4af; 博客内容&#xff1a;【LeetCode训练营】用栈来实现队列用队列来实现栈 详解 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准前端&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &am…