赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 图像处理与人工智能

首页 > 专业技术 > 图像处理与人工智能 > 图像边缘提取和图像分割
图像边缘提取和图像分割
  1. 图像边缘检测:
  2. 图像分割:

一、图像边缘检测:

边缘检测算子用来检查每个像素的邻域,并对灰度变化进行量化,通常也包括方向的确定,有多种方法,其中大多数是基于方向导数掩模求卷积,最简单的边缘检测方法是对图像按像素的某区域构造边缘检测算子,常用的边缘检测算子一般分为4邻域和8邻域。
图像的边缘是图像的最基本特征,边缘点是指图像中周围像素灰度有阶跃变化或屋顶变化的那些像素点,即灰度导数较大或极大的地方。边缘检测的目的是标识图像中亮度变化明显的点。

1. 基于一阶导数的边缘检测算子:

对于离散的二维函数f(i,j),可以用有限差分作为梯度幅值的近似,但其中包括平方和开方,不方便运算,一般近似为绝对值形式:
有限差分作为梯度幅值近似的绝对值形式
常用的算子包括Roberts算子、Sobel算子、Prewitt算子等。Roberts算子利用局部差分寻找边缘,边缘定位精度高,但容易丢失一部分边缘,不具有抑制噪声能力,对具有陡峭边缘且含噪声少的图像效果较好。Sobel算子和Prewitt算子都考虑了邻域信息,相当于对图像先做加权平滑,然后再做微分运算,只是平滑权值不同,对噪声有一定抑制能力,但不能完全排除检测结果中有虚假边缘,检测出的边缘容易出现多像素宽度。
对于阶跃状边缘图像,在边缘点其一阶导数取极值,因此对图像的每个像素取它的梯度值,也即x和y方向的相邻像素点差值的平方和的平方根:
相邻像素点差值的平方和的平方根
适当取门限Tg,来判断梯度值是否大于门限来确定是否处于边缘。
1)Roberts边缘算子:
Roberts边缘算子利用局部差分算子寻找边缘:
Roberts边缘算子
或者
Roberts边缘算子
后面的算式是前面算式的近似。
实际使用中,常采用一种近似梯度----Robert交叉梯度:
Robert交叉梯度
Robert交叉梯度对应的模板为:
Robert交叉梯度模板
其中,w1对接近45°边缘有较强响应,w2对接近-45°边缘有较强响应。
Roberts边缘算子模板为:
Roberts边缘算子模板
有时也称模板为卷积核,计算过程为将被模板覆盖的像素与模板对应位置处的数据先相乘再求和。数字图像处理中的模板有两种表示方法,一种是填充数字的方格,一种是矩阵,算法上是一致的。
2)Sobel边缘算子:
对于阶跃状边缘图像,Sobel提出一种检测边缘点的算子。对数字图像的每一个像素考察它上下左右相邻点灰度的加权差,与之接近的邻点权重大,定义Sobel算子为:
Sobel算子定义
Sobel算子有两个卷积核,图像中的每个点都用这两个核做卷积。通常,一个核对垂直边缘响应最大,而另一个核则对水平边缘响应最大。两个卷积的最大值作为该点的输出值,运算结果是一幅边缘幅度图像。
用户滤波时一般喜欢奇数尺寸的模板,因而更加常用Sobel模板。sx和sy的模板分别为:
Sobel模板
Sobel算子采用两列或两行像素灰度加权和的差值来表示,对噪声有一定平滑作用。Sobel算子的定义有多种:
区分水平和垂直方向的Sobel算子分别定义为:
Sobel算子
考虑水平和垂直两方向的Sobel算子定义为:
Sobel算子
水平和垂直两方向取较大者的Sobel算子定义为:
Sobel算子
适当取阈值,判断得到的值是否大于等于阈值,若是则为阶跃状边缘点,所有边缘点的集合构成边缘图像。
3)Prewitt边缘算子:
Prewitt提出了类似的计算偏微分估计值的方法,梯度计算算法为:
Prewitt梯度计算算法
其卷积模板为:
Prewitt卷积模板
当用两个模板组成边缘检测器时,通常取较大的幅度作为输出值,这使得对边缘的走向比较敏感。取它们的平方和之后的开平方,可以获得性能更一致的全方位的响应,与真实的梯度值更接近。另一种方法是将Prewitt算子扩展到8个方向:
Prewitt卷积模板
这些算子模板由理想的边缘子图像构成,依次用边缘模板取检测图像,与被检测区域最为相似的模板给出最大值,用这个最大值作为算子的输出值,这样可以将边缘像素检测出来。采用Prewitt算子不仅能够检测边缘点,而且可以抑制噪声的影响。
4)Kirsch算子:
8个卷积核组成了Kirsch边缘算子。图像中的每个点都用8个模板进行卷积,每个模板对某个特定边缘方向做出最大响应。所有8个方向中的最大值作为边缘幅度图像的输出,最大响应模板的序号构成了对边缘方向的编码。
Kirsch算子卷积模板
上述模板分别为0°、45°、90°、135°、180°、225°、270°、315°的Kirsch算子模板。
5)Robison模板:
Kirsch算子卷积模板

2. 基于二阶微分的边缘检测算子:

