APP下载

基于U⁃net网络的图像语义分割

2023-07-17许超王仕山

计算机应用文摘 2023年13期

许超 王仕山

摘要:分割图像的方法有很多种,文章主要涉及的内容是基于分水岭算法的图像分割,并且应用垒卷积神经网络模型和Kcras框架编程实现基于U-net网络的图像语义分割,以及实现对细胞图像的分割。

关键词:图像语义分割;全卷积神经网络;分水岭算法

中图法分类号:TP391 文献标识码:A

图像分割技术的实质是将图像分为许多有特定性质的区域,并对这些图像子区域定义研究目标,得到内部互相连通的部分过程,同一区域内部一致,不同区域表现不同。

但随着图像应用领域的不断发展,待分析的图像也随之改变,对图像分割的质量也提出了更高的要求。

因此,传统图像分割算法已不能满足发展的需要,所以图像分割技术要向着更加广泛、细致的方向研究,以取得新的研究成果。新的理论知识也为图像的研究提供了思路,为解决出现的新问题,国内外学者将各种新的理论知识与方法融合到图像分割算法中。

1 传统图像分割方法

1.1 基于阈值的图像分割方法

图像分割方法中较为传统的阈值分割法,是一种基本的、应用广泛的分割技术,尤其是在图像处理领域被广泛使用。阈值分割法在实现的过程中简单快捷、性能稳定,而且计算量小。

阈值分割方法根据不同的灰度背景和目标区域对它们进行分类[1] ,并通过设置不同的阈值将图像像素分成几类。阈值分割方法非常适用于目标和背景占据不同灰度范围时的图像处理,图像阈值分割的关键是阈值的选取是否合理、正确。

灰度阈值分割是一种并行区域分割技术。单阈值分割是指图像若仅用目标和背景这2 大类分割,则选取1 个阈值即可。事实上,单阈值分割是从输入图像f 到输出圖像g 的转换,即:

式中,T 为阈值,g(i,j)= 1 是对应目标的图像元素,g(i,j)= 0 是对应背景的图像元素。但如果要从图像中提取多个目标,使用单个的阈值分割将会出现错误,那么就需要选取多个阈值来达到将每个目标都分割开的目的,这其实就是多阈值分割。这也证实了阈值分割的结果主要取决于阈值的设定。阈值选定后,可以并行进行对阈值和像素点灰度值的比较及对各像素的分割。

1.2 基于区域的图像分割方法

在图像分割算法中,基于区域的分割方法将区域作为分割基础。区域生长和区域分裂合并是其包含的2 种具体算法。

1.2.1 区域生长

区域生长是一种串行区域技术。在分割过程中,需要根据上一步的结果来确定后续每一步的处理。

常用的算法有:结合模糊连接度的区域生长、对称区域生长。

将具有相似特性的像素集合构成区域是区域生长的基本思想。区域生长的过程大致如下:第一步,在每个需要分割的区域中找到一个种子像素点作为生长起点;第二步,找到种子像素周围具有相同或相似属性的像素合并到种子像素中的区域;最后,新像素作为一个新的种子像素重复上述过程,直到像素不再符合条件。

区域生长算法很简单,而且分割效果好,甚至可以用于分割连在一起且相对均匀的对象。但它需要人工选取种子, 且对噪声比较敏感,容易导致误差,如区域内有空洞出现。由于目标较大时分割速度较慢,因此尽量提高运行效率成为算法设计的关注点。

1.2.2 区域分裂合并

为实现采用区域分裂合并算法对目标的提取,从整幅图像中将各个区域进行分裂,输出的结果被称为子区域,然后将前景区域合并得到前景目标。区域生长实现目标的提取,要从某个或者某些像素点出发得到整个区域,而分裂合并可以理解为区域生长的逆过程。分割合并假设是图像的前景区域由相互连接的像素组成,那么判定该像素是否为前景像素需要把一幅图像分裂到像素级,然后对所有像素或子区域进行判断,前景区域或像素合并,即可得到前景目标。

一种典型的区域分裂合并法是四叉树分解法,设计分裂合并准则是分裂合并法的关键。区域分裂合并方法对于复杂的图像分割是一种很好的方法,但其算法较复杂,且在分割过程中可能会出现区域边界被破坏的现象。

1.3 基于边缘检测的图像分割方法

基于边缘检测的分割方法是通过检测对包含不同区域的边缘进行分割,这也是研究者使用最多的一种方法。实现边缘检测方法的主要假设之一是:不同区域之间在边缘上的像素灰度值的变化大多较为剧烈。边缘检测法一般以图像一阶导数的极大值或二阶导数过零点的信息为标准,为判断边缘点提供基本依据。

