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

前言

令R表示一幅图像占据的整个空间区域。图像分割:把R分为n个子区域R1,R2,…,Rn的过程,满足
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第1张图片

点、线、边缘检测

背景知识

一阶导数的近似要求:
(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)

数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第2张图片
从上图我们可以总结出:
1、一阶导数会产生“粗”边缘,而二阶导数会产生细得多的边缘
2、对于孤立噪声点,二阶导数响应幅度强于一阶导数响应幅度
3、在斜坡和台阶边缘中,进入边缘和离开边缘过渡期时的二阶导数的符号相反
4、一个边缘从亮到暗过度,二阶导数为负
5、一个边缘从暗到亮过度,二阶导数为正
6、二阶导数产生双边效应

而计算每个像素位置的一阶导数和二阶导数的方法是空间卷积。
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第3张图片
如对于一个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。输出表现如下:
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第4张图片
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第5张图片

线检测

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

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

通常拉普拉斯的检测核是各向同性的,因此其响应与方向无关。但是我们想要检测规定方向的线,则我们可以使用如下检测核
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第6张图片

边缘模型

数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第7张图片
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第8张图片
由观察可得出结论:
一阶导数的幅度可用来检测图像中的某个点处是否存在一个边缘
二阶导数符号确定一个边缘像素位于该边缘的暗的一侧还是亮的一侧
二阶导数的零交叉点可用于定位粗边缘的中心

数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第9张图片
由观察可得出结论:
导数对噪声敏感
二阶导数对噪声更为敏感

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

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)
若要实现上式,可用以下模板实现:
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第10张图片
但当我们对对角边缘感兴趣时,我们需要的是一个二维核,即引入罗伯特交叉梯度算子

数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第11张图片
2×2大小的核概念上很简单,但在计算边缘时,它们远不如中心对称的核有用。中心对称的最小尺寸为3×3。这些核考虑了中心点对侧数据的性质,并带来了有关边缘方向的更多信息。
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第12张图片
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第13张图片
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第14张图片
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第15张图片
任意一对核与一幅图像卷积都可以得到梯度向量 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)函数
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第16张图片
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算法的关键特征
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第17张图片
(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°
并将在该方向范围内的边缘定义为这四个基本边缘方向。
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第18张图片
则非极大值抑制方案表述如下:
(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、最后的运算时对其进行阈值处理,以便减少伪边缘点
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第19张图片

基于阈值的分割方法

全局阈值

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

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值收敛

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

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

数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第22张图片
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第23张图片
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第24张图片
右下角为otsu方法得到的

分块阈值

数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第25张图片
在某些情况下,如上图一些明确的阈值可能不存在,则可利用图像分块
图像分块:把一幅图像分成不重叠的矩形:光照和反射的不均匀性
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第26张图片
图像分块应用Otsu方法的例子
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第27张图片

自适应阈值

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

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中像素计算的参数为基础的一个属性
在这里插入图片描述
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第28张图片

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

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

基于区域的分割方法

种子区域生长法

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

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

令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中每个连通分量。这就是由区域生长得到的分割后的图像

数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第31张图片
(a)原图(b)原图直方图©原始种子图像(d)最终种子图像(e)种子图像和原图的差值(f)图(e)的直方图(g)使用双阈值处理后得到的差值图像(h)使用最小的双阈值得到的差值图像(i)采用区域生长得到的分割结果
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第32张图片

区域分裂合并法

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

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、无法进一步聚合时,停止操作

数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第33张图片
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第34张图片
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第35张图片
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第36张图片
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第37张图片
如对于天鹅星环图像,可以注意到该区域数据具有随机性,但我们想分割的环状部分其标准差应大于背景和中心区域的标准差,均值应大于暗背景的均值,但小于亮中心区域的均值。于是,可用下列谓词逻辑进行分割,其中 σ \sigma σ和m是正在被处理区域的标准差和均值。
数字图像处理—图像分割算法详解(边缘检测、阈值处理)_第38张图片

你可能感兴趣的:(算法,计算机视觉,深度学习)