1)拉普拉斯边缘算子:
Laplace算子公式为:
Laplace算子公式
对于阶跃状边缘,二阶导数在边缘点出现零交叉,即边缘点两旁二阶导数取异号。据此,对数字图像的每个像素,取它关于x轴方向和y轴方向的二阶差分之和:
离散拉普拉斯算子Laplacian的计算公式
上式为离散拉普拉斯算子Laplacian的计算公式,这是一个与边缘方向无关的边缘检测算子,其中使用了像素的4个邻近像素来计算,为4邻域的拉普拉斯算子。
对应的滤波模板为:
拉普拉斯算子滤波模板
因为在锐化中,绝对值相同的正值和负值实际上表示相同的响应,故上面两模板等同。拉普拉斯算子对于接近水平和接近垂直方向的边缘都能检测。
对于屋顶状边缘,在边缘点的二阶导数取最小值。对数字图像的每一个像素,取它的关于x轴方向和y轴方向的二阶差分之和的相反数,即拉普拉斯算子的相反数:
拉普拉斯算子的相反数
如果再考虑45°和135°方向,加入对角线像素后得到8邻域的拉普拉斯算子:
8邻域的拉普拉斯算子
8邻域拉普拉斯边缘算子模板和扩展模板为:
8邻域拉普拉斯边缘算子模板
上面模板对于45°旋转各向同性。以高斯平滑模板思想,根据到中心点的距离给模板的点赋予不同的权重,得到模板:
加权8邻域拉普拉斯边缘算子模板
锐化使用时,图像为原图像减去拉普拉斯算子运算结果的k倍:
图像锐化拉普拉斯算子运算
2)高斯-拉普拉斯算子:
拉普拉斯算子对噪声敏感,且会产生双边缘,边缘方向不可检测,为了弥补其缺陷,在拉普拉斯算子之前先进行高斯低通滤波,称为LOG算子,也称Marr-Hildreth边缘检测算子。
LOG算子
将图像与2D高斯函数的拉普拉斯算子相卷积:
LOG算子
其中,σ是高斯分布的标准差。令x2+y2=r2,对r求二阶导数,得到:
LOG算子
这是一个轴对称函数,在r=±σ处有过零点,在|r<σ|时为负。这个函数也称马尔算子,算子的平均值为零,将它与图像卷积不会改变图像的整体灰度范围。由于马尔算子相当光滑,将其与图像卷积会模糊图像,且模糊程度正比于σ。当边缘模糊或噪声过大时,利用马尔算子检测过零点能提供较可靠的边缘位置,但计算复杂度较大。将LOG算子绕y轴旋转一周后,很像一顶墨西哥草帽,所以也称为墨西哥草帽滤波器。
LOG常用的5x5模板为:
LOG算子5x5模板
LOG算子克服了拉普拉斯算子抗噪声差的缺点,但在抑制噪声的同时也可能将原有的比较尖锐的边缘也平滑掉了,造成这些尖锐边缘无法检测到。拉普拉斯算子会产生双边缘,解决的方法是利用它对阶跃性边缘的零交叉性质来定位边缘。
作为滤波器,通常使用的LOG算子是一个5x5模板:
LOG算子5x5模板
将Sobel算子与LOG算子结合形成修正LOG算子,就是取较小阈值的Sobel算子作为边缘检测的前提条件,然后进行LOG的边缘检测,可得到较好的结果。
LOG算子首先用高斯函数对原始图像平滑,然后采用Laplacian算子进行边缘检测,可以根据二阶导数的过零点来检测图像的边缘,使其精度明显提高。实际应用中,一般先用Laplacian算子对图像进行滤波,然后再确定滤波处理后图像零交叉点的位置。由于Laplacian算子有无限长的拖尾,在卷积时应取有限长,一般取N×N的窗口,在窗口中进行卷积,一般取N≈3σ即可获得好的锐化效果。
在数字图像中实现图像与模板卷积运算时,运算速度与选取的模板大小有直接关系,模板越大,检测效果越明显,速度越慢,反之效果差一点,但速度提高很多。在不同的条件下选取不同大小的模板。实际计算时,还可以通过分解的方法提高运算速度,即把二维滤波器分解为独立的行、列滤波器。
LOG算子是根据图像的信噪比来得到边缘信息的最优滤波器,它将高斯平滑滤波和拉普拉斯锐化滤波结合起来,因引入了平滑滤波,有效去除服从正态分布的噪声,对噪声的抑制和边缘的检测两方面来综合。LOG算子是唯一具有可分离性和旋转不变性的二阶微分算子,由于与人类视觉的数学模型非常相似,因此在图像处理领域应用很广。

3. Canny边缘算子:

Canny边缘算子是近年来在数字图像处理中广泛应用的边缘算子,这是使用变分原理推导出的一种用高斯模板导数逼近的最优算子。通过Canny算子,可以计算出数字图像的边缘强度和边缘梯度方向,为后续边缘点的判断提供依据。
1)Canny边缘检测:
Canny算子用泛函求导方法推导出高斯函数的一阶导数,即为最优边缘检测算子的最佳近似。由于卷积运算可交换、可结合,故Canny算法首先采用二维高斯函数对图像进行平滑。传统Canny算法利用一阶微分算子来计算平滑后图像各点处的梯度幅值和方向,获得相应的梯度幅值图像和梯度方向图像。点(i,j)处两个方向的偏导数分别为:
Canny边缘检测
则此点处的梯度幅值和方向分别表示为:
Canny边缘检测
为了精确定位边缘,必须细化梯度幅值图像C中的屋脊带,只保留幅值的局部最大值。Canny算法在梯度幅值图像中以点(i,j)为中心3x3的邻域内沿梯度方向进行插值,若此点处的梯度幅值大于方向上与其相邻的两个插值,则将此点标记为候选边缘点,反之标记为非边缘点。
传统的Canny算法采用双阈值法从候选边缘点中检测和连接出最终的边缘。首先选取高阈值Th和低阈值Tl,然后开始扫描图像。对候选边缘图像中标记为候选边缘点的任一像素点进行检测,若点的梯度幅值高于高阈值,则认为该点一定是边缘点;若点的梯度幅值低于低阈值,则认为该点一定不是边缘点。而对于梯度幅值处于两个阈值之间的像素点,则将其视为疑是边缘点,再进一步依据边缘的连通性对其进行判断,若该像素点的邻接像素中有边缘点则认为该点也为边缘点,否则认为非边缘点。
2)Canny边缘检测算法步骤:
  ⑴  高斯滤波平滑处理:由于图像中存在高斯噪声,要先进行高斯滤波。
  ⑵  梯度计算:使用一阶导数进行梯度计算,一般用sobel模板,计算灰度图像在水平和垂直方向上的导数GX和GY,得到梯度向量(GX,GY),最后得到该像素点的梯度幅度和相位角:
像素点的梯度幅度和相位角
  ⑶  非极大值抑制:将当前像素的梯度值与其在梯度方向上的邻域像素的梯度值做对比,如果当前像素的梯度值为最大值则保留,否则删除或将像素值置为0。
  ⑷  双阈值边缘检测和边缘连接:设定两个阈值,一般高阈值为低阈值的2.5倍。然后进行判断,梯度大于高阈值的一定是边缘点,像素值置255;梯度小于阈值的一定不是边缘点,像素值置0;介于高低阈值之间的,如果其像素点周围8邻域梯度值都小于高阈值则不是边缘点,像素值置0,否则置255。
Canny边缘检测算子对受白噪声影响的阶跃状边缘检测是最优的。Canny算子可以近似为标准差为σ的高斯平滑滤波器的一阶微分,因此可以实现边缘检测误差小于20%,这与LOG边缘检测算子很相似。
Canny算子试图在抗噪声干扰和精确定位之间寻求最佳折中方案,提出三个准则:
  ·  信噪比准则:使信噪比SNR尽量大,输出信噪比越大错误率越小
  ·  定位精度准则:寻求滤波函数使loc尽量大
  ·  单边缘响应准则:对同一边缘要有低的响应次数
有了以上准则,寻求最优滤波器的问题转化为泛函的约束优化问题,问题的解可以由高斯的一阶导数去逼近。
Canny边缘检测的基本思想就是首先对图像选择一定的Gauss滤波器进行平滑滤波,然后采用非极值抑制技术进行处理得到最后的边缘图像。

4. 边缘检测算子的对比:

数字图像处理中,对边缘检测算法的主要要求是运算速度快、边缘定位准确、噪声抑制能力强。运算速度方面,对于NxN图像,各种算子计算量如表:

算子 加法运算 乘法运算
Roberts算子 3×N×N 0
Sobel算子 11×N×N 2×N×N
Prewitt算子 11×N×N 0
Kirsch算子 56×N×N 16×N×N
Laplacian算子 4×N×N N×N
LOG算子 运算量大,具体看所取卷积模块的大小
Canny算子 运算量大,具体看所取卷积模块的大小
可以看出,Kirsch算子、LOG算子和Canny算子的运算量比较大。
在边缘检测中边缘定位能力和噪声抑制能力是一对矛盾,其中有的边缘定位能力强,有的抗噪声能力比较好。
Roberts算子利用局部差分寻找边缘,边缘定位精度较高,但容易丢失一部分边缘信息。因为没有经过图像平滑计算,所以不能抑制噪声。该算子对边缘陡峭的低噪声图像响应最好。
Sobel算子和Prewitt算子都对图像进行差分和滤波运算,只是平滑时的权值不同,对噪声具有一定的抑制能力,但不能完全排除检测结果中出现的伪边缘。这两个算子边缘定位比较准确和完整,对灰度渐变和具有噪声图像处理效果较好。
Kirsch算子对8个方向边缘信息进行检测,因此具有较好的边缘定位能力,并且对噪声有一定的抑制作用。在边缘定位和抗噪声能力方面效果比较理想。
Laplacian算子为二阶微分算子,对图像中的阶跃状边缘定位准确且具有旋转不变性,无方向性。但该算子容易丢失一部分边缘的方向信息,造成一些不连续的检测边缘,同时抗噪声能力比较差,比较适用于屋顶状边缘的检测。
LOG算子首先通过高斯函数对图像做平滑处理,因此对噪声抑制作用明显,但同时有可能将原有的边缘也平滑了,造成某些边缘无法检测到。同时,高斯函数中方差σ的选择对图像边缘检测效果有很大影响,σ越大检测到的图像细节越丰富,但对噪声抑制能力相对下降,易出现伪边缘;反之,抗噪声性能提高,但边缘定位准确性下降,易丢失许多真边缘。因此,对不同的图像应选择不同的参数。
Canny算子也采用高斯函数对图像进行平滑,具有较强的去噪能力,也同样容易平滑掉一些边缘信息。其后采用的一阶微分算子的方向性比LOG算子要好,因此边缘定位准确性较高。这是传统边缘检测算子中效果较好的算子之一。

二、图像分割:

一幅图像往往由众多的目标组成,也就是图像中的众多区域。在获取图像后要对复杂的景物进行分解,变成一系列的目标或区域,直至最终形成基元,这个过程称为图像分割。图像分割的目的是为了识别和理解图像,分解主要根据图像中存在的边缘、纹理、形状、目标表面主方向等特征。对一幅图像中感兴趣的部分通常称为前景,剩下的部分称为背景。图像分割就是借助图像特征信息,将图像划分成一些有意义的区域。
图像分割算法一般基于图像灰度的不连续性或其相似性。不连续性是基于图像灰度的不连续变化分割图像,例如图像的边缘,有边缘检测、边界跟踪等算法;相似性是依据事先制定的准则将图像分割为相似的区域,如阈值分割、区域生长等。
图像分割也可以理解为将图像中有意义的特征区域或者需要应用的特征区域提取出来,这些特征区域可以是像素的灰度值、物体轮廓曲线、纹理特征等,也可以是空间频谱或直方图特征等。由于不同种类的图像,不同的应用场合,需要提取的图像特征是不同的,对应的图像特征也不同,并不存在一种普遍适应的最优方法。
图像分割可以分为基于边界的分割方法和基于区域的分割方法,基于边界的分割法有微分算子法、串行边界技术等;基于区域的分割方法包括阈值分割法、区域生长和分裂合并法、聚类分割法等。可以把基于区域和基于边界的分割法结合起来使用。
根据物体的边缘来分割图像,就要先检测每个像素及其邻域的状态,以判断该像素是否确实处于一个物体的边缘上。当目标和背景的边缘清晰时,称为阶跃边缘;当目标和背景的边缘渐变时,称为屋顶状边缘。根据不同的边缘选择不同的边缘检测算子对图像进行边缘检测。
基于边缘的图像分割包括微分算子法、曲面拟合法、Hough变换法,其中微分算子法又包括Robert算子、Prewitt算子、Sobel算子、Kirsch算子、拉普拉斯算子等。
基于区域的图像分割包括阈值法、区域生长和分裂法、聚类等,其中阈值法又包括最小误差阈值法、迭代阈值法、最大熵阈值法、最大类间方差阈值法。
基于特定理论图像分割包括模糊理论、形态学、统计学、形变模型、图论模型等。

1. 边缘检测分割法:

利用图像的一阶导数的极值或二阶导数的过零点信息来提取边缘。典型的一阶导数边缘算子有Roberts算子、Sobel算子、Prewitt算子、Krisch算子等,而Laplacian算子及Gauss-Laplacian算子属于二阶导数边缘算子。
边缘检测分割方法是设法通过检测提取出闭合边界,实现对目标区域与背景区域的分割。边缘检测分割方法针对目标像素点与背景像素点在灰阶特征差异无法区分的情况下使用。
1)加权梯度直方图分割方法:
用梯度算子作用于原图像,计算出像素的梯度值。由于目标和背景内部的像素具有较低的梯度值,而其边界具有较高的梯度值,因此可以通过对图像中梯度值的统计来进行阈值分割。
加权梯度直方图的设计思路是,通过对梯度分布进行加权修正,增大直方图的分布细节,一般采用的方法是,对高梯度区加较大的权值,以减小均匀区域内像素点对直方图的贡献,增加边界上的点对直方图的贡献。
2)复差分边缘检测分割方法:
对于复杂图像来说,仅以灰度跃变为边缘提取的依据时,会导致对于纹理复杂的场景无法获得有效的图像分割。复差分的概念是,将待处理像素点与所定义的邻域像素间的灰阶差形成一个差分矢量,作为表征该像素点的边缘信息。由于差分矢量包含多个差分值,因而称为复差分,复差分值会构成维度较大的特征向量,可能需要使用神经网络来训练学习判别。
3)综合边缘检测分割方法:
是指采用两种以上的方法获得不同的边界信息,通过对不同边界信息的综合,最终获得所需的要的结果。

2. 阈值分割法:

利用灰度阈值变换分割图像就是阈值分割。阈值分割的基本思想是确定一个阈值,利用要提取的目标物体和背景在灰度上的差异,把像素点的灰度值和阈值比较,根据比较的结果把该像素划分为前景和背景。阈值分割有根据直方图谷底确定阈值、迭代选择阈值、最小均方差法、最大类间方差法等。
1)直方图峰谷法:
当图像的直方图为双峰分布时,表明图像的内容大致分为两个部分,分别为灰度分布的两个山峰附近,选择阈值为两峰间的谷底点,即可把图像主体从图像中分割出来。
2)p参数阈值方法:
p参数阈值法是针对预先已知图像中目标物所占比例的情况下,所采用的一种简单且有效的方法。p参数法的基本思路是,选择一个阈值Th,一定可以使前景目标物所占的比例为p,背景所占比例为1-p。
此方法对已知物体的图像占比的阈值分割很有效,比如对印章的分割,印章占比15.07%,就可以使用这个p值进行阈值分割。
3)均匀性度量法:
假设图像被分为目标物和背景两个类别,属于同一类别内的像素值分布应具有均匀性。一般采用方差来衡量像素间的均匀性,算法步骤为:
  ·  给定一个阈值Th,将图像分为C1和C2
  ·  分别计算两类中的方差σ1和σ2
均匀性度量法阈值分割
其中,NCi为第i类中的像素个数。
  ·  分别计算两类在图像中的分布概率p1和p2
均匀性度量法阈值分割
其中,Nimage为图像中的像素总数。
  ·  选择最佳阈值使得图像按照该阈值分为C1和C2两类后,满足:
均匀性度量法阈值分割
4)类间最大距离法:
在某个适当的阈值下,图像分割后的前景目标与背景两个类之间的差异最大为最佳分割,一般使用两个类别中心与阈值之间的距离差来度量。具体步骤为:
  ·  给定一个阈值Th,将图像分为C1和C2两类
  ·  分别计算两类的灰度均值u1和u2
  ·  计算相对距离度量值S:
类间最大距离法阈值分割
  ·  选择最佳阈值Th,使得图像按照该阈值分为C1和C2两类后,满足:
类间最大距离法阈值分割
5)最大熵阈值法:
熵是信息论中对不确定性的度量,是对数据中所包含信息量大小的度量。熵取最大值时,就表明获得的平均信息量为最大。
设一些事件以概率p1、p2,...,ps发生,则这些事件发生的信息量,即熵定义为:
最大熵阈值法图像分割
由于p1+p2+...+ps=1,可以证明p1=p2=...=ps时熵取最大值。
熵最大方法是选择适当的阈值将图像分为两类,两类的平均熵之和为最大时,可从图像中获得最大信息量,以此来确定最佳阈值。具体步骤为:
  ·  求出图像中所以像素值的分布概率p0,p1,...,p255
最大熵阈值法图像分割
其中,Ni为灰度值为i的像素个数,Nimage为图像中的像素总数。
  ·  给定一个阈值Th,将图像分为C1和C2两类
  ·  分别计算两个类的平均相对熵:
最大熵阈值法图像分割
其中,
最大熵阈值法图像分割
6)类间/类内最大方差比阈值分割:
从统计意义上来讲,方差是表征数据分布不均衡的统计量,要通过阈值对两类问题进行分割,适当的阈值使得两类数据间的方差越大越好,表明该阈值的确将两类不同的问题区分开了,同时希望属于同一类问题的数据之间的方差越小越好,表明同一类问题具有一定的相似性,因此可以采用类内/类间方差比来作为选择阈值的评价参数。具体步骤:
  ·  求出图像中所以像素值的分布概率p0,p1,...,p255
类间/类内最大方差比阈值分割
其中,Ni为灰度值为i的像素个数,Nimage为图像中的像素总数。
  ·  给定一个阈值Th,将图像分为C1和C2两类
  ·  计算两类的方差和灰度均值,以及图像的总体灰度均值
  ·  计算两类问题的发生概率P1和P2
类间/类内最大方差比阈值分割
  ·  计算类间方差和类内方差:
类间/类内最大方差比阈值分割
  ·  选择最佳的阈值Th,使得图像按照该阈值分为C1和C2两类后,满足:
类间/类内最大方差比阈值分割
Otsu法,就是使用类间方差最大来自动确定阈值,通过先逐点扫描整幅图像,统计从0~255这256个灰度级分别对应的像素点个数,遍历每一个灰度值,计算此时低于此阈值的组和高于此阈值的组的均值和概率,并计算两组间的方差。循环中的最大方差所对应的阈值就是最佳阈值。利用最佳阈值对图像进行分割,小于阈值设为0,大于阈值设为255。
7)均值聚类阈值法:
是采用模式识别中的k均值聚类方法的思路,以类内保持最大相似性及类间保持最大距离为目标,通过迭代优化,获得最佳的图像分割阈值。具体步骤:
  ·  给定一个初始的代表两个类别C1和C2的中心灰度u1和u2,两类方差σ1和σ2
  ·  进行分类处理,对某个像素,若:
均值聚类阈值法图像分割
则f(x,y)∈C1,否则f(x,y)∈C2
  ·  对C1和C2中的所有像素分别重新计算其均值u1和u2,同时计算两类的方差σ1和σ2
  ·  如果:均值聚类阈值法图像分割的值小于上次计算的值,则返回分类处理,否则结果为最终输出
8)局部阈值法:
局部阈值法是用于解决画面光照不均问题而提出的。将整幅图像等分成若干个子块,对每个子块独立按照全局阈值的方法分别计算其分割阈值,然后分别对子块进行分割处理,最终获得整幅图像的分割结果。
9)二次定值法:
先取T=g+delta,其中g为灰度最黑值,delta为经验值,进行第一次扫描,根据T区分前景或背景,再分别求对应T的前景和背景的平均值F和B,得出二值化阈值为(F+B)/2。
10)灰度-局部灰度均值散布图法:
以图像的灰度为横轴,局部灰度均值(如3x3模板下的均值)为纵轴,构造一个图像分布的散布图。对于对角线上的点分布,对应于目标或者背景内部的点,对于离开对角线的点则对应于区域边界上的点。具体步骤:
  ·  给定一个阈值Th=(Th(x),Th(y)),将图像分为C1和C2两类
  ·  按照均匀性度量方法,或其他灰度分布阈值的评价方法,获得最佳阈值Th*
11)二维熵阈值法:
采用二维熵来度量像素及其邻域中像素之间的信息相关性。度量邻域相关信息,最简单、有效的方法是以一定模板中的像素灰度均值来描述。当空间相关信息量最大时,认为是最佳阈值。具体步骤:
  ·  对某一像素计算其联合概率p(i,j):
二维熵阈值法图像分割
其中,Nij为图像中,像素灰度值为i模板中像素均值为j的像素个数,Nimage为图像的总像素数。
  ·  给定一个阈值Th,将图像分为C1和C2两类
  ·  分别计算两个类的平均相对二维熵:
二维熵阈值法图像分割
  ·  选择最佳阈值Th,使得图像按照阈值分为C1和C2两类后,满足:
二维熵阈值法图像分割
12)自适应阈值分割:
选取一个窗口,寻找窗口内的最大值和最小值,并取二者的平均值作为阈值,或者使用窗口内的所有像素的平均值作为阈值。
可以使用迭代方法计算阈值:先选图像的平均灰度作为阈值,把图像分成两组,再计算两组的平均灰度u1和u2,然后选择新阈值为(u1+u2)/2。循环上述步骤,直到两组的平均灰度值u1和u2不再发生改变,那么就获得了所需要的阈值。
13)自适应局部阈值法:
以一个像素点为中心设置大小s×s的滑窗,滑窗扫过整个图像,每次扫描均对窗口内的像素求平均值并将均值作为局部阈值。若窗口中的某一像素值低于局部阈值t/100,赋值为0,高于局部阈值t/100,赋值255。因为涉及多次对有重叠的窗口进行加和计算,在每个位置存储其左边和上方所有f(x,y)值的总和:
自适应局部阈值法
对于任意从左上角(x1,y1)到右下角(x2,y2)的矩形内的数值总和可以计算:
自适应局部阈值法
还有一种Niblack算法,也是使用窗口中局部阈值,但不仅考虑区域内的均值和方差,还考虑设定的修正系数k:
Niblack算法
其中,T(x,y)为阈值,m(x,y)和s(x,y)分别代表均值和标准差,与m(x,y)相近的像素点判为背景,反之则判为前景,而相近程度由标准差和修正系数决定。
Sauvola算法针对文档二值化处理,是在Niblack算法基础上改进:
Sauvola算法
其中,R为标准差的动态范围,若为8位灰度图像为128。在处理光线不均匀或染色图像时拥有更好表现,因为自适应放大了标准差s的作用。

3. 边界分割法:

1)轮廓提取:
获得图像的外部轮廓特征。对于一幅背景为白色、目标为黑色的二值图像,如果在图中找到一黑色点,且它的8邻域也均为黑色,就为目标点内部点,置为白色,否则保持黑色,为边界点。
2)边界跟踪:
从图像中的一个边界点出发,根据某种探测准则,搜索出目标物体轮廓上的其他像素点,直至回到起始边界点为止,从而跟踪出目标边界。

4. 区域检测分割方法:

根据特定区域的特性,将该区域从图像中分割出来。
1)基于Hough变换的分割方法:
Hough变换最早是1962年由Paul Hough以专利形式提出,其实质是一种从图像二维空间到参数空间的映射,能够将图像空间难以解决的问题在参数空间很好地解决。
Hough变换最初解决的问题是在两个笛卡尔坐标系之间检测图像空间中的直线,通过将直线的截距与斜率映射到参数空间,成为一个特定的点,参数空间的这个点就能够唯一地代表原图像空间的一条直线。这种映射将原图像中待检测的图形变换为参数空间中的一个峰值,这样就把原图像中特定图形的检测问题变成筛选参数空间中峰值的问题,这对提取直线很有意义。
以后时期,对Hough变换提出一些改进。Duda改变Hough变换的映射形式,将图像空间中的点映射到ρ-θ参数空间,使图像空间的点对应着参数空间的正弦曲线,可以适应任何参数形式下的直线提取和检测。1981年,Ballard提出广义Hough变换,该算法可以检测任何形状的物体,在适用范围上获得补足。根据Hough变换计算率低及占用较大存储空间问题,Davis于1982年提出分层Hough变换,Kannan于1990年提出快速Hough变换,Xu Lei提出高效快速随机Hough变换,通过对图像边缘检测出的边缘点采取随机抽样方法降低传统Hough变换的计算复杂度与空间占用率。1991年Kiryati提出概率Hough变换,可以利用一个小的随机窗口选择性进行Hough变换,代替传统Hough变换中对图像空间像素的遍历。E. J. Austin提出自适应Hough变换,在并行算法基础上加入自适应算法,有更高计算效率和鲁棒性;Yuen提出的改进提高了传统Hough变换的计算精度。
如果已知图像中待分割的目标区域是由直线、曲线、圆等形状的曲线构成,则对目标区域的分割问题转化为曲线的检测问题。对曲线检测的一种非常有效的方法是Hough变换。
① 基于Hough变换的直线检测:
Hough变换的基本原理是利用点与线的对偶性,通过曲线表达形式把原图像空间的曲线变为参数空间的一个点,这样就把图像空间中的检测问题转化为寻找参数空间中点的峰值问题。
通过使用直线的截距式方程,可以把x-y平面和k-b平面进行线-点对偶,x-y坐标平面中点对应于k-b平面中的线,而k-b平面中的点则对应x-y平面中的线。
因为y=kx+b形式的直线方程无法表示x=c形式的直线,采用极坐标方程:
ρ=xcosθ+ysinθ
这样,原图像空间上的点就对应到参数空间ρ-θ平面上的一条曲线上;而极坐标ρ-θ上的点,对应于直角坐标x-y中的一条直线,而且是一一对应的。为了检测出直角坐标x-y中由点所构成的直线,可以将极坐标ρ-θ量化成若干个等间隔的小格,这些网格对应一个计数序列。根据直角坐标中每个点的坐标(x,y),按上述原理在ρ-θ平面上画出对应曲线,凡是这条曲线所经过的小格,对应的计数阵列元素加1。当直角坐标中全部点都变换后,对小格进行检验,计数值最大的小格(ρ,θ)值对应于直角坐标中的直线即为所求直线。
直线是图像的基本特征之一,一般物体平面图像的轮廓可近似为直线与弧的组合,因此对物体轮廓的检测和识别可以转化为对这些基元的检测与提取,另外,在运动图像分析和统计领域,也可以采用直线对应法实现刚体旋转量和位移量的测量。
也就是说Hough变换是建立一种点-线的对偶关系,使得图像在变换前为图像空间,而变换后为参数空间,通过参数在空间上的分布情况,对已知形状的曲线进行检测。
检测直线的Hough变换是一种线描述方法,可以将图像空间中用直角坐标表示的直线变换为极坐标空间中的点。图像空间的直角坐标中,经过点(x,y)的直线可表示为:
y=ax+b
上式可以变换为:
b=-ax+y
如果用ρ代表原点距直线的法线距离,θ为该法线与x轴的夹角,可用如下参数方程表示该直线:
ρ=xcosθ+ysinθ
在直角坐标系中通过公共点的一簇直线,映射到极坐标系中便是一个点集;反之,在xy直角坐标系中共线的点映射到ρθ极坐标便成为共点的一簇曲线。Hough变换使不同坐标系中的县和点建立了一种对应关系。
Hough变换的性质为:
  ·  通过xy平面域上一点的一簇直线,变换到极坐标变换域ρθ平面时,将形成一条类似正弦状的曲线
  ·  ρθ平面上极坐标变换域中的一点,对应于xy域中的一条直线
  ·  xy平面域中一条直线上的n个点对应ρθ平面上极坐标变换域中经过一个公共点的n条曲线
  ·  ρθ平面上极坐标变换域中一条曲线上的n个点对应于xy平面域中过一公共点的n条直线
