本博文主要分析了常用的边缘检测与图像分割算法,对于边缘检测算法,分析了Roberts 算子、Sobel 算子、Prewitt 算子、Log 算子、 Canny 算子原理,并通过Matlab编程对上述算法进行了实验验证。针对图像分割,本文介绍了极小值点阈值分割算法、最优阈值图像分割法、迭代阈值分割、Otsu算法分割、Bernsen算法、大津法阈值插值算法、水线阈值算法(分水岭或流域watershed)、区域生长算法、四叉树分解等,并通过Matlab程序对上述图像分割算法进行了实验验证。
目标对象的边缘在图像的某一区域内一般会呈现出急剧变化的状态,因此,可以将图像中的灰度值变化作为边缘检测的判断条件,边缘检测的目的就是寻找出图像中灰度值非连续变化的位置。常见的图像边缘类型一般可以归纳为三种:屋脊型、阶跃型以及脉冲型。
Roberts 边缘检测算子又被称为交叉微分算子,它的基本思想是对图像中相互垂直的像素点进行灰度差分运算,然后通过差分求解出像素点的梯度值。在实际应用中,一般采用对角方向上两个相邻的像素点。其计算公式为:
Roberts 边缘检测算子的定位精度高,边缘单像素性强,在垂直和水平方向的边缘检测效果较好。但是,因其直接将图像与卷积模板进行计算,未对图像做任何处理,所以受噪声的干扰较大,算法的鲁棒性较低,容易造成图像的局部边缘丢失,产生图像边缘不连续现象。
图像中若某一像素点的梯度值较大,则其邻域的灰度变化较为迅猛,若该点的梯度值较小,那么其邻域内的灰度变化也相对平稳,通过对比可以发现,像素梯度值与邻域灰度差值之间为正比关系。这一特性与图像边缘处的特性极为相似,因此,我们可以通过对图像一阶导数的计算,求解各点的梯度值,并以此为依据判断出是否为边缘像素点。
上述理论正是 Sobel 边缘检测算子的基本思想,以一阶导数为基础,对图像中的每一个像素点,计算上、下、左、右四个方向上的临近像素点的像素值得到加权差值,对于赋予的权值,根据邻域像素点与中心像素的距离,距离越近则权值越大,最后求解微分,计算出中心像素的梯度值。
Sobel 边缘检测算子在进行卷积操作时,所使用的卷积核为 3*3 的矩阵,通常包含水平方向模板和垂直方向模板。使用这两个模板对图像分别卷积,将中心像素与模板中心元素互相对应。在完成卷积运算后,比较两个卷积核的输出结果,以较大值为该点的梯度值,并与设定的阈值进行比较,判断该点是否为边缘点。
Sobel 边缘检测算子计算方法简单,处理速度快,且图像边缘检测效果较好,计算出边缘方向信息非常准确。由于在计算过程中加入了邻域内像素点对梯度值的参考,分别对各点赋予合适的权重,使得 Sobel 算子有着较强的抗噪能力。但是,因为仅使用了垂直和水平方向上的两个卷积核模板,对于有复杂纹理的图像,处理效果不是很理想,并且由于局部灰度加权平均的影响,Sobel 边缘检测算子容易产生双边缘,影响图像边缘定位的准确率。
Prewitt 边缘检测算子的核心思想与上述 Sobel 算子较为相像,也是结合方向差分和局部平均进行梯度计算。但是在计算过程中,Prewitt 算子认为中心像素邻域内的像素点对该点造成的影响是一样的,因此对 Sobel 算子的卷积模板进行了修改,Prewitt算子的卷积模板如下式所示:
Prewitt 边缘检测算子对图像边缘进行检测时,因为它的计算思路与 Sobel 算子相同,导致在检测复杂图像时也会出现类似的问题,但是它在抗噪方面的表现要比 Sobel算子更好。
Log 边缘检测算子是在 Laplacian 算子的基础上进行改进实现的,考虑到其较弱的抗噪能力,Log 算子首先对图像使用高斯滤波器进行平滑去噪,然后再进行偏导计算,以此来提高图像自身的质量,后续通过 Laplacian 算子处理较低噪声的图像完成边缘检测。其中高斯滤波函数为:
上式中的σ为高斯滤波器的平滑系数,σ的值越大,去噪能力越强。
Log边缘检测算子的基本步骤为:
(1)图像平滑去噪,对原始图像 I 进行高斯滤波,获取滤波后的图像 G。
(2)使用 Laplacian 变化对图像 G 进行二阶偏导计算。如下式所示。
(3)在偏导计算完成后,将二阶导数过零点的对应点判断为图像边缘像素点。
在实际工程中,由于算法运算量较大,为了加快运算速度,可以先进行微分运算再对图像进行卷积,即直接对高斯滤波器使用 Laplacian 变换,然后再将变换结果与图像进行卷积运算,这样计算出的二阶导数为:
Log 边缘检测算子在抗噪能力上相比 Laplacian 算子有着明显的提升,但是平滑系数的选取却存在一定的缺陷,提高平滑系数会使边缘细节丢失,降低平滑系数又会导致抗噪能力的下降。
Canny 算子是 John.F.Canny 于 1986 年提出的一种多级边缘检测算法,它的算法结构与 Log 算子有着一定的相似之处,首先使用滤波算法来平滑图像,降低噪声对边缘检测处理的干扰,在完成图像去噪后,再对图像中各点进行梯度值计算,提取图像边缘。
John.F.Canny 在提出边缘检测算子的同时,也提出了判断边缘检测算子性能的三个依据:
(1)优秀的检测性能,一个优秀的边缘检测算法,在检测图像边缘时具有较小的错检率和误检率,将非边缘点判定为边缘点的可能性尽可能降低。最后得到的图像信噪比尽可能最大。
式中,G(-x)表示图像的边函数,f(x)表示图像去噪过程中使用的滤波器函数,代表图像中噪声的均方差。
(2)高的定位精度,图像中检测出边缘点与其对应的真实边缘点之间的距离越小,就说明该算法的定位精度越高。
(3)最低的边缘响应,对应图像中的真实边缘,尽可能保证检测过程中只有一个像素点响应,降低多个像素点响应同一边缘的概率,即最大可能抑制虚假边缘。
Canny 算子主要通过以下五个步骤实现对图像的边缘检测:
步骤 1:应用高斯滤波平滑图像。传统的 Canny 算子采用高斯滤波器,利用其中的 1 阶导数按行和列对原始图像进行卷积降噪,从而得到平滑图像。
式中的 σ 为调节图像平滑程度的高斯函数标准差; f(x,y)为原始图像;I(x,y)为平滑滤波处理后的图像。
步骤 2:计算梯度方向及幅值。传统的 Canny 算子从水平和垂直两个方向上采用2×2 的模板通过一阶偏导的有限差分计算出平滑后的图像的梯度幅值和梯度方向
G(x,y)和 θ(x,y)分别为平滑图像 I(x,y)的梯度幅值和梯度方向。
步骤 3:应用非极大值抑制。在梯度计算之后,图像提取出的边缘仍较为模糊,并不能满足准则(3)的要求,因此需要对其进行“减薄”处理,非极大值抑制将像素点的梯度值与其梯度方向上相邻的两个像素点的梯度值进行比较,判断该点的梯度值是否为最大值,若是,则认为该点可能是边缘点并保留其梯度值,反之则此像素点必然不是边缘点,将其梯度值归零。该方法可以有效保证图像边缘的单像素性。
步骤 4:应用双阈值检测。在经过非极大值抑制之后,仍然有较多噪声及虚假边缘被判定为真实边缘,所以需要对其进一步处理。通常使用高低两个阈值。若像素点梯度值大于设定的高阈值,那么该点被标记为强边缘点,即为图像的真实边缘点。如果边缘梯度值在高低阈值的区间内,则将其标记为弱边缘点,小于低阀值的点则直接被抑制。
步骤 5:滞后边界跟踪。一般情况下,若弱边缘点为真实边缘,那么它与强边缘点理应为连通状态,反之则不会连通。因此,若某一弱边缘点与唯一强边缘点连接,则该点被判定为真实边缘点,若该点 8 邻域内没有强边缘点,则将该点认定为虚假边缘点,进行抑制处理。
Canny 边缘检测算子基于最优化思想,在检测效果上能够满足较多应用场景。使用高斯滤波对图像进行去噪处理,因此对噪声有较强的抑制能力,采用高低阈值检测和滞后边界跟踪,在确保图像边缘检测精度的同时,能够保持图像具有较好的连续性。
图像分割是图像处理中的基础性关键技术之一,自上世纪信息技术革命发生以来一直受到人们的髙度重视,至今为止已经提出上千上万种的算法。但是因为目前提出的分割算法尚无一种通用的分割理论,大部分都是针对具体问题进行分析,且没有一种适用于所有种类图像的分割理论。此外,现在还没有一个好的普适的分割评价标准,这也给图像分割技术的发展应用带来许多实际困难。最近这几年又出现了不少新方法或改进算法,对己有的经典方法和新出现的方法作了概述,并且将图像分割方法划分为阈值分割、边缘检测、区域提取、彩色图像分割和结合特定理论工具这5类分割方法。
阈值化分割技术是图像分割领域中最基本也是出现比较早的图像分割技术,它假定图像中的目标和背景占据不同灰度级范围。据此利用他们在灰度特性上的不同点把图像空间对应于现实中的景物进行区域分割,邻近区域彼此之间的灰度级别不同,但是每个区域内的灰度级别是相同的,所以通过判断图像中在同一类中的像素灰度值大小,就能对其进行识别是否属于同一个物体。图像中的每个像素点是属于背景还是属于物体,通过选择适当的阈值对其加以确认后就能生成相应的二值图像,因此阈值分割的核心问题是选择合适的阈值。其中最常用的方法是从图像的灰度直方图出发,计算出每个灰度级的概率分布密度大小,再基于一定的评判标准选择一个或者几个适当的阈值,从而能够得出每个像素点的归属问题。有趣的是评判标准不同,则得到的阈值化算法就不同。常见的阈值方法有最优阈值法、最小误差法、Otsu方法和迭代阈值法等。其中Otsu方法又称为最大类间方差法,是一种计算简单而效果又稳定的方法。在多数情形下,未来图像分割技术中,阈值的选择将朝着综合使用两种甚至更多方法的方向发展。其分割方法的计算量小,且不需要图像先验的相关信息,如果只对图像的灰度信息进行考虑的话,其速度远远大于其他的方法,另外,可是该方法并没有对图像的空间信息进行考虑,所以还有很多方面都还有待完善,如分割区域的连续性和分割复杂图像时的可靠性等。
Bernsen算法的基本思想为:设置两个初始值T1=15和T2=128,计算以任意一个像素g为中心、大小为(2w+1)×(2w+1)窗口内的所有像素灰度值的最大值M与最小值N,得到M和N的均值T。若M-N>T1,则当前点的阈值为T;若M-N
利用T(x,y)对f(x,y)逐点二值化,得到二值化显著性图像b(x,y):
大津法[2]也被称为最大的类间方差法,在整个图像上,根据像素值的统计特征求出阈值,是全局求阈值的最佳方案。运用大津法计算二值化阈值,方差是重要的特征量参数。实体和背景间的方差值越大,则图像前景和背景之间的差别越明显,因此,大津法确定的阈值可以使实体和背景的方差最大。
对于一个灰度图像I(x,y),将主体和背景之间的阈值设置为t,属于背景的点数和属于前景的点数分别为WB和WF,可以计算出背景点和前景点在整个图像中所占的比例ω0和ω1,其平均灰度分别为μ0和μ1;图像的总平均灰度为μ;类间方差记为varBetween。
假定图像背景较暗,其大小为 M × N ,把图像中像素灰度值小于阈值 t 的像素个数记作N0,大于阈值 t 的像素个数记作 N1,则有如下公式:
可得类间方差
将 t 使用穷举法执行 256 次(0~255) ,可以得出使 varBetween 取最大值的t,即为所求阈值。
水线阈值算法(分水岭或流域watershed)[3],分水岭算法一种以拓扑理论学习为基础的算法, 该算法归属于数学形态学算法。 分水岭算法将细胞图像中的每一个像素的灰度值作为每一个像素的海拔高度, 将细胞图像当做拓扑地貌, 该地貌属于测地学, 其中集水盆就是指细胞图像中的任何一个内部区域最小的值产生影响的地方。 与此同时, 分水岭就是根据这些地方的边缘区域产生的。 细胞分割时, 很多情况会导致过度分割的产生, 比如灰度值发生的微小变化, 这种微小变化主要是发生在物体的表面, 同时还有噪声在病变细胞图像中产生的变化,但是分水岭算法的提出, 对前面提到导致产生过分割的情况可以进行良好的解决。 分水岭算法的提出使用可以获得封闭性且具有不间断性的细胞边缘, 可以很好的将细微的细胞的边界提取出来。 除此之外, 通过对封闭性的集水盆的获取, 实现对细胞图像中一部分特点的分析, 主要是因为分水岭算法的提出对其产生了很大的作用。
基于边缘信息的分割技术是根据区域间的灰度不连续性搜寻区域之间的边界来图像进行分割。图像中不同物体之间总是存在着灰度级别或者颜色值存在跳跃的边缘,其局部反映出不连续的特性,这相当于是一个区域的结束和相邻区域的开始,表现为垂直于边缘的方向,像素灰度变化非常明显,同时平行于边缘的方向,像素灰度变化比较缓慢。基于边缘的分割方法试图通过检测区域间的灰度不连续性搜寻区域之间的边界来决分割,它能够实现的一个主要假设是相邻区域界限的像素灰度值是存在明显的不同。实现的核心是首先用边缘检测算子对图像中可能是边缘点的像素进行判定,然后细化具有一定厚度的边缘,最后利用边缘闭合技术将边缘进行封闭,以此来对图像区域进行划分。属于此类算法的主要有局部图像函数的方法、图像滤波、基于边界曲线拟合的方法和基于多尺度方法等等。此类算法比较适用于边缘灰度值差异大且噪声小的图像,而对边缘灰度值变化小、采光差的图像则其效果并不理想,而且算法对噪声较敏感。
基于区域处理的分割技术是一种直接寻找区域,将图像划分为不同区域的分割技术,该方法的核心是假定在视觉上,相同区域中相邻像素呈现出如灰度特征、颜色特征等类似的特征,利用图像的空间信息,认为在同一区域的像素其性质应该是相似的,这种观念相对而言较直接。
区域生长算法、分裂和合并算法是这类方法中的典型算法。特别的,区域生长算法是对每个将要分割的区域中,寻找一个作为生长点的种子像素,再基于一定的准则将该生长点附近的像素划归到生长点所在的一类中,逐步合并以形成所需要的分割区域。
区域生长图像分割结果如下图所示:
四叉树分解图像分割结果如下图所示:
[1] 张善文, 黄文准, 师韵. 基于改进Bernsen二值化算法的植物病害叶片病斑检测 [J]. 广东农业科学, 2016, 43(12): 129-33+2.
[2] 马海云, 张敬花. 基于阈值优化技术的古典文献文字识别算法研究 [J]. 中央民族大学学报(自然科学版), 2022, 31(03): 76-80.
[3] 徐梅. 基于阈值和分水岭算法对白细胞图像分割的研究 [D]; 哈尔滨理工大学, 2021.
上述所有实验验证结果均通过Matlab程序实现,可私信博主获取。
博主简介:研究方向涉及智能图像处理、深度学习、卷积神经网络等领域,先后发表过多篇SCI论文,在科研方面经验丰富。任何与算法、程序、科研方面的问题,均可私信交流讨论。