根据处理技术,边缘检测可分为串行边缘检测和并行边缘检测。串行边缘检测利用之前的像素验证结果来确定当前像素是否属于检测边缘上的点;并行边缘检测是确定一个像素点是否属于检测边缘上的一个点;并行边缘检测是对目标像素点和其相邻像素点进行检测。

如今还有很多方法被提出,如基于曲面拟合法、基于边界曲线拟合法、基于反映⁃扩散方程法、串行边界查找法以及基于变形模型法。边缘检测法的优点是运算速度快且边缘定位准,但在图像分割中的应用不能保证边缘的连续性和封闭性,且高细节区域具有大量的断裂边缘,不能形成整个大区域。

由于以上2 大难点的限制,无论采用何种方法,单独的边缘检测只能产生边缘点,而不是完整意义上的图像分割过程。采用边缘生长技术能够最大程度地保证边缘的封闭性,或使用有向势能函数将有缺口的两边缘强制连接一起,以得到封闭边缘图。未来的研究方向为应用于提取初始边缘点的自适应阈值的选取、层次分割图像更大区域的选取以及如何确认重要边缘以去除假边缘。

2 原理

分水岭分割技术是一种基于区域增长的分割方法,能够得到目标连续、闭合的边界,但像素边界宽。

分水岭算法是一种实用而且应用广泛的分割技术,在很多领域都达到了预期的分割效果。

分水岭分割法是指将一幅图像比作一个拓扑地形图,它的灰度值相当于地形高度值,即对应图像空间和对应图像灰度,山峰是高灰度值,山谷是低灰度值。通常低洼处被称为汇水盆地,汇水盆地之间的山脊被称为分水岭,水会从分水岭流下去,而且朝着不同汇水盆地流的可能性是相同的。

分水岭图像分割算法就是通过确定分水岭的位置来进行图像分割的,分割是为了找到分水线。在灰度图中找到不同的分水岭和汇水盆地,边缘用分水岭来表示,而不同的汇水盆地则代表不同的区域。分水岭分割算法经常用于处理图像中连接在一起的目标物体,通常会取得较好的效果。

3 算法

分水岭的计算过程是一个迭代标记过程。文森特L 提出了一种计算分水岭的经典方法。在该算法中,需要分2 步进行计算,其中一个是排序过程,另一个是淹没过程。在运算中要先按照升序将每个像素的灰度级进行排序,然后在从低到高逐步实现淹没的过程中,用先进先出的结构对每一个局部极小值在h阶高度的影响域进行判断及标注。

分水岭变换得到的是输入图像的汇水盆图像,分水岭是汇水盆之间的边界点。由此可见,分水岭表示的是输入图像的极大值点,一般将梯度图像作为输入图像,以得到图像的边缘信息,表达式为:

g(x,y)= grad(f(x,y))= {[f(x,y)-f(x-1,y)]2[f(x,y)-f(x,y-1)]2}0.5 (2)

式中,f(x,y)为原始图像,grad{.}为梯度运算。

在保证封闭连续边缘的前提下,分水岭算法在对微弱边缘处理上具有良好的效果,但也存在缺陷,即使用时会因图像中的噪声和物体表面细密纹理的灰度变化,而导致过度分割现象出现。应用分水岭算法得到的封闭的汇水盆,为分析图像的区域特征提供了可能。

改进的分水岭分割技术有很多种。一般可以采用2 种处理方法消除分水岭算法产生的过度分割。

(1)分割前进行预处理。先对图像进行预处理,去除无关边缘信息,再用分水岭分割。通过除噪标记前景背景、求梯度图像等,减少较小的汇水盆,以减少分割区域数量。比如,修改梯度函数,使汇水盆只能响应想要探测的目标。因此,对梯度函数进行调整,以及对梯度图像进行阈值处理是一个较简单的方法,可以消除因灰度的微小变化产生的过度分割。表达式为:g(x,y)= max(grad(f(x,y)),gθ) (3)式中,gθ 为阈值。用Sobel 算子计算可以获得梯度图像。但若选取阈值過大,则在处理实际图像过程时,图像中含有灰度变化小的微弱边缘可能会被消除。

(2)分割后处理。在分割后对结果图像进行合并。在初始分割过程中,若产生了较多小区域,则最后合并处理过程就会出现运算量过大的现象,复杂的计算大幅降低了处理的效率。比如,阈值的选择会影响分割,合并标准的确定也会产生影响。通常情况下,合并标准与相邻区域有关,由其边界强度信息和平均灰度信息确定,根据合并标准,获得的分割结果会有所不同。

4 基于全卷积神经网络的图像分割