可以用Hough变换提取检测直线。通常将xy称为图像平面,ρθ称为参数平面。提取直线的Hough变换可以概括为:
  ·  在ρ和θ合适的最大值和最小值之间建立一个离散的参数空间
  ·  建立一个累加器A(ρ,θ),并置每个元素为0
  ·  在ρθ参数空间,对每一点做Hough,计算出网络上所有点的(ρ,θ)值,并在相应的累加器加1
  ·  累加结束后,根据A(ρ,θ)的值就可以知道有多少点是共线的,即A(ρ,θ)的值就是在 (ρ,θ)处共线点的个数。同时,(ρ,θ)值也给出了直线方程共线点共线的参数,由此可得到点所在的线。
Hough变换的策略是,由图像空间中的边缘数据点去计算参数空间中的参考点的可能轨迹,并在一个累加器中给计算出的参考点计数,最后选出峰值。Hough变换的主要优点是受共线点的间隙和噪声影响较小,但运算量较大,容易将不属于直线的点也连接到直线上。可以通过把图像划分小块,对各块图像利用Hough变换提取直线,然后再将各直线连接起来,以减少计算量。
可以将此思想推广到检测曲线,例如对圆的检测,参数空间增加到三维,对参数空间适当量化,得到一个三维的累加器阵列,并计算图像每点强度的梯度信息得到边缘,再计算与边缘上的每一个像素(xi,yi)距离为圆半径r的所有点,同时将相应立方小格的累加器加1。当检测完毕,对三维阵列的所有累加器求峰值,其峰值小格的坐标就对应着图像空间圆形边界的圆心。
在实际图像由于噪声和光照不均等因素,使得很多情况下获得的边缘点是不连续的,也必须通过边缘连接转换为有意义的边缘。Hough变换是一个非常重要的检测间断点形状的方法,通过将图像坐标空间变换到参数空间来实现直线和曲线的拟合。
② 基于Hough变换的曲线检测:
Hough变换也适应于方程已知的曲线检测。已知图像坐标中一条已知的曲线方程,可以建立其对应的参数空间,这样图像坐标空间中的一点在参数空间就可以映射为相应的轨迹曲线或曲面。若参数空间中对应各个间断点的曲线或者曲面能够相交,就能够找到参数空间的极大值以及对应的参数;若参数空间中对应各个截断点的曲线或者曲面不能相交,则说明间断点不符合某已知曲线的要求。
Hough变换时,最主要的是写出图像坐标空间到参数空间的变换公式。例如圆的方程:
圆的方程
其中,(a,b)为圆心坐标,r为圆的半径。那么,参数空间可以表示为(a,b,r),图像空间中一个圆对应参数空间中一个点。
具体计算时,只是数组累加器为三维A(a,b,r),计算过程是让a、b在取值范围内增加,解出满足上式的r值。每计算出一个(a,b,r)值,就对数组元素A(a,b,r)加1;计算结束后,找到的最大A(a,b,r)所对应的a、b、r就是所求的圆参数。
MATLAB程序:
  function[h_space,h_circle,param]=hough_circle(BW,step_r, step_angle,r_min,r_max,p):
    [m n]=size(BW);
    size_r=round((r_max-r_min)/stem_r)+1;
    size_angle=round(2*pi/step_angle);
    h_space=zeros(m,n,size_r);
    [rows,cols]=find(BW);
    ecount=size(rows);
    %a=x-r*cos(angle)
    %b=y-rsin(angle)
    for i=1:ecound
       for r=1:size_r
         for k=1:size_angle
             a=round(rows(i)-(r_min+(r-1)*step_r)*cos(k*step_angle));
             b=round(cols(i)-(r_min+(r-1)*step_r)*sin(k*step_angle));
             if(a>0&a<=m&b>0&b<=n)
               h_space(a,b,r)=h_space(a,b,r)+1;
             end
         end
       end
    end
    %搜索超过阈值的聚集点
    max_para=max(max(max(h_space)));
    index=find(h_space>=max_para*p);
    length=size(index);
    h_circle=zeros(m,n);
    for i=1:ecound
       for k=1:length
           par3=floor(index(k)/(m*n))+1;
           par2=floor((index(k)-(par3-1)*(m*n)/m)+1;
           par1=index(k)-(par3-1)*(m*n)-(par2-1)*m;
           if((row(i)-par1)^2+(cols(i)-par2)^2<(r_min+(par3-1)*step_r)^2+5&...
               (row(i)-par1)^2+(cols(i)-par2)^2>(r_min+(par3-1)*step_r)^2-5)
             h_circle(rows(i),cols(i))=1
           end
       end
    end
    %打印结果
    for k=1:length
       par3=floor(index(k)/(m*n))+1;
       par2=floor((index(k)-(par3-1)*(m*n)/m)+1;
       par1=index(k)-(par3-1)*(m*n)-(par2-1)*m;
       par3=r_min+(par3-1)*step_r;
       fprintf(1,'Center %d %d radius %d\n',par1,par2,par3);
       para(:,k)=[par1,par2,par3]';
    end

利用上述函数检测半径在20~30mm的圆的MATLAB程序代码: nbsp;nbsp;I=imread('xxx.bmp');
  [m,n,l]=size(I);
  if l>1
     I=rgb2gray(I);
  end
  BW=edge(I,'sobel');
  step_r=1;
  step_angle=0.1;
  min_r=20;
  max_r=30;
  thresh=0.7;
  [h_space,h_circle,param]=hough_circle(BW,step_r,step_angle,r_min,r_max,thresh):
  subplot(221);imshow(I),title('原图');
  subplot(222);imshow(BW),title('边缘');
  subplot(223);imshow(h_circle),title('检测结果');

图像空间中同一个圆、直线、抛物线、椭圆上的每一个点,在其参数空间都对应了一个图形,图图像空间中的这些点都满足某个给定方程,因此这些点投影到参数空间中的图像都会经过参数空间的点,也就是在参数空间中的投影会相交于一点。当参数空间中的这些交点的重叠次数越多时,原图像空间中满足这个参数的图形越饱满,也就越接近待检测的图形。Hough变换能用于查找任意形状且以及给出表达式的图形,在检测已知形状时具有受曲线间断影响小、不受图形旋转影响等优点,即使待检测的形状有轻微缺损也可以被正确识别。
2)区域生长法:
图像分割的目的是要把一幅图像划分成一些区域,最直接的方法就是要把点组成区域。首先要确定区域的数目,其次要确定一个区域与其他区域相区别的特征,最后要产生有分割意义的相似性判据。
区域生长法的基本思想是,将具有相似性质的像素集合起来构成区域。首先对每个要分割的区域找一个种子点,然后将种子像素周围邻域中与种子像素有相同或相似性质的像素合并到种子像素所在的区域中。将这些新像素当作新的种子点继续进行上面的过程,直到没有满足条件的像素点时停止生长。其中的相似性准则可以是灰度级、彩色、组织、梯度或其他特性,相似性的测度可以由所确定的阈值来决定。
选取的种子点可以是单个像素,也可以是包括若干个像素的子区域,原则上是待提取区域的具有代表性的点。生长准则与评价种子点相似程度的度量相似,大多采用与种子点的距离。种子点可以随区域的生长而变化,也可以设定为一个固定的数值。判定生长停止的阈值可以是确定的值,也可以是随生长而变化的值。
3)区域合并/分裂法:
区域生长法需要根据先验知识选取种子点,而区域合并/分裂法则不需要先验知识就能自动分割。先将图像分割成若干子块,对每个子块的属性进行计算,当属性表明该子块包含不同区域的像素,则该子块再分裂为若干个子块。如果几个子块的属性相似,则这几个相似属性的子块合并成一个大的区域。根据这样的方法可以完成对图像的分割。子块的属性值一般可以用子块区域的灰度均值和方差来度量,如方差大于设定的阈值则表明子块包含的内容为多个区域的内容,进行下一层分裂;如果子块的方差在设定的阈值内表明子块具有一致性,不再分裂;如果子块的灰度均值相似,就将两个子块合并。

