(学习笔记,不属个人作品)

图像分割

基础

概念:

  • 是将图像划分为若干有意义的区域,或者从图像中提取感兴趣的目标的 图像处理技术。

图像分割基本策略

  • 依据:图像中各个组成区域具有不同的特征,这些特征可以是灰度、颜色、纹理等,这些特征在同
    一区域内表现出一致性或相似性,而在不同区域之间表现出显著区别。

  • 灰度图像分割的依据一般是像素灰度值的两个特性:灰度相似性和灰度不连续性。同一区域内部的像素一般具有灰度相似性,而在不同区域之间的边界上一般具有灰度不连续性。

    • 不连续性——不连续性是基于特性(如灰度)的不连续变化分割图像,如边缘检测;
    • 相似性——根据制定的准则将图像分割为相似的区域,如阈值处理、区域生长。

分类

  • 基于边界的图形分割(非连续性分割)
  • 基于阈值的图像分割(相似性分割)
  • 基于区域的图像分割(相似性分割)

基于边界的分割

  • 边缘定义:
    • 边界存在于目标与背景、不同目标之间,是图像分割所依据的重要特征。
    • 基于边缘检测的图像分割首先确定图像中的边缘像素,然后将它们连接在一起构成边界
    • 边缘是图像中灰度发生突变或不连续的微小区域(一组相连的像素集合),即是两个具有相对不同灰度值特性的区域的分界线。
    • 边缘有方向和幅度两个特性。沿边缘方向的灰度变化较为平缓,而垂直于边缘方向的灰度变化剧烈。

边缘剖面图

明确定义边缘,边缘点是信号变化剧烈的地方。

边缘检测(差分)

  • 边缘是灰度值不连续的产物,可以利用差分来检测这种不连续性。
    • 一阶差分算子通过寻找图像一阶差分中的最大值来检测边缘,将边缘定位在一阶差分最大的方向;
    • 二阶差分算子通过寻找图像二阶差分过零点来定位边缘,最常用的是拉普拉斯过零点。

差分监测边缘

噪声对差分检测影响

  • 噪声对于边缘灰度变化的整体趋势几乎是可忽略的,较大噪声的边缘呈现出轻微的波动。
  • 一阶差分和二阶差分表现出对噪声的敏感性,在利用差分进行边缘检测时,应慎重考虑噪声的影响。

有噪声边缘的差分检测

常用差分检测边缘算子(*)

常用的一阶差分算子有Roberts、Prewitt和Sobel算子,用于近似计算偏导数。二阶差分算子有拉普拉斯、高斯拉普拉斯(LoG)算子、高斯差分(Dog)、Canny算子。

一阶差分算子

数字图像处理复习(二)

二阶差分算子

高斯拉普拉斯(LoG)算子:

2Gσ(x,y)=22xGσ(x,y)+22yGσ(x,y)=x2+y22σ2σ4exp(x2+y22σ2)\nabla^{2} G_{\sigma}(x, y)=\frac{\partial^{2}}{\partial^{2} x} G_{\sigma}(x, y)+\frac{\partial^{2}}{\partial^{2} y} G_{\sigma}(x, y)=\frac{x^{2}+y^{2}-2 \sigma^{2}}{\sigma^{4}} \exp \left(-\frac{x^{2}+y^{2}}{2 \sigma^{2}}\right)

式中, σ\sigma为标准差,决定了图像的平滑程度,将 LoG 与图像卷积会模糊图像,其模糊程度是正比于σ\sigma 的。因为 LoG 的平滑性质能减少噪声的影
响,所以当边缘模糊或噪声较大时,利用 LoG 检测过零点能提供较可靠的边缘位置,当然这种方法的
计算复杂度比较大

LoG

高斯差分(DoG)

高斯差分(DoG)算子也是一种常用的二阶差分算子,顾名思义,它是两个高斯函数之差的形式.f(x,y)f(x, y) 分别与标准差为 σ1\sigma_{1}σ的高斯函数 Gσ1(x,y)\sigma_{\text {的高斯函数 }} G_{\sigma_{1}}(x, y)Gσ2(x,y)G_{\sigma_{2}}(x, y) 做卷积, 可表示为

