第 5 章 图 像 分 割 本章讲述图像分割的基本概念,包括图像分割的定义、图像分割和边缘检测的区别、阈值化、二值化、半调阈值化、多阈值化等; 讲述基于直方图的阈值选取方法,包括最小误差法和最大差距法; 讲述多次分割法及全局阈值、局部阈值和自适应阈值等应用策略; 讲述二维直方图、边缘强度加权直方图和等量像素法直方图的构造方法; 讲述聚类分割、区域增长与分裂合并算法和基于某种稳定性的图像分割方法; 最后以光照不均的消除与图像分割为例,讲述图像分割和前面所学内容的灵活运用。 5.1基本概念 5.1.1什么是图像分割 图像分割(image segmentation)就是按照一定的规则将图像划分成若干有意义的区域。即各区域的并集是整个图像,各区域的交集为空。 例如,图51(a)所示的米粒图像被分割成如图51(b)所示的黑色区域和若干白色区域,它们的并集是整幅图像,黑色区域和白色区域无交集。 图51米粒图像分割 从图像分割的定义来看,它并没有说明按什么样的规则和实现什么目的才有意义,这也从侧面说明了图像分割的复杂性。一般来说,若分割结果符合特定场合的应用,这样的分割才称为有意义。一种图像分割方法有可能非常符合甲的需求,但与乙的需求矛盾。规则和需求的多样性决定了图像分割方法的多样性,目前为止图像分割有近2000种方法,可见其方法之多,同时也说明不存在通用的图像分割方法。 图像分割经常根据区域颜色值、灰度值或纹理等特征的差异来划分不同的区域。由于光照不足、光照不均、逆光、目标占空比等因素对图像分割的影响较大,因此它们是考查一种图像分割方法是否有效、是否稳健时不可或缺的条件。 5.1.2图像分割与边缘检测的区别 首先,边缘检测不是图像分割。虽然边缘检测的最终结果也是二值图像,比如白色的像素是边缘点,黑色的像素是内部点,但是根据图像分割的定义,图像分割的结果是区域,而不是稀疏的边缘点,所以边缘检测不能被称为图像分割。 其次,图像分割的结果是若干个区域,每个区域内部的像素是互相连通的,因此区域是有轮廓的。区域的轮廓肯定是闭合曲线,这非常有利于目标面积和目标形状参数的测量。相比之下边缘检测想要得到闭合曲线是非常难的,对于具体的应用而言,在无法确保任何情况下阈值都合理的前提下,就无法保证边缘点一一相连。虽然4.5.1节对图431(a)采用二阶微分算子和一阶微分算子相结合的方法,得到了米粒边缘的闭合曲线,但参数a0和t是对图431(a)进行精心设计的,如果把图431(a)更换成相同场景米粒的其他图像或者光照稍暗一些,就有可能无法保证边缘闭合了。 5.1.3阈值化 阈值化(thresholding)是经典的图像分割方法。把阈值(threshold)作为区分目标像素与背景像素的灰度门限,灰度值大于或等于阈值的像素属于物体,而其他的像素属于背景,如式(51)所示。使用这种方法,可以有效地分割目标与背景之间存在明显灰度差别的图像,且实现过程非常简单,计算量极低。 G(x,y)=1,g(x,y)≥threshold 0,其他(51) 在计算机中灰度值0和1都会显示成黑色,为了方便观察,一般采用式(52)的做法: G(x,y)=255,g(x,y)≥threshold 0,其他(52) 把图像分割成两种灰度值的过程,常被称为图像二值化(image binarization)。 【算法51】图像二值化 void RmwThreshold(BYTE *pGryImg, int width, int height, int thre) { BYTE *pCur=pGryImg; for (; pCur<pGryImg+width*height;) *(pCur++) = (*pCur>=thre)*255; return; } 阈值有时也被用来屏蔽掉图像中背景部分而保留目标部分的灰度信息,如式(53)所示,这种分割方法称为半调阈值化(semithresholding)。 G(x,y)=g(x,y),g(x,y)≥threshold 0,其他(53) 有时也采用多阈值化(multithresholding)将图像的灰度范围划分成有限的灰度种类,其处理后的结果不再是二值的,而是结果图像中只有几种灰度值。 实际上,图像分析都会直接或间接地使用阈值化技术,例如第4章中通过设定阈值实现从边缘强度得到边缘点。那么如何选取阈值呢? 5.2基于直方图的阈值选取 第2章中介绍了直方图的特点,比如从直方图中很容易看出图像中有几类目标和各类目标的灰度特征,这意味着可以通过直方图数据来选择合适的阈值。下面重点讲述两个典型的基于直方图的阈值选取方法: 一个是基于解析描述的最小误差法求解阈值; 另一个是基于阈值枚举的最大差距法选取阈值。 另外,还有很多基于直方图选取阈值的方法,比如直方图峰谷分析法以及从直方图峰谷分析法引申来的最大熵阈值选取法等,由于它们缺乏一定的理论基础,实用性也较差,因此不再讲述。 需要注意的是,基于直方图选取阈值是阈值选取的主要方法,直方图并不一定限于灰度值的直方图,也可以是其他物理量的直方图。 5.2.1最小误差法 最小误差法(minimum error thresholding)源于Bayes最小误差分类方法。假设目标灰度和背景灰度是独立分布的随机变量,并且各自的概率密度(直方图)服从一定的正态分布(高斯分布),由目标和背景组成的图像的灰度密度分布服从混合正态分布,分别如图52(a)、图52(b)和图52(c)所示。 图52概率密度函数 在图52(c)中,可以直观地发现: 当阈值取灰度值90(u1)时,会把很多背景像素划到目标中,背景像素划到目标中的概率很大; 当阈值取灰度值155(u2)时,会把很多目标像素划到背景中,目标像素划到背景中的概率很大; 当阈值取灰度值125左右时,只有少量的背景像素划到目标中和少量的目标像素划到背景中。因此,最优阈值就是使总的错误概率最小的值,定义一个评价函数如式(54)所示。 Eall=E12(t)×w1+E21(t)×w2(54) E12(t)=∫255tp1(g)dg(55) E21(t)=∫t0p2(g)dg(56) 其中,E12(t)是阈值为t时背景被错误分类成目标的概率,E21(t)是阈值为t时目标被错误分类成背景的概率; w1是图像中背景像素的所占比例,w2是图像中目标像素的所占比例,w1+w2=1; p1(g)是背景像素的概率密度,p2(g)是目标像素的概率密度; Eall是阈值为g时的总错误率。 使Eall取最小值时的t即为最佳阈值,即式(54)的一阶导数等于0时的t。当p1(g)和p2(g)的方差相等,即σ1=σ2=σc时,得到如下结论(中间求导和求解的过程忽略): t=u1+u22-σ2cu1-u2lnw1w2(57) 若再有w1=w2,则t=u1+u22,即阈值是直方图中2个波峰对应的灰度值的均值。在一般情况下,同时满足σ1=σ2和w1=w2是很难的,如果不加条件地把阈值取为直方图中2个波峰对应的灰度值的均值是不严谨的。仔细分析式(57)可知,当w1>w2时,阈值变大,向u2移动; 当w2>w1时,阈值变小,向u1移动。这可以理解为,若选取的阈值远离占空比大的类别,就能够减小分类错误概率。 由上可知,最小误差法求解阈值需要知道6个参数,即u1、σ1、u2、σ2、w1、w2。在一般情况下,上述参数是未知的,因此需要根据图像的直方图来估计它们。在2个正态分布下的混合密度函数为: p(g)=w112πσ21e-(g-u1)22σ21+w212πσ22e-(g-u2)22σ22(58) 假设实际的直方图为h(g),因此h(g)和p(g)的均方误差(实际值与估计值之间的误差)为: Err=1256∑255g=0[h(g)-p(g)]2(59) 采用最小二乘法求解出Err取最小值时的u1、σ1、u2、σ2、w1、w2,代入式(54)即可求解最优阈值。 最小误差法的缺点是,若目标和背景的分布不满足正态分布,或者图像中除了背景和目标外还存在其他类别的区域时,其有效性就会大大降低。 5.2.2最大差距法 最大差距法是日本学者Otsu在1979年提出的阈值求取方法(A threshold selection method from graylevel histogram[J].IEEE on SMC9, 1979(3): 6266),常被称为Otsu或者大津阈值化。其动机是使用阈值把图像分割为背景和目标时,最佳阈值应该使得背景和目标之间的距离最大,即背景和目标的类间距最大。 假设阈值为t,把图像分割为背景和目标2类区域。此时,背景部分的灰度均值为u1(t),目标部分的灰度均值为u2(t),背景部分在图像中的所占比例为w1(t),目标部分在图像中的所占比例为w2(t)。有: 背景像素到目标像素的距离为: d12(t)=|u1(t)-u2(t)|×w1(t)。 目标像素到背景像素的距离为: d21(t)=|u1(t)-u2(t)|×w2(t)。 目标像素和背景像素的类间距定义为: d(t)=d12(t)×d21(t)。 那么,最佳阈值应该为: t=argmaxgmin≤t<gmaxd(t)(510) 式(510)的含义是在灰度最小值gmin到灰度最大值gmax之间枚举t,d(t)取最大值时的t即为所求。 【算法52】Otsu阈值求取 int RmwGetOtsuThreshold(int *histogram,int nSize) { int thre; int i, gmin, gmax; double dist, f, max; int s1, s2, n1, n2, n; //step.1-----确定搜索范围:最小值----------------------------// gmin = 0; while (histogram[gmin]==0) ++gmin; //step.2-----确定搜索范围:最大值----------------------------// gmax = nSize-1; while (histogram[gmax]==0) --gmax; //step.3-----搜索最佳阈值-----------------------------------// if (gmin==gmax) return gmin; //不满足2类分布 max = 0; thre = 0; //初始化u1 s1 = n1 = 0; //初始化u2 for (s2 = n2 = 0, i = gmin; i<=gmax; i++) { s2 += histogram[i]*i; n2 += histogram[i]; } //搜索 for (i = gmin, n = n2; i<gmax; i++) { if (!histogram[i]) continue;//加速 //更新s1s2 s1 += histogram[i]*i; s2 -= histogram[i]*i; //更新n1n2 n1 += histogram[i]; n2 -= histogram[i]; //评价函数 dist = (s1*1.0/n1-s2*1.0/n2); f = dist*dist*(n1*1.0/n)*(n2*1.0/n); if (f>max) { max = f; thre = i; } } // step.4-----返回-------------------------------------------// return thre+1; //二值化时是用>=thre,所以要+1 } Otsu方法有两个优点: 一是不要求背景和目标的灰度值统计满足正态分布; 二是使用了背景和目标的灰度均值,具有很好的抗噪能力。这两个优点决定了Otsu是应用最广的阈值求取方法。另外,在计算方法上,最小误差法是解析法,而Otsu是枚举法。 5.2.3多次分割法 在很多实际应用中,面对复杂多变的动态场景,要保证场景中只有2类目标是无法做到的,比如红外图像中非结构化道路的道边检测,要在有阴影、水迹、车辆、行人、植被等的图像中找到道边。但是,若处理的图像中区域类别数大于2,最小误差法和最大差距法就都失去了理论基础,它们的分割效果就无法保证。 随着计算机内存访问速度越来越快,现在已经有DDR6内存了,执行一次图像二值化的时间花费非常少,因此多次分割法在实际应用中也经常被使用到。 所谓多次分割法就是对阈值的选择不给出任何准则,它把灰度最小值gmin到灰度最大值gmax之间的每个或者多个灰度值当作阈值,把图像最多进行(gmax-gmin-2)次二值化,最多得到(gmax-gmin-2)个二值图像,然后在每个二值图像中,根据目标形状、轮廓像素对应的边缘强度、区域对应的灰度方差等特征,选择出更佳的目标区域。实质上,它是把评价函数放到了图像二值化后对图像分割结果进行评价,而不是在图像二值化前对阈值进行评价。 多次分割法对阈值的选择不进行评判,这是它的优点; 缺点是它需要执行多次图像二值化和对每个二值图像进行分割结果的评价,速度较慢。 5.2.4全局阈值、局部阈值与自适应阈值 阈值的使用可分为全局阈值、局部阈值和自适应阈值。对整幅图像的所有像素都使用同一个阈值,则该方法被称为全局阈值(global thresholding); 若把图像分成若干个块,每块使用不同的阈值,则该方法被称为局部阈值(local thresholding); 若对每像素都使用不同的阈值,则该方法被称为自适应阈值(adaptive thresholding)。和第2章讲过的图像增强以及第3章讲过的图像平滑一样,阈值也可以分别在帧级、块级和像素级上使用。 全局阈值的具体实现可以是对整幅图像构造一个直方图,根据该直方图得到一个阈值,使用该阈值对所有像素进行分类。局部阈值的具体实现可以是把整幅图像分成若干个块,每块构造一个直方图,根据该直方图得到一个阈值,使用该阈值对该块内的所有像素进行分类。自适应阈值的具体实现可以是对整幅图像进行重叠分块,每块构造一个直方图,根据该直方图得到一个阈值,这样就得到了多个阈值,这些阈值分别来自每一个块; 把这些阈值顺序排列起来,就构成了一个小图像A,A中每个像素的值都是各个块的阈值,把A图像通过双线性插值放大到和原图像等大,得到B图像,则B图像中每个像素的值就是原图像中每个像素的阈值。 图53(a)是光照不均的原始图像,对该图像构造直方图采用Otsu求取阈值,使用该阈值对所有像素进行分割,得到结果图像如图53(b)所示。从图53(b)可以看到左下角的米粒分割错误,这是由于原始图像的左下角较暗所致。为了尽可能地消除光照的不均,把原始图像在水平方向和垂直方向都分成4条,共得到16个图像块,对每块都采用Otsu单独分割,得到的分割结果如图53(c)所示。可以看出分割结果良好,这是因为图像块相对较小,可以认为光照在这个小的局部区域内是均匀的。 图53全局阈值与局部阈值 图54(a)是光照不均的文档图像,并且由于纸面有皱褶,形成了几条高亮的反光区域,其全局阈值的结果如图54(b)所示,其分块阈值得到的结果如图54(c)所示,其自适应阈值得到的结果如图54(d)所示。由于第三类区域“反光”的存在,虽然图54(c)和图54(d)所示的分割结果比图54(b)有所改善,但仍存在少量像素分割错误(在5.7节中会得到解决)。 图54文档图像的二值化 5.3面向阈值选取的直方图构造 阈值化是一种广泛使用的图像分割手段,基于直方图阈值选取的图像分割主要研究直方图构造和阈值选取两个问题。基于直方图的阈值选取是非常依赖于直方图数据本身的,直方图数据的优劣影响阈值的精度,影响阈值选取算法的稳健性。除了在第2章中讲过的常规方法外,直方图的构造还有很多方法。在实际应用中,需要根据图像的不同特点使用合适的直方图构造方法。本节讲述二维直方图、边缘强度加权直方图和等量像素法直方图的构造方法。 5.3.1二维直方图 在常规的直方图构造中,直方图数据只是考虑了像素自身的灰度值,没有考虑像素所处的空间位置。如果把一幅图像A的像素打乱空间位置后重新排列得到图像B,尽管A图像和B图像已经发生了巨大的变化,但它们的直方图还是一模一样的。因此,提出了二维直方图的概念。 所谓二维直方图就是像素的灰度值g和其邻域均值u的联合分布直方图h(g,u),其含义是当像素的灰度值为g时,其邻域均值为u的概率。在灰度图像中,因为g和u都是256级灰度,所以二维直方图是一个256×256的矩阵。其构造方法如下: 【方法51】二维直方图的构造 step.1定义直方图,int histogram[256][256]; step.2对原始图像pGryImg进行均值滤波,得到均值滤波后的图像pAvrImg; step.3初始化直方图,memset(histogram, 0, sizeof(int)*256*256); step.4统计直方图,for(i=0; i<width*height; i++) histogram[ pGryImg[i] ][ pAvrImg[i] ]++; 基于“图像中目标区域和背景区域内部的像素灰度值比较均匀”这个通常可以满足的假定,像素的灰度值g与其邻域的灰度均值u相差不大,所以像素集中在二维直方图的对角线附近。在偏离对角线的地方,直方图波峰的高度急剧下降。图55(a)是图53(a)消除了光照不均的影响后的结果,图55(b)是它的常规一维直方图,图55(c)是它的二维直方图,可以看出像素基本分布在对角线附近。 图55正常图像的常规一维直方图和二维直方图 在常规一维直方图构造中,噪声的灰度值也被统计到了直方图中。分析可知,噪声的灰度值和其邻域的均值相差较大,它们的联合分布不会出现在二维直方图的对角线附近。因此,若仅使用二维直方图对角线附近的数据构造一个一维直方图,则该直方图能较好地消除噪声,使用该一维直方图进行图像分割会具有更好的抗噪能力。图56(a)是加入了噪声的原始图像,图56(b)是常规的一维直方图,由于噪声干扰,从中已经看不到如图55(b)所示的波峰和波谷了,但在图56(c)所示二维直方图的对角线附近仍能看到明显的峰谷,说明了其对噪声的抑制能力,对角线上数据分布的峰谷鲜明。 图56含噪图像的常规一维直方图和二维直方图 算法53给出了使用二维直方图对角线附近数据构造一维直方图的方法。使用该方法,令dist=4,得到的一维直方图如图57(a)所示,可以看到明显的峰谷; 对该直方图求取Otsu阈值进行二值化,得到的图像分割结果如图57(b)所示; 采用中值滤波消除图57(b)中噪声得到的结果如图57(c)所示。 【算法53】使用二维直方图对角线附近数据构造一维直方图 void RmwHistogramBy2D( BYTE *pGryImg, BYTE *pAvrImg, int width, int height, int dist, //与均值的容差 int *histogram ) { int *pos; int g, u; memset(histogram, 0, sizeof(int)*256); for (int i = 0; i<width*height; i++) { u = pAvrImg[i]; g = pGryImg[i]; if (abs(g-u)<=dist) //仅统计在均值附近者 { histogram[g]++; } } return; } 图57图像分割验证 图57说明了采用二维直方图对角线附近数据构造一维直方图的方法是有效的(但在实际应用中,噪声图像并不一定要如此处理,就图56(a)而言,它也可以在图像平滑后直接进行图像分割)。 5.3.2边缘强度加权直方图 算法53实质上是仅使用图像的部分像素建立直方图。图56(a)中满足算法53直方图统计的像素如图58中黑点位置所示,这些像素约占整幅图像的11%。它们的灰度值g与其邻域的灰度均值u基本相等,可以认为它们是背景区域或者目标区域的内部像素,而不是噪声像素或边缘点。 图58满足g≈u的像素 这就提出了使用哪些像素建立直方图或者像素对直方图的贡献度问题。算法53可以理解成仅使用g≈u的像素建立直方图; 还可以理解成像素对直方图的贡献度问题,只不过这个贡献度非常武断,即要么为0,要么为1,因此可以设计一个贡献度函数,如: Δ=1max{|g-u|,1}(511) 其中,|g-u|近似于边缘强度。 基于以上思想,下面讲述边缘强度反比加权和边缘强度正比加权的灰度直方图。 1. 边缘强度反比加权的灰度直方图 边缘强度反比加权直方图是指当像素的边缘强度大时,该像素灰度值对直方图的贡献就小,就是在构造直方图时把histogram[g(x,y)]+=1改为histogram[g(x,y)]+=f(grd(x,y)),grd(x,y)代表(x,y)处的边缘强度,用v代表。grd(x,y)越大,f(grd(x,y))就越小,如: f(v)=1.0,v=0 1.0k×v,其他(512) 其中,k为大于或等于1的正数。在极端情况下,甚至可以: f(v)=1,v≈0 0,其他(513) 采用式(513)时,实际上就是内部像素灰度直方图,即该直方图仅使用了目标和背景内部的像素,而忽略了目标和背景之间的过渡像素(因为过渡像素的边缘强度不等于0)。 边缘强度反比加权直方图在保持直方图的峰值不变的情况下,可以使得直方图的谷点更低,更有利于阈值的选取,从而提高阈值选取算法的稳健性。当图像模糊或者光照不均时,目标和背景之间存在大量的过渡像素,可以采用边缘强度反比加权直方图。图59(a)是一幅模糊图像的常规直方图,图59(b)是其边缘强度反比直方图,可以看出图59(b)中的谷点更低。 图59常规直方图与边缘强度反比加权的直方图比较 2. 边缘强度正比加权的灰度直方图 边缘强度正比加权直方图是当像素的边缘强度大时则该像素灰度值对直方图的贡献就大,即把histogram[g(x,y)]+=1改为histogram[g(x,y)]+=f(grd(x,y)),grd(x,y)代表(x,y)处的边缘强度,用v代表。grd(x,y)越大,f(grd(x,y))就越大,如: f(v)=k*v(514) 其中,k为大于或等于1的正数。在极端情况下,甚至可以: f(v)=1,v≥threshold 0,其他(515) 其中,threshold是边缘强度的阈值。式(515)实际上就是边缘像素灰度直方图,即该直方图仅使用了边缘像素,而忽略了目标和背景的内部像素(因为区域内部的像素边缘强度等于0)。 如果一幅图像中,在目标和背景之间的像素具有较大的边缘强度,而在其他位置的像素的边缘强度较小,则在边缘强度正比加权直方图中,目标和背景的灰度之间会出现一个波峰,此波峰所对应的灰度值即是阈值。当目标的占空比小时,若光照均匀,则可以采用边缘像素灰度直方图。图510(a)示意了一幅目标占空比很小的图像,其常规直方图如图510(b)所示,图510(c)是其边缘强度图像,图510(d)是其边缘强度正比加权的灰度直方图,其波峰对应的灰度值就是阈值。 图510常规直方图与边缘强度正比加权的直方图比较 5.3.3等量像素法直方图 目标和背景像素数目的不均会严重影响直方图的峰谷鲜明程度,降低直方图阈值选取算法的稳健性,尤其是当目标和背景的占空比相差很大时。当目标占空比很小时,即使在二维直方图对角线附近的数据中,也看不到明显的峰谷分布,目标像素被淹没在大量的背景像素中。边缘强度反比加权直方图上也因为位于目标内部的像素很少,而位于背景内部的像素很多,当背景的灰度分布范围较宽时,直方图上常常不存在对应于目标灰度的波峰,所以不适合目标占空比很小时的情况。受到边缘类型和边缘检测算子的影响,在目标占空比很小时,边缘点就更少,而且光照不均时边缘强度的离散性较大,边缘强度正比加权直方图也很难形成显著的波峰。本书作者在2001年提出了等量像素构造直方图的方法(一种基于图像边缘模式的直方图构造新方法[J].计算机研究与发展,2001,38(8): 972976),较好地解决了这个问题。 根据图像过渡区理论,目标(设为P2)和背景(设为P1)之间肯定是存在边界过渡区的,则边界过渡区(设为P3)的灰度值变化如图511(a)或图511(b)所示,像素的灰度值不可能从背景灰度值直接变化到目标灰度值。设图像中目标和背景的灰度差为Δg,目标和背景区域的边界宽度为Δw,则边界上的像素肯定满足其宽度为Δw的邻域内的最大灰度和最小灰度之差大于Δg,由此可以得到边界像素的集合为φ。将φ中分别在水平方向和垂直方向连续的像素表示为水平线段和垂直线段形式,从而在距离线段中点Δw/2的两侧选取连续的满足灰度之差大于Δg的像素对(P2和P1)来构造直方图,如图511所示。 图511边界过渡区 极少数情况下,由于区域边界的多样性,图像中某些位置的边界宽度可能小于Δw或者目标尺寸小于Δw,按上述方法则找不到目标像素和对应的背景像素。此时,取线段中点(P2)和位于线段一侧(左侧或右侧)且与线段中点的灰度之差大于Δg的像素点(P1)作为构造直方图的像素对,如图511(b)所示。 该种直方图实质上是从背景和目标上选择了等量的像素来构造直方图(有些像素会被重复选用多次),在一定程度上能够解决占空比不均的问题。其建立需要Δw和Δg 2个参数。Δg是目标和背景的灰度差,直观易用。Δw是边界区域的宽度,即使大于或小于真实的边界宽度,也不影响直方图的效果。该种直方图虽然由Δw和Δg得到,但并不依赖于它们的精度,因此具有很好的通用性和实用性。 图512(a)是一幅细胞显微镜图像。图512(b)是其常规灰度直方图,由于细胞的占空比很小,因此峰谷不够明显,与细胞对应的波峰非常矮。图512(c)是边缘强度反比加权的直方图,相当于内部像素直方图,同样因为细胞占空比小的原因,其峰谷不够明显,但比图512(b)略有改善。图512(d)是边缘强度正比加权的直方图,相当于边缘像素灰度直方图,由于背景的灰度不均匀,其最大波峰对应的灰度值是背景的灰度均值,不是细胞和背景的分割阈值。图512(e)是等量像素灰度直方图,可以看到峰谷鲜明,且基本上使用了相同数量的细胞像素和背景像素。 图512等量像素法直方图的比较 5.4聚类分割 如果把目标和背景的分割看作是像素的分类问题,即把一部分像素分类成目标类别,一部分像素分类成背景类别,那么就可以采用模式识别中的聚类方法来实现图像分割。模式识别有众多的聚类方法,其中k均值聚类(kmeans clustering)是一个简单实用的方法。 k均值聚类分割的基本思想是设定类别数k的值,比如k=2或者k=3等; 给每个类别初始化一个类别中心ui,i=0,1,…,k-1,即对每个中心赋一个不同的灰度值; 然后根据像素灰度值到类别中心的距离最小原则,把像素分到各个类别; 全部像素分类完成后,计算每类像素的灰度值均值,作为各类别新的中心值。如此迭代执行,直到各类别的中心值不变为止。 例51示例了8个数据的聚类过程,设k=2,u0=2,u1=3,执行了3次迭代后,各类别的中心值不再变化,聚类结束。 例51: k均值聚类 数据: 22337679 第1次迭代: 22337679得到u0=4/2,u1=35/6 第2次迭代: 22337679得到u0=10/4,u1=29/4 第3次迭代: 22337679得到u0=10/4,u1=29/4 由于在聚类过程中只是使用了像素的灰度值,没有使用像素的空间位置信息,因此在具体实现时应该先统计灰度直方图,借助直方图能够提高聚类的速度。另外,因为类别的中心值是浮点数,如果前后2次迭代的中心值最大差异足够小,即可判定为类别的中心值不变。图513(a)是对存在光照不均的图53(a)的聚类分割结果,图513(b)是消除了光照不均的图55(a)的聚类分割结果,它们的图像分割效果与Otsu阈值化非常接近。 图513k均值聚类分割(k=2) 聚类分割所需要的迭代次数依赖于类别中心的初始值。初始值选择得当,有可能很快就收敛; 选择不当,有可能需要特别长的时间才收敛。在实际应用中,由于聚类分割的时间花费难以预知,有可能多帧图像的平均聚类时间花费很小,但偶尔一帧图像的聚类时间特别长。由于时间花费不是常数,因此聚类分割在实时图像处理中一般不被采用,多被用在人机交互式处理中,当用户观察到分割结果基本满意时,就进行人工干预,强制迭代终止。 5.5区域增长与分裂合并算法 聚类分割方法需要事先设定类别数的值,但在很多情况下,类别数是难以预先确定的。因此可以从目标和背景的性质出发,属于同一类型区域的像素应该具有相近的灰度值或其他性质(彩色、纹理、梯度等),这类方法主要有区域增长算法、分水岭算法、区域分裂合并算法等。 区域增长算法(region growing)是随机或者以人工交互的方式给出一个或一组种子(seeds),比如计算机自动选择在一定范围内最亮或最暗的点,或者是人工指定位于目标中心的点; 按照某种增长规则,将邻居中与种子像素有相近灰度值或相似性质的像素合并到种子像素所在的区域中; 然后将这些像素当作新的种子点重复以上过程,直到没有满足增长规则的新像素被合并进来为止,结束区域增长。 图514(a)是一幅红外图像,图514(b)是采用分水岭区域增长算法(A fast watershed algorithm based on chain code and its application in image segmentation[J]. Patter Recognition Letters, 2005, 26: 12661274)得到的结果。分水岭区域增长算法把局域内灰度值最小的像素作为种子。 图514区域增长算法(分水岭) 区域分裂合并算法(splitandmerge)也是利用了这一原理(同一类型区域的像素具有相近的灰度值或其他性质)进行图像分割。它与区域增长算法有相似之处,但它无须预先指定种子点,而是按某种一致性准则对图像进行区域分裂或者合并。比如可以先把图像分成4块,若这其中的一块符合分裂条件,那么这一块又分裂成4块,就这样一直分裂,这个过程被称为区域分裂; 当分裂出一定数量的区域时,以每块为中心,检查与之相邻的各块,若满足一定的合并条件就将它们进行合并,这个过程称为区域合并; 如此往复,直到再也没有一定大小的新块产生,最后把小块按照合并条件合并到其相邻的大块里。 5.6基于某种稳定性的图像分割 具有不同灰度的多类目标分割一直是传统图像分割的难题。近些年来随着机器学习的发展,对于已知场景,语义分割能够较好地解决这个问题。但是在很多应用和未知场景中,传统的图像分割方法仍然具有其独特优势。对于多类不同灰度的目标分割,显然无法通过使用单个阈值来实现。本节讲述对图像执行序贯二值化(consecutive thresholding)并在二值化过程中基于提取的某种稳定性来实现图像分割的方法。 基于某种稳定性的图像分割的出发点是假定目标会在一定的灰度范围内稳定存在; 其手段是采用序贯二值化得到若干个二值图像,并从一系列二值图像中寻找某种稳定的特征。 5.6.1基于目标个数稳定性的图像分割 在分割灰度值不同的多类目标时,如果目标和背景有明显的灰度差异,并且目标的尺寸不是特别小,就可以使用基于目标个数稳定性的图像分割。 基于目标个数稳定性的图像分割是把一个灰度区间内的每个灰度值作为阈值对图像执行二值化,得到一系列的二值图像,统计每个二值图像中得到的目标个数,从而构造出阈值和目标个数的直方图。在该直方图中会存在若干个目标个数不变的阈值区间,一般认为有几个目标个数不变的阈值区间,有几个阀值区间,就有几类目标,且每个阈值区间的中心值就是此类目标的分割阈值。 图515(a)是一种包含字符和数字号码的图像,由10个字符组成,前4个字符是红色的,后6个字符是黑色的,变成灰度图像后就是前4个字符的灰度值比后6个字符的灰度值大。图515(b)是它的直方图,从中能够较明显看到有3个波峰,从小到大分别代表后6个黑色字符、前4个红色字符和白色背景。图515(c)是它的Otsu阈值比分割结果(阈值=149),从中可以看出对第1个和第2个字符的分割是不准确的,对第3个和第4个字符的分割结果是错误的。由于该图像的灰度最小值为68,灰度最大值为217,因此使用阈值从68到217对它进行序贯二值化,得到的字符个数直方图如图515(d)所示。在图515(d)中看到有2个字符个数稳定的阈值区间,当阈值在[84,146]变化时字符个数一直为6,当阈值在[153,194]变化时字符个数一直为10,因此分别使用阈值t1=84+1462=115和t2=153+1942=173进行二值化,得到的图像分割结果分别如图515(e)和图515(f)所示。 图515基于目标个数稳定性的图像分割 5.6.2基于次数关系稳定性的图像分割 基于目标能在一个较宽的阈值范围内存在的事实,本书作者在2003年提出了一种基于次数关系稳定性的图像分割方法(SplitandMerge segmentation using relation stablestate, Optical Engineering[J].2003, 42(8): 23622367),在2008年提出了目标多表象的概念(国家自然科学基金课题“基于目标区域演化分割的图像描述研究”,2008—2010,编号为60875010)。 次数关系稳定性是指采用不同的阈值对图像进行二值化时,目标区域会得到若干条轮廓线,这些轮廓或大或小,或重叠或相邻,但是处在区域边界上的像素被有效轮廓经过的次数一定大于区域内部像素被经过的次数,这种次数大于关系在光照均匀和非均匀的图像中能够保持不变。 目标的多表象是指同一个目标区域在不同的分割方法或者阈值下有着不同的边界,目标的尺寸及形状是变化的; 在某种分割方法或者阈值下的分割结果可能会是多个目标粘连在一起,而在另一种方法或者阈值下则可能会是一个目标分成了几个小的部分,故将同一个目标在不同的分割阈值或分割方式下的不同表现形式称为目标的多表象。 基于次数关系稳定性的图像分割方法首先用一系列不同的阈值对图像进行二值化,把区域面积大于ts的各条轮廓线累加到一个像素初值为零的图像中,称该图像为轮廓累积图像; 其次,对轮廓累积图像进行序贯阈值分割,即用一个区间内的值逐一作为阈值te,将轮廓累积图像分割为像素值为0的区域(小于阈值的像素)和像素值为255的区域(大于或等于阈值的像素),像素值为0的区域就是目标的一个表象。当te按由大到小顺序采用时,会得到一个个的二值图像,这些二值图像中位置基本相同的像素值为0的区域就构成了目标的多个表象。随着te越来越小,区域的面积也越来越小,区域对应的边缘强度也越来越小,区域的个数也越来越多。te与边缘强度等效。图516(a)是原始图像,图516(b)、图516(c)、图516(d)是用轮廓线表示的分割结果,分别对应te=18,te=8和te=4。 图516Man图像的基于次数关系稳定性的图像分割 图517和图518的图像尺寸都是512×512,都使用ts=50。图517(b)和图518(b)是使用Otsu阈值化的结果,图517(c)和图518(c)分别是使用te=3和te=4的轮廓累积图像阈值化结果,图517(d)和图518(d)是目标分割结果。 图517Desk图像的基于次数关系稳定性的图像分割 图518Ship图像的基于次数关系稳定性的图像分割 该方法的优点是通过对原始图像的序贯二值化,在分割结果中使用面积约束ts筛选轮廓,消除了噪声,轮廓累积形成的图像又为不同灰度值的目标筑起了隔离带,光照不均时隔离带的宽度会变大但数目不变; 通过对轮廓累积图像的序贯二值化,可以得到目标的多表象; 在单次分割时,只需要设定参数te的值,就可以得到边缘强度大于te的各个目标,与目标的灰度值无关。 该方法较巧妙地结合了灰度特征和边缘特征,且仅需要目标的面积参数ts和等效边缘强度参数te共计两个语义明确的直观参数,对灰度值不同的多类目标分割结果良好,具有较好的通用性和实用性。 5.7光照不均的消除与图像分割 图像中存在光照不均是一个普遍的问题。目标像素和背景像素的光照不均来源非常多,有的是像素到光源距离的远近不同导致的,比如在灯下就亮,远离灯光就暗; 有的是光源本身发光不均匀导致的; 有的是不同位置的像素代表的物理尺寸大小不同导致的,比如近处暗远处亮,这是因为远处场景中很大的一个区域才能变成一个像素,这个大区域的光线反射量累积成了一个像素的灰度值; 有的是因为目标本身是立体的,有着不同的表面,会产生不同方向的反射光,当目标是球体时还会产生镜面反射; 有的是强逆光或者其他的强光干扰; 有的是建筑物的遮挡、树木的阴影、云朵的影子、地面的水渍。即使图像是来自白纸黑字的纸面,也可能存在光照不均的情况,比如图54(a)。 但是,光照不均严重影响图像的阈值化。当光照不均时,A区域目标像素的灰度值可能比B区域背景像素的灰度值小,却比C区域背景像素的灰度值大。分块阈值或者自适应阈值也只是能够解决某些光照不均图像的分割,比如能够较好地分割图53(a),但无法正确分割图54(a)。 根据目标像素和背景像素的灰度值特点,估计原始图像的光照,然后在原始图像中减去光照图像,是解决图像中光照不均问题的有效方法。下面通过举例,来讲述使用高斯平滑的光照估计方法和极值滤波结合高斯平滑的光照估计方法。 5.7.1文本图像分割 在原始图像图54(a)中,既有图519(a)中横圈位置所示的亮光区,也有图519(a)中竖圈位置所示的暗光区,也有正常的光照区域。考虑到字符笔画稀疏,此时若采用大尺度的高斯平滑,则平滑后的像素灰度值会基本上不受字符的影响,可以认为平滑后的像素灰度值就代表此处的光照。对图54(a)进行高斯平滑后,得到了光照图像L,如图519(c)所示。考虑到文字是黑色的,背景是白色的,采用式(516)得到消除光照的图像,如图519(d)所示。 G(x,y)=-(g(x,y)-L(x,y)),g(x,y)<L(x,y) 0,其他(516) 图519(d)的直方图如图519(e)所示,对图519(d)采用Otsu阈值化的分割结果如图519(f)所示。在图519(b)所示的直方图中,由于光照不均,存在大量的过渡像素,因此直方图中没有明显的波谷,竖线所示位置是其得到的Otsu阈值。但是,在图519(e)所示的消除光照后的字符图像直方图中峰谷鲜明,竖线所示位置是其得到的Otsu阈值。 可以看出,图519(f)所示的分割结果明显优于图54(b)所示的全局阈值分割结果、图54(c)所示的局部阈值分割结果和图54(d)所示的自适应阈值分割结果。 图519光照不均的文本图像分割 5.7.2颗粒图像分割 第4章和本章都用到了米粒图像。图431(a)和图53(a)是原始的米粒图像,图51(a)和图55(a)是消除了光照不均的米粒图像,图56(a)是图55(a)加了噪声后的米粒图像。原始的米粒图像是存在光照不均的,图520(a)的横圈位置示意了光照最强的区域,为了显示其光照不均,对它做threshold=91的二值化,得到了如图520(b)所示的二值图像。从图520(b)中明显看到了光照不均现象和光源的位置与形状。 考虑到在米粒图像中,背景是黑色的,作为目标的米粒是白色的,而且米粒不像字符那样笔画稀疏,因此采用了最小值滤波来去掉米粒,得到了如图520(c)所示的光照图像。为了消除图520(c)中的层次感,采用高斯平滑得到了图520(d)所示的光照图像L。为了验证光照图像的正确性,对它做threshold=91的二值化,得到了如图520(e)所示的二值图像,对比图520(b),可以看到其对光照估计是正确的。采用式(517)得到了消除光照的米粒图像,如图520(f)所示。 G(x,y)=g(x,y)-L(x,y),g(x,y)>L(x,y) 0,其他(517) 图520(f)的直方图如图520(g)所示,竖线所示是其得到的Otsu阈值。对图520(f)采用Otsu阈值化的分割结果如图520(h)所示,可以看出分割结果明显优于图53(b)所示的全局阈值分割结果。 图520光照不均的米粒图像分割 图520(续) 5.8本章小结 场景未知和参数适配是影响图像分割算法通用性的两个主要原因。场景未知常表现为: 背景不是单一的,被检测目标分布在复杂的背景中; 因目标距离摄像机的远近不同,同一目标像素的灰度值随其位置不同而不同; 需要分割灰度值不同的多类目标,但不知道目标的种类数; 目标仅在图像中占很小的比例而且和背景的灰度差异不大。参数适配的难度常表现为: 需要预先设定的参数太多,参数的语义性差、不直观,参数对图像亮度和对比度有较强的依赖等。 图像分割是图像分析和计算机视觉中非常困难的问题,本章给出了一些方法和思路,希望它们能对解决实际问题提供一定的启发。近些年来随着机器学习的发展,对于已知场景,语义分割能够较好地解决一些问题。 作业与思考 5.1在什么情况下,阈值可以取为直方图中两个最大波峰对应灰度值的均值? 5.2用C/C++语言编程实现H0501Gry.bmp(见图521)的直方图求取、Otsu阈值的求取和二值化。 图521H0501Gry.bmp 5.3设题5.2中得到的直方图为H1,得到的阈值为t1。用C/C++语言编程实现对H1进行相邻5个数据的平滑,得到H2,使用H2求取Otsu阈值,得到t2。t2约等于t1吗? 5.4设题5.2中得到的直方图为H1,得到的阈值为t1。用C/C++语言编程实现将H0501Gry.bmp中的灰度值除以4后统计直方图,得到H2,使用H2求取Otsu阈值,得到t2。t2约等于t1/4吗? 5.5平板扫描器扫描了一张A4纸(210mm×297mm)的图像,该纸上有若干炭笔涂鸦的线条,该图像的32个灰度级的直方图数据如下,涂鸦的总面积是多少平方毫米? [0 0 278 1791 369 356 415 463 562 421 373 372 374 286 298 357 344 313 0 0 365 414 435 453 541 729 1394 15662 27054 7462 489 0] 5.6在射击训练的视频靶中,摄像机通过拍摄靶子的图像来判定弹着点情况。由于靶纸在背板上张贴不平,在室外光线的照射下,靶子图像的背景并不均匀,很难通过全局图像分割来可靠地找出弹孔; 还会存在两发子弹形成的弹孔基本重叠的情况。下面是靶子图像的同一个局部区域在连续4次拍摄中的32个灰度级直方图数据,试判定每次拍摄中是否有新子弹射中该区域。假设灰度值越低越是弹孔。 第1帧 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 157 439 346 52 20 2] 第2帧 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 173 579 233 31 0 0 0 0 0] 第3帧 [0 0 0 19 4 1 8 3 4 2 0 2 1 4 3 2 11 0 0 0 30 119 360 293 98 36 12 6 4 2 0 0] 第4帧 [ 0 0 0 5 15 24 19 9 16 19 14 22 52 113 309 207 123 29 10 16 9 6 1 0 0 0 3 2 0 1 0 0] 5.7二维直方图、边缘强度反比加权直方图、边缘强度正比加权直方图、等量像素法直方图各有什么特点?各自适合在什么情况下使用?在什么情况下不宜使用? 5.8用C/C++语言编程实现H0502Gry.bmp(见图522)的环线和弹孔的分割,要求采用光照估计+图像减法+Otsu阈值法、多次分割法、聚类分割法3类方法,并对这3类方法的效果进行比较和分析。 5.9用C/C++语言编程实现H0501Gry.bmp(见图521)的k均值聚类,k=2; 实现H0502Gry.bmp(见图522)的k均值聚类,k=3和k=8; 给出聚类分割后的图像,并进行分析。 图522H0502Gry.bmp