4.1 Python 介绍

Python 是一种面向对象、动态数据类型的程序编写设计语言。其不仅语法全面,而且可以大量开发文档。它是用途广泛且功能强大的代码运行工具。

Matlab 与Python 可以算得上是能够相提并论的计算机编写程序,Python 中常用的扩展库以及大多被广泛使用的功能,在Matlab 中都能找到与其对应的。

但是,Matlab 中有很强专业性的工具箱还不能够被取代。

Python 有以下优点。(1)免费。Python 是一种开放源码的软件。(2) 简单易学。(3) 丰富的库。另外,其还有速度快、支持面向对象编程、易于移植以及可嵌入等优点。但是,它几乎不能将程序连用一行写成,命令行输出时也有限制, 必须将程序写入. Py文件。

Python 常用于系统、数据库以及网络的编程、图形处理、数字处理、文本处理以及多媒体应用等。简单爬虫也可以用Python 编写。本文也采用了Python软件中的机器学习模型进行实践,以实现数字图像的处理。

4.2 全卷积神经网络

通常基于传统的卷积神经网络的分割方法是采用一个像素周围的一个图像块,输入卷积神经网络进行训练和预测,以达到对该像素分类的目的。这种方法有3 个缺点:存储较大、计算效率低、感知区域的大小受像素块大小的限制。分析像素块只能提取局部的特征,由于整幅图像比像素块大很多,因此限制了分类的性能。全卷积神经网络能够有针对性地解决以上分割缺点。

全卷积神经网络可以做到像素级的分割图像,能处理语义级别的图像分割问题。它与经典的卷积神经网络分类不同,全卷积神经网络在卷积层转化为全连接层,以得到固定长度的特征向量。在全卷积网络中,任意尺寸的输入图像都可被接受,对最后一个卷积层的特征图用反卷积层上采样处理[2] ,使它恢复到与输入图像相同大小,然后在上采样的特征图上逐一进行像素分类,最终完成整幅图像分割。这样不仅能对每个像素进行预测,还保留了原始输入图像中的空间信息。

4.3 细胞分割中的应用

(1)导入需要使用的系统包和自定义模块。导入keras 中的优化器,数据预处理模块中的three_to_one⁃channel 函数和one_to_one⁃channel 函数,trainGenerator函数和validGenerator 函数。

(2)输入待分割数据的信息。首先给出训练集和验证集中标注图片的路径信息,再给出需要备份标注的图片,标注图片是三通道还是单通道,最后给出标注数据的详细信息。信息中包括颜色与待分割识别物体的对应关系,以及待分割识别物体对应的新标注图片像素信息。

(3)数据预处理。生成新标注图片像素和颜色的关系字典、颜色和新标注图片像素的关系数组以及源图颜色和新图标注序号对应关系。复制训练集和验证集标注图片到一个临时文件夹并且将原标注图片所在文件夹的标注图片转换为可输入全卷积网络的图片格式。

(4)模型建立和编译。输入已知信息,计算分割物体包括背景的类别数。

(5)模型训练。

(6)训练效果可视化:得到图1、图2。

从可视化图中得出,图1 随训练样本个数的不断增加,精准度越来越高。图2 随训练次数的增加,损失率趋近于0。训练集与验证集的相似度越来越高,表示图片分割效果理想,几乎能全部分割清楚。模型结果避免了过拟合。

过拟合是指为了得到一致性的假设,使假设过程变得过度严格,其本质是数学优化的问题。因训练集和测试集存在差异,若最初得到的损失函数为0,则表示对训练集中的内容过分拟合,所以评价时为了避免过拟合,可以采用增大数据运行量以及增加测试样本集个数这2 种常用方法。

5 结束语

本文主要介绍了图像分割的原理、传统的几种图像分割方法及全卷积神经网络算法。基于U⁃net神经网络结构对细胞图像进行分割处理,它对小样本的训练集也能够得到很好的效果。将细胞图像生成可以训练的样本,实现分割训练模型,并且分析处理结果是否能够达到预期效果。在具体实验中,将图片转化为二维数组并将其输入到U⁃net 模型进行分割,实现训练可视化,分析判断过程训练集与预测集的损失函数以及精确度。研究发现,使用U⁃net 神经网络进行的图像分割与原图像基本相近,精准度高。

参考文献:

[1] 许晓丽.基于聚类分析的图像分割算法研究[D].哈尔滨:哈尔滨工程大学,2012.

[2] 梅迪.应用于图像语义分割的神经网络———从SEGNET 到U⁃NET[J].电子制作,2021(12):49⁃52.

作者简介:许超(1994—),硕士,助教,研究方向:人工智能技术。