g1(x,y)=Gσ1(x,y)f(x,y)g2(x,y)=Gσ2(x,y)f(x,y)\begin{array}{l} g_{1}(x, y)=G_{\sigma_{1}}(x, y) * f(x, y) \\ g_{2}(x, y)=G_{\sigma_{2}}(x, y) * f(x, y) \end{array}

2Gσ(x,y)\nabla^{2} G_{\sigma}(x, y) 定义为

2Gσ(x,y)=Gσ1(x,y)Gσ2(x,y)=12π[1σ1exp(x2+y22σ12)1σ2exp(x2+y22σ22)]\begin{aligned} \nabla^{2} G_{\sigma}(x, y) &=G_{\sigma_{1}}(x, y)-G_{\sigma_{2}}(x, y) \\ &=\frac{1}{\sqrt{2 \pi}}\left[\frac{1}{\sigma_{1}} \exp \left(-\frac{x^{2}+y^{2}}{2 \sigma_{1}^{2}}\right)-\frac{1}{\sigma_{2}} \exp \left(-\frac{x^{2}+y^{2}}{2 \sigma_{2}^{2}}\right)\right] \end{aligned}

DoG

Canny 算子

是一种有效的边缘检测算子,具体包括4个步骤:

  • 高斯图像平滑:为了抑制噪声,利用高斯函数对图像进行平滑处理

g(x,y)=Gσ(x,y)f(x,y)g(x, y)=G_{\sigma}(x, y) * f(x, y)

  • 基于梯度的边缘检测:利用 Sobel 算子计算每一个像素(x,y)处的局部梯度幅度及其梯度方向

g(x,y)=[Gx2(x,y)+Gy2(x,y)]12α(x,y)=arctan[Gy(x,y)Gx(x,y)]\begin{aligned} \nabla g(x, y)=&\left[G_{x}^{2}(x, y)+G_{y}^{2}(x, y)\right]^{\frac{1}{2}} \\ \alpha(x, y) &=\arctan \left[\frac{G_{y}(x, y)}{G_{x}(x, y)}\right] \end{aligned}

  • 梯度幅度的非极大值抑制:追踪梯度幅度中所有脊的顶部,保留局部梯度极大值点,形成单像素宽度的边缘,这个过程称为非极大值抑制

  • 双阈值法的边缘检测和连接:设置两个不同的阈值 T1、T2,T1<T2 。梯度幅度大于 T2 的像素称为强边缘像素,梯度幅度在其间的像素称为弱边缘像素,将强边缘像素连接成轮廓,当到达间断点时,在低阈值图像的8邻域内寻找可以连接到强边缘的弱边缘像素,直至将强边缘连接起来为止。

一种好的边缘检测算子具备3个特点(*)

  • 有效抑制噪声,边缘检测错误率低,同时避免虚假边缘;
  • 精确定位边缘,检测出真正的边缘;
  • 对同一边缘具有低的响应次数,最好只产生一个响应。

各个梯度算子比较(*)

不同算子边缘检测比较

一阶差分

  • Roberts算子利用一阶差分检测边缘,边缘定位精度较高,但抑制噪声能力较差,适用于陡峭边缘且信噪比高的图像。

  • Sobel与Prewitt算子等效于首先对图像进行加权平滑处理,然后再计算差分,因此,对噪声有一定的抑制能力,但检测出的边缘具有一定宽度,且不能形成闭合、连通的轮廓

二阶差分算子

  • 拉普拉斯算子对噪声非常敏感,不适合直接用于边缘检测。
  • LoG算子克服了拉普拉斯算子抗噪能力差的弱点,并能产生闭合、连通的轮廓,但在抑制噪声的同时也模糊了边缘,从而造成弱边缘漏检。LoG 算子是复合算子,一般模板尺寸较大,因此,时间开销也较大。此外,当 LoG 算子中σ\sigma值较大时,平滑作用越显著,去除噪声越好,但图像的细节也损失越大,边缘精度也就越低;当 σ\sigma值较小时,过多的细节会产生意大利细面条盘子效应。

Canny算子

  • 可以形成闭合、连通且单像素宽度的边缘,但也会产生类似意大利式细面条盘子效应的虚假边缘

边缘检测常用matlab函数