5. 其他分割方法:

1)根据流形特征的分割方法:
通常的方法是根据图像像素点的亮度特征、颜色特征或纹理特征构建相似图,图中的每个节点对应着图像中的像素点,图中每条连接的边的权值表示了被连接节点的相似度,按照一定的准则对相似图进行切割,使得具有相似属性的像素点被划分到同一个子图中,不相似的点被划分到不同的子图中,最终达到分割图像的目的。
2)分水岭分割法:
以对图像进行三维可视化处理为基础,其中两个是坐标,另一个是灰度级。按地形学有三类点:
  ⑴  局部最小值点
  ⑵  当水放在某点,水会下落到一个单一的最小点
  ⑶  当水处于某个位置,水会等概论地流向不止一个这样的最小点
满足条件⑵的点的集合称为这个最小值的汇水盆地或分水岭,满足条件⑶的点集合组成地形表面的峰线,称为分割线或分水线。
分水岭法主要应用是从背景中提取近乎一致的对象。基于这种概念的分割算法主要是找出分水线,但它对噪声和细密纹理非常敏感,容易产生过分割。
3)彩色分割法:
在一些应用领域,可以通过物体的颜色的差异进行图像分割,比如区分成熟与不成熟的水果。特别是在人像处理中,可以通过肤色来分割人脸或其他皮肤区域,然后进行以后的处理。
4)水平集分割法:
5)基于深度学习的图像分割法:
随着深度学习技术的发展,已经产生通过构建神经网络对图像进行二值化处理甚至进行图像分割,并达到实用效果。有一种Multi-Scale Fully Convolutional Neural Network对文档二值化效果良好。

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659