基于分水岭算法的图像分割及目标计数

时间:2024-03-23 16:22:59

1 基于分水岭算法的图像分割及目标计数

1.1 简介

计算机视觉领域,图像分割(Segmentation)指的是将数字图像细分为多个图像子区域(像素的集合)(也被称作超像素)的过程。图像分割的目的是简化或改变图像的表示形式,使得图像更容易理解和分析。图像分割通常用于定位图像中的物体和边界线曲线等)。更精确的,图像分割是对图像中的每个像素标签的一个过程,这一过程使得具有相同标签的像素具有某种共同视觉特性。

1.2 原理及其主要公式

1.2.1 分水岭算法基本原理

分水岭分割是基于自然的启发算法来模拟水流通过地形起伏的现象从而研究总结出来的一种分割方法,其基本原理是将图像特征看作地理上的地貌特征,利用像素的灰度值分布特征,对每个符合特征的区域进行划分,形成边界以构成分水岭。

水位不断上升,汇水盆地之间及其与背景之间的坝也越来越长。构筑水坝的目的是阻止盆地之间及其与背景之间的水汇聚。该过程一直持续,直到到达水的最高水位。最终水坝就是我们希望的分割结果。它的一条重要性质就是水坝组成一条连通的路径,这样,在两个区域之间就给出了连续的边界。

因为灰度变化较小的区域有较小的梯度值,因此,分水岭分割通常用于一幅图像的梯度,而不是图像本身。这样,汇水盆地的区域最小值就能很好地与待分割区域的较小梯度值联系起来。

基于分水岭算法的图像分割及目标计数

在上面的水岭算法示意图中局部极小值、积水盆地,分水岭线以及水坝的概念可以描述为:

(1)区域极小值:导数为0的点,局部范围内的最小值点;

(2)集水盆(汇水盆地):当“水”落到汇水盆地时,“水”会自然而然地流到汇水盆地中的区域极小值点处。每一个汇水盆地中有且仅有一个区域极小值点;

(3)分水岭:当“水”处于分水岭的位置时,会等概率地流向多个与它相邻的汇水盆地中;

(4)水坝:人为修建的分水岭,防止相邻汇水盆地之间的“水”互相交汇影响

分水岭计算方法被分为两个步骤,分别是排序过程和淹没过程。计算时,首先要按照从低到高的排序方式对区域内的每个像素进行灰度级别的排序,然后在从低到高进行淹没,并对每个区域极小值在 H 阶高度的影响域采用先进先出的结构进行标注和判断。通过分水岭的变换所得到输入图像为集水盆图像,每个集水盆之间的边界就是分水岭,而分水岭则代表极大值,所以想要获取图像的信息,需要将梯度图像作为输入图像进行计算,计算公式如下:

基于分水岭算法的图像分割及目标计数

在该计算公式中 f(x,y) 则代表原始图像,grad{.} 则代表梯度运算。

1.2.2 目标计数基本原理

本文使用的目标计数原理是基于Matlab中的bwboundaries函数实现的。bwboundaries是一个函数,可以用来获取二值图中对象的轮廓,包括外部轮廓与内部边缘。

[B,L,N]=bwboundaries(show_img,‘noholes’);

使用上面的语句来获取图像连通区域并求取其轮廓。其中N为物体目标的个数。在使用该函数之前,首先要对原图像进行中值滤波操作去除图像中的噪声;然后进行二值化操作,来将目标物体提取出来;之后再针对目标物体有交叉重叠部分的图像,采用分水岭算法来进行图像分割;最后使用bwboundaries函数,来通过计算目标物体的连通域个数,最终计算出目标物体的数目。

在实验的过程中,通过计算每个目标的连通域的中心位置,还对每个目标进行了标号,来标记每个物体的位置。实验效果图见图1-2。

1.3 实验结果

通过运行分水岭图像分割方法,对三张图片进行了图像分割与物体计数。得到的结果图下图1-1到图1-6所示。其中图1-1的a图为原始图像,图1-1的b图为进行图像分割后的图像;计算得到的三个物体数目分别是48个、10个以及97个。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JsGs9i3j-1588509402663)(https://s1.ax1x.com/2020/04/03/GaH60A.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rwvy4MZp-1588509402665)(https://s1.ax1x.com/2020/04/03/GabG38.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hNoZFzG8-1588509402667)(https://s1.ax1x.com/2020/04/03/GaHymd.png)]

详细代码及文件下载地址:

链接: https://www.lanzous.com/ib739mh