bw1 = edge(I,'sobel');
bw2 = edge(I,'log');
bw3 = edge(I,'canny');
bw4 = edge(I,'prewitt');
bw5 = edge(I,'roberts');

基于阈值的图像分割

基本原理

  • 通过设定不同的阈值,将图像中的像素分为两类或多类,具有计算简单、容易实现的优点。

  • 阈值的选取决定了阈值分割的效果,阈值法的关键是如何选择合适的阈值

  • 当一幅图像由亮目标区域和暗背景区域(或反之)组成时,灰度直方图呈现双峰模式。

    • 确定一个合适的阈值T将这两个峰分开。
    • 将大于等于阈值的像素作为物体或背景,生成一个二值图像。

阈值分割法的特点

  • 适用于目标与背景在灰度上有较强对比度,且目标或背景的灰度比较单一的图像。
  • 这种方法总可以得到封闭且连通区域的边界

分类

  • 全局阈值法——利用全局信息对整幅图像求出最优分割阈值,可以是单一或多个阈值;
  • 局部阈值法——将整幅图像划分为若干区域,再对各个区域使用全局阈值法分别求出最优分割阈值。

P参数法

  • 基本思想
    根据目标区域在整幅图像中所占的比例来设定阈值,进行二值化处理.

步骤

  • 试探性给出一个阈值 ,统计目标区域的像素数,并计算目标区域的像素数与图像像素总数的比值,判断目标区域在整幅图像中所占的比例是否满足要求。若满足要求,则阈值合适;否则,则阈值偏大或偏小,再对阈值进行调整,直至满足要求为止

多阈值法

  • 目的:难以准确定位双峰之间谷底位置的图像分割问题。
  • 方法:多阈值法图像分割是在图像分割的过程中设定多个阈值来实现复杂双峰形状直方图的图像分割。

双阈值法

  • 同样使用两个阈值T1和T2区分背景和目标区域,其中,T1 < T2 ,
    • 灰度值小于阈值T1的像素确定为背景区域,
    • 灰度值大于阈值T2的像素确定为目标区域,
  • 对于灰度值在范围T1与T2之间的像素,根据该像素邻域内已经做出判别的其他像素的情况进一步确定该像素的归属。

双阈值法

通过设定双阈值避免了单阈值法中阈值过高或过低而将目标像素错分为背景像素或将背景像素错分为目标像素的情况

Otsu(自动阈值法)(*)

基本思想

根据图像中像素的灰度特征,将图像中像素分成前景和背景像素两类,两类像素的类间方差最大时的阈值即为最优阈值。

方法

设图像的像素总数为n,灰度级数为L,第k个灰度级rkr_k的像素数为nkn_k,计算图像的灰度直方图 pkp_k,根据像素的灰度值利用阈值T将图像中的像素划分为两类,记为C1和C2。

  • 两类C1和C2的类内方差定义为

σ12(T)=1P1(T)k=01(rkμ1(T))2pkσ22(T)=1P2(T)k=T+1L1(rkμ2(T))2pk\begin{aligned} \sigma_{1}^{2}(T) &=\frac{1}{P_{1}(T)} \sum_{k=0}^{1}\left(r_{k}-\mu_{1}(T)\right)^{2} p_{k} \\ \sigma_{2}^{2}(T) &=\frac{1}{P_{2}(T)} \sum_{k=T+1}^{L-1}\left(r_{k}-\mu_{2}(T)\right)^{2} p_{k} \end{aligned}

式中,P1(T){P_{1}(T)}P2(T){P_{2}(T)}μ1(T)\mu_{1}(T)μ2(T)\mu_{2}(T)分别为两类中像素数在像素总数中所占的比例像素的灰度均值。

  • 两类的总类内方差类间方差总方差分别为

σW2(T)=P1(T)σ12(T)+P2(T)σ22(T)σB2(T)=P1(T)P2(T)[μ1(T)μ2(T)]2σ2=k=0L1(rkμ)2pk\begin{array}{l} \sigma_{W}^{2}(T)=P_{1}(T) \sigma_{1}^{2}(T)+P_{2}(T) \sigma_{2}^{2}(T) \\ \sigma_{B}^{2}(T)=P_{1}(T) P_{2}(T)\left[\mu_{1}(T)-\mu_{2}(T)\right]^{2} \\ \sigma^{2}=\sum_{k=0}^{L-1}\left(r_{k}-\mu\right)^{2} p_{k} \end{array}

引入Fisher判别分析中类可分离性的判别准则作为评价阈值T分割性能的判别准则,可表示为

λ(T)=σB2(T)σW2(T)κ(T)=σ2σW2(T)η(T)=σB2(T)σ2\begin{aligned} \lambda(T) &=\frac{\sigma_{B}^{2}(T)}{\sigma_{W}^{2}(T)} \\ \kappa(T) &=\frac{\sigma^{2}}{\sigma_{W}^{2}(T)} \\ \eta(T) &=\frac{\sigma_{B}^{2}(T)}{\sigma^{2}} \end{aligned}

好的阈值应能够很好地分离两类像素,将寻找最优阈值的图像分割问题转换为搜索最优阈值T使判别准则达到最大值的最优化问题。
选取η(T)\eta(T)作为判别准则评价阈值T的可分离性,求取最优阈值T
的表达式为

T=argmaxT[0,L1]σB2(T)T^{*}=\arg \max _{T \in[0, L-1]} \sigma_{B}^{2}(T)

迭代阈值法(*)

迭代阈值法的基本思想

  • 属于同一类别的像素灰度值具有较大的一致性,使用均值和方差作为均匀性度量的数字指标。

设图像的像素总数为n,灰度级数为L,第k个灰度级rkr_k的像素数为nkn_k,具体步骤:

  • 选取灰度均值或灰度中值作为阈值的初始估计值T0T_0
  • 根据像素的灰度值利用阈值 将图像分割成两个区域,记为R1和R2。R1由灰度值在范围[0,Tk][0,T_{k}]内的像素组成,R2由灰度值在范围[Tk+1,L1][T_{k+1},L-1]内的像素组成;
  • 分别计算区域R1和R2内像素的灰度均值u1u_1u2u_2 ,

μ1(Tk)=1n1(Tk)k=0Tkrknkμ2(Tk)=1n2(Tk)k=Tk+1L1rknk\mu_{1}\left(T_{k}\right)=\frac{1}{n_{1}\left(T_{k}\right)} \sum_{k=0}^{T_{k}} r_{k} n_{k} \quad \mu_{2}\left(T_{k}\right)=\frac{1}{n_{2}\left(T_{k}\right)} \sum_{k=T_{k}+1}^{L-1} r_{k} n_{k}

利用u1(Tk)u_1(T_k)u2(Tk)u_2(T_k) 更新阈值,即

Tk+1=12[μ1(Tk)+μ2(Tk)]T_{k+1}=\frac{1}{2}\left[\mu_{1}\left(T_{k}\right)+\mu_{2}\left(T_{k}\right)\right]

若连续两次迭代的阈值Tk+1T_{k+1}TkT_{k}之差小于预设限ϵ\epsilon

Tk+1Tk<ϵ\left|T_{k+1}-T_{k}\right|<\epsilon

终止迭代;否则,返回步骤2。

常用计算阈值的matlab函数


bw = im2bw(i,graythresh(i));% graythresh(i) 返回double

基于梯度的直方图阈值法

  • 利用局部特征自动选取阈值方法
    • 通过边界特性选择阈值
    • 差分直方图法选择阈值
    • 基于梯度的直方图阈值法
      • 基于梯度的直方图阈值法利用的局部邻域特征是像素的梯度
      • 区域内部像素的灰度值具有一定的一致性和相关性,梯度较小,而边界像素具有较大的梯度

在直方图中,波峰对应目标或者背景像素,波谷对应背景与目标之间的过渡部分,坡对应边缘。阈值就选取在波谷。

梯度直方图

  • 基于梯度的直方图阈值法利用的局部邻域特征是像素的梯度。
  • 区域内部像素的灰度值具有一定的一致性和相关性,梯度较小,而边界像素具有较大的梯度。

梯度加权直方图阈值法

  • 给梯度较小的目标和背景区域内部像素赋予较大的权重,而给它们边界上梯度较大的像素赋予较小的权重。
  • 设g(x,y)表示像素(x,y)的梯度,在灰度直方图的计算过程中,对图像中像素的灰度值f(x,y)进行统计时,赋予关于梯度的权重1/[1+g(x,y)]21/[1+g(x,y)]^2,梯度加权直方图为:

hist[f(x,y)]=hist[f(x,y)]+1/[1+g(x,y)]2\operatorname{hist}[f(x, y)]=\operatorname{hist}[f(x, y)]+1 /[1+g(x, y)]^{2}

  • 在梯度加权直方图中
    • 由于均匀区域内部的梯度接近0,赋予较大的权重,权重接近1,目标和背景内部像素对应的波峰基本保持不变;
    • 边界像素的梯度较大,赋予较小的权重,从而增加了波谷的深度。

梯度加权直方图

示例

在原有直方图中加上一个梯度权重,让波峰与波谷高度差变大。

灰度—梯度二维直方图阈值法

  • 灰度-梯度二维直方图阈值法是建立一个二维直方图,横轴表示灰度级,纵轴表示梯度。通常情况下,将图像的梯度压缩到范围[0,L-1]内并量化为整数,使得灰度-梯度二维直方图为L × L的方形
  • 设f(x,y)为像素(x,y)的灰度值,g(x,y)为其梯度,灰度-梯度二维直方图为

hist[f(x,y),g(x,y)]=hist[f(x,y),g(x,y)]+1\operatorname{hist}[f(x, y), g(x, y)]=\operatorname{hist}[f(x, y), g(x, y)]+1

灰度-梯度二维直方图示意图

灰度-梯度二维直方图

梯度越大越在上方,边缘像素在上方;梯度越小越在下方,背景,目标像素靠近横向坐标轴

基于区域的图像分割

  • 基于阈值的图像分割没有考虑像素的空间位置关系,而同一分割区域的像素应该具有相似的性质;
  • 基于区域的图像分割充分考虑像素及其空间邻域像素之间的关系。
    • 区域生长法
    • 区域分裂合并法

区域生长法

  • 基本思想

    • 在待分割区域内确定一个或多个像素作为种子像素
    • 根据某种相似性准则,由内向外合并具有相同或相似性质的相邻像素,逐步扩展区域,
    • 扩展区域内的所有像素作为新的种子像素继续合并具有相同或相似性质的相邻像素,直至扩展到整个区域
  • 关键步骤

    • 选取种子像素

    • 确定像素合并的相似性准则

      从该种子开始向外扩张,首先把种子像素加入结果集合,然后不断将与集合中各个像素连通、且满足描述符的像素加入集合。

    • 确定终止生长过程的准则。

      上一过程进行到不再有满足条件的新结点加入集合为止。

  • 相似性质:区域生长法要求待分割区域具有相同或相似的性质,且是连通的。区域内像素的相似性度量通常利用灰度、颜色、纹理等特征
  • 连通:常用4或者8连通。

步骤

  1. 初始化一个堆栈,将种子像素入栈;
  2. 若堆栈非空,则栈顶像素出栈,标记该像素属于待分割区域;
  3. 按照“左 上 右 下”的顺序查看其4邻域内的像素,若相邻像素满足相似性准则,则属于同一区域,将该像素入栈
  4. 重复上述过程直到堆栈为空。此时,标记了待分割区域内的所有像素。

区域分裂合并法

  • 按照某种一致性准则分裂和合并区域,不需要预先指定种子像素。
  • 当区域不满足一致性准则时,通过区域分裂将不同目标的区域分开;当相邻区域性质相同或相似时,通过区域合并将同一目标的相邻区域合并。
  • 区域分裂合并法通常利用四叉树数据结构进行描述

基于四叉树数据结构的区域分裂合并法实现:

  1. 初始区域为整幅图像R0;
  2. 对于每一个区域R,若 P® = false,则将区域分裂成4个子区域;
  3. 重复步骤2,直至没有可以分裂的区域;
  4. 对于图像中任意两个相邻区域Ri和Rj,若P(RiRj)=P\left(R_{i} \cup R_{j}\right)= True,则将这两个区域合并成为一个区域。
  5. 重复步骤4,直至没有可以合并的相邻区域。

分裂合并示意图