APP下载

一种结合卷积神经网络的水深自动测量方法

2019-05-05徐志康张之正舒晓村

小型微型计算机系统 2019年4期
关键词:字符识别字符灰度

徐志康,冯 径,张之正,舒晓村

(国防科技大学 气象海洋学院,南京 211101)

1 引 言

水文监测作为一门影响民生、经济建设的学科,通过在水域附近建设水文站实现水位、流量以及流速等水文要素测量,一方面提供水文常规业务数据,另一方面为水资源利用、预防洪涝灾害、保障交通等提供决策支持数据[1].在水深的自动测量中,除了安装水位传感器外,仍需搭建传统水尺以对传感器数据进行校准、备份等.基于水尺图像的水深自动测量算法能够自动识别图像中的数字和刻度,有效解决了大量图像传输和人工识别问题,为数据质量控制带来新的解决方案,也为城市道路积水监测和机动巡检提供了潜在便捷方法,因此越来越受到重视并取得了较大的发展[2].

针对于基于图像或视频的水位自动监测,国内外学者进行了一定的研究[3,4].Gilmore等人将水尺原始图像发送到管理中心进行处理,并在发送前自动进行图像质量评估和校正[5];Bruinink等人基于手机拍摄的图片进行了灌溉渠的水位测量[6].姜晓玉和花再军等将水尺灰度图进行水平投影,根据突变位置划分出水尺位置[7];兰华勇等采用Hough变换实现水尺倾斜校正,并采用Sobel算子来提取水位线[8];冷建伟等根据水尺的颜色特征采用形态学、Hough变化的方法分割水位尺[9].关于基于水尺图像的水位识别问题,目前处理方案基本分为3类[10]:

1)由于水尺图像的灰度值在水位上、下存在较大差异,基于此可将水尺图像进行灰度投影寻找灰度突变位置以提取水位线;

2)水位线在水尺图像中存在较为明显的边缘信息,可通过边缘检测来实现水位识别;

3)水尺与水体的颜色差异较大,可采用转换颜色空间的方法来实现水位识别.

由于受图像背景的影响,灰度投影、边缘检测的方法识别效果不佳,而采用颜色空间的方法容易受水面倒影影响,直接影响到测量结果[11].为此,本文提出了一种自动测量水深方法,首先改进颜色空间转换的方法来实现水尺精确定位,其次结合卷积神经网络和动态映射算法来识别水位,最后根据测量规则整合识别结果获取水位数据.

2 水尺定位

2.1 水位识别算法流程

水位识别算法第一步就是在图像中实现水尺定位,定位的精度直接影响到水位识别的精度.本文针对复杂背景下的水尺定位,提出了两步定位算法,首先根据水尺的颜色先验信息在HSV颜色空间下实现水尺的初步定位,并采用分量图的方法实现精确定位,然后分割水尺字符并进行识别,最后将像素高度动态映射至实际高度进而实现水位测量,算法流程如图1所示.

图1 算法流程图Fig.1 Algorithm flowchart

2.2 水尺初步定位

在图像处理技术中,HSV及RGB是两种常用的图像颜色空间.HSV从物体的颜色(Hue)、饱和度(Saturation)、亮度(Value)三个分量对图像进行描述,相较于RGB能够较好地模拟人类的视觉和神经系统对颜色的感知过程[12].由于水尺与环境的颜色相差较为明显,考虑将数据图像由RGB颜色空间转换至HSV颜色空间,并进一步处理图像的H分量以突显水尺部分.

在H分量下采用OTSU算法分别确定灰度图及H分量的阈值、可分离度.OTSU算法是通过遍历方式确定使类间方差最大的全局阈值,结果如表1所示,从中可以发现基于H分量的可分离度高于灰度图,因此利用H分量用于定位水尺相较于灰度图效果较为明显.

表1 OTSU下灰度图与H分量对比
Table 1 Contrast of gray information and H component based on OTSU method

图像全局阈值可分离度灰度图0.48240.5742H分量0.47060.8878

采用OTSU方法实现阈值分割后,二值图像中除有效的水尺轮廓之外还有较多的孤立噪点,采用中值滤波的方法对水尺图像进行滤波消除噪点.

为了进一步对水尺定位,采用形态学方法处理经中值滤波后所得到的图像.由于在二值图像中,水尺部位容易发生断裂,故先采用闭运算实现连通,之后进行开运算滤除细小区域[13].经过两次形态学运算之后的二值图像,可较为准确的覆盖水位尺的位置,并基于四连通区域检测图像中最大的连通区域,如图2(a)所示即为初步定位的水尺灰度图.

图2 分量对比Fig.2 Comparison of different components

对于在野外布置的图像采集设备,一般在图像采集时,会采用连续拍照或者摄像等手段,而在雨雪天气时,单幅图像受雨雪影响较大,可以通过对多幅连续图像进行均值滤波以减弱天气影响[6].

2.3 水尺准确定位

初步定位的水尺图像会受到水面倒影、背景的影响,由于水面倒影与水尺颜色相似,H分量与灰度图解决该问题效果不佳,如图2(a)及图2(b)所示.为此,对颜色空间转换进行改进,以红色水尺为例,根据颜色通道重新构建分量图C:

(1)

C=1-e-p

(2)

其中R、G、B为图像的通道值,ω为调整颜色权重参数,p为分量因子,C为定义的分量图.以OTSU中的可分离度作为评价标准,自适应选择使分离度最大化的ω,本实验中当ω为1.3时,可分离度最大,能够较好的消除水面倒影和背景的影响,如图2(c)所示分量图效果.将分量图二值化后,进行中值滤波,可以有效地消除水面倒影等影响,图3(b)为水尺精确定位结果.

图3 精确定位Fig.3 Accurate positioning

经过两步定位的水尺图像由于拍摄角度、环境造成水尺角度倾斜,水尺平面与图像采集设备平面可能存在一定角度偏差,需要对其进行垂直配准,以提高计算小数部分的精确度.水尺具有明显的线条轮廓特征,而Hough变换可以从图像中识别直线、圆等几何形状[14].故采用Hough变换来提取水尺的边缘,计算旋转角度并对水尺图像进行仿射变化,使得水尺边缘垂直于水平线:

(3)

(x,y)为原始图像上的一点,(X,Y)为该点顺时针旋转θ后的对应点.

经过两步定位及倾斜校正,能够准确的获得水尺图像,并消除水面倒影的影响,而后可对水尺图像进行识别获取水位信息.

3 基于CNN的字符识别算法

用于测量水深的水尺,由于部分被水遮挡,在水尺的水上部分大致存在四类字符:完整的数字、完整的“E”,残缺的数字和残缺的字符“E”.完整的数字及完整的“E”可确定水深的大致范围,误差为±5cm,视作整数部分;残缺的字符“E”用来计算小数部分,最后结合两部分计算结果实现测量水深.目前常用的字符识别方法有模板匹配、神经网络、SVM等,模板匹配具有识别速度快、运算简单等优点,但是对于情况复杂的字符则识别效果较低,而神经网络和SVM具有较高的识别能力,但是却依赖于字符的特征选取.而CNN是一种以分层结构构建的学习网络,类似于人类的视觉感知系统,主要包括两个过程:前向和后向.前向过程是将输入图像参数化后(以权重及偏置参数进行表示)依次输入至各层中,并将期望输出与样本标签进行对比计算损失函数,而后向过程是根据损失函数计算各参数的下降梯度,更新参数后继续下一阶段的前向过程,直至迭代结束或误差达到期望值[15].因此本文基于卷积神经网络实现水尺字符的识别.

3.1 数据增强

采用CNN进行字符识别,首先需要建立训练样本及测试样本.CNN作为深度学习的一种方式,大量的数据样本是其能够较好地实现字符识别的前提,少量样本容易造成过拟合现象,即模型在训练集中识别精度较高,在测试集中精度较低.数据增强是一种通过扩充样本数据的多样性及数量来提升模型的泛化能力、鲁棒性的技术,主要包括尺度变换、随机裁剪、水平垂直翻转、平移变换、噪声扰动、仿射变换等,为所获得的数据增强扩充样本[16].为了丰富图像训练集,以人工方式截取的数字和字符为基础进行人工标注,并采用数据增强来扩充样本数据,在模型训练的过程中,同时采用dropout技术,防止模型发生过拟合.

3.2 字符分割

采用CNN进行字符识别,首先需要将水尺字符进行分割,分割出的字符主要分成数字、“E”和由于障碍物遮挡出现的残缺的“E”三部分.将数字、完整的“E”定义为整数部,基于CNN实现字符识别;将残缺的“E”定义为小数部,采用动态映射算法计算高度,最终实现水深的测量.

字符分割目前主要采用图像处理以及聚类来实现的.其中聚类方法是根据一定的标准将样本中具有相似性质的数据进行分类,这种分类标准称为相似度和准则函数.模糊聚类方法可对一些有模糊界限的事物进行分类,定量的确定样本之间的亲疏关系,可采用模糊C均值聚类(Fuzzy c-means algorithm,FCM)对水尺图像进行字符分割,根据FCM建立目标函数[17]:

(4)

其中,c代表分类数目,n为样本数,m为模糊指数,zi为第i个类别的中心点,uij为第j个样本属于第i个类别的隶属度,取值为[0,1].模糊指数m影响着不同类别之间的模糊程度,随着m增大,不同类别之间的模糊程度也逐渐增大,分类结果也就失去了一定意义,在本文水尺图像聚类过程中m取2.

聚类的实现过程实际上是对目标函数的最小化过程,同时也不断更新隶属度矩阵U和样本中心zi,实现对数据集X的聚类划分[17]:

(5)

采用FCM的方法已定位的水尺图像进行像素聚类,对水尺图像的每个像素点进行了类型标注,分为了字符和背景两部分,并据此标签分割出字符块,二值化后进行识别.

图4 CNN的网络结构Fig.4 Architecture of the CNN

3.3 构建CNN

LeCun等设计的LeNet-5是经典的CNN结构,通过局部感知野、权值共享、多卷积核以及池化等方法降低参数数目,并成功应用于手写字符识别,后续有众多研究基于此进行,输入数据不需要进行特征提取,可直接进行输入.本文所需要解决的问题是典型的分类问题,即解决数字和字符“E”的分类,由于LeNet-5对手写字符的分类效果较好,故以LeNet-5架构为基本框架设计CNN,其网络结构如图4所示[15].

用于识别字符的CNN主要包括输入层、卷积层、下采样层、全连接层以及输出层.本文将图像尺寸归一化为40×40作为网络的输入图像,卷积层采用了5×5的卷积核,下采样层采用了2×2窗口的均值池化,采用的激活函数为Sigmoid函数,具体各层参数见表2.

卷积层C1至下采样层S4根据表2中参数对输入数据进行卷积、池化处理.LeNet-5将第五层视为卷积层C5,但由下采样层S4至卷积层C5之间采用全连接的方式,故卷积层C5

表2 模型部分参数
Table 2 Some model parameters

模型卷积核/过滤器步长输出卷积层C15×5×6136×36×6下采样层S22×2218×18×6卷积层C35×5×12114×14×12下采样层S42×227×7×12卷积层C5--120×1全连接层--11×1

也可视为全连接层.下采样层S4输出为7×7×12的矩阵,将其重定义为一个长度为588的向量,即将一个三维矩阵转换到一维空间的向量形式,才可以输入下一层卷积层C5进行训练.卷积层C5实际上是将长度为588的向量采用全连接的方式映射为长度为120的向量并输入至下一层即全连接层.而全连接层同样采用全连接的方式,将长度为120的向量采用全连接的方式映射为长度为11的向量,并经过softmax之后确定分类于数字与字符“E”的概率,根据分类概率大小确定最后的分类结果.

在模型训练阶段,需要构建损失函数用于评估网络输出结果与实际值的差异[15]:

(6)

其中,zi为网络输出,yi为期望值,损失函数采用的是方差损失函数,同时在训练过程中采用梯度下降法最小化损失函数,然后用损失函数的值更新每个神经元的权重值.损失函数随迭代次数变化趋势如图5所示,网络训练的准确率能够达到98.25%.

图5 损失函数Fig.5 Loss function

经过训练的神经网络用于识别从水尺图像中分割出来的字符,即完整的数字和完整的字符“E”,并将最后一个残缺的字符采用后续的动态映射算法计算小数部分.

4 动态映射算法

4.1 动态映射

由于水尺具有不同的测量范围和分辨率,每次分析图像时都会动态映射像素距离与实际距离.根据水尺的字符特点,选择完整的字符“E”的平均像素高度与公制单位进行动态映射,并以此映射关系计算残缺字符的高度.

首先对分割的字符“E”进行高度统计并进行分析,该例中分割出7个完整的字符“E”和1个被水位遮挡的字符“E”.像素高度统计,将识别出来的完整字符“E”按照从上至下,从左至右的顺序存储,共计M个字符“E”,并统计其像素高度,记为h1,h2,h3,…,hM,并将最后一个残缺字符作为第M+1个,其像素高度为hM+1.数据图像中的水尺与实际水尺相比发生了投影变换,因此采用二次方程来拟合在投影变化前提下字符“E”像素高度的变化规律,即拟合像素与实际高度之间的映射关系[6]:

y=ax2+bx+c

(7)

以完整字符“E”的累计像素高度作为自变量x,即将h1,(h1+h2),(h1+h2+h3),…,(h1+h2+h3+…+hM)作为自变量x,以实际累计高度作为因变量y,对应将50,100,150,…,50*M作为因变量y,代表实际高度,单位为毫米,对方程(7)进行拟合求解系数a,b,c.

以7组完整字符“E”的像素高度为数据进行拟合,7个完整的字符“E”按照从上至下,从左至右的顺序像素高度对应为99,99,98,102,103,105,106,其实际高度均为50mm,1个被水位线遮挡的字符“E”像素高度为98,系数拟合结果为a=0.1667,b=0.0238,c=98.2857.最后的字符“E”像素高度为98,作为第M+1个字符并将其累计高度为自变量x求解y,最后计算其映射高度为45mm,通过图像自动测量水位高度为60.5cm,人工读数为60.2cm,相对误差为0.5%.

4.2 测量规则

根据水位线的位置,水尺图像大致分为两种类型,一种是水位线遮挡字符“E”,另一种遮挡数字部分,两种不同情况对应不同的识别规则.以水尺的左半部分为参考对象,根据最后一个字符即残缺字符为标准划分为两种情况,除残缺字符外其余字符输入至CNN进行识别:

图6 测量规则分类Fig.6 Classification of measurement rules

情况1.最后一个字符为残缺的“E”,如图6(a)所示.其余字符经过CNN识别后,倒数第2个字符识别结果为数字n,可初步确定水深范围为(10n-5,10n)cm,并以此作为整数部分.而后计算水尺右半部分最后一个字符的像素高度,并采用动态映射计算其实际高度hcm,则最后测量结果为(10n-h)cm.

情况2.最后一个字符为残缺的数字n,如图6(b)所示.其余字符经过CNN识别后,可初步确定水深范围为(10n,10n+5)cm,并以此作为整数部分.而后计算水尺右半部分最后一个字符的像素高度,并采用动态映射计算其实际高度hcm,则最后测量结果为(10n+5-h)cm.

4.3 实验结果

采用上文中的两步定位算法进行水尺定位,在实现水尺定位的功能基础上可以解决水面倒影的问题,在采集的数据图像中,如表3所示部分原始图像与定位图像进行比较(为方便比较,人工截取原始图像与定位图像水位线附近的水尺图像,以对比定位效果),比对结果如下:从比对结果中可以发现,本文提出的两步定位的方法能够消除水面倒影,识别结果达到毫米级别并且能够保证识别精度.

表3 识别结果对比
Table 3 Comparison of results

原始图像定位图像识别结果(cm)原始图像定位图像识别结果(cm)15.551.825.160.232.160.5

5 总 结

本文设计了一种基于CNN的水位自动测量算法,主要包括水尺定位、字符识别以及动态映射三部分.针对水尺定位建立了两步定位算法,首先基于水尺的颜色信息在HSV空间下实现初步定位,而后建立自适应分量图进一步实现精确定位.字符识别方面则是通过FCM进行聚类,并分割出水尺上的字符,同时构建了CNN用于识别分割的字符,识别结果用作后续的测量结果.根据字符的像素高度,采用二次方程拟合像素与实际高度的动态映射,结合字符识别结果建立了测量规则,实验结果满足工程应用需求.所用方法不需要依赖固定的图像采集设备,利用普通水尺实现水位的自动测量,并上传数据,可补充测量站点的数据记录,也可用于比对和校准水位传感器.

猜你喜欢

字符识别字符灰度
采用改进导重法的拓扑结构灰度单元过滤技术
天津港智慧工作平台灰度发布系统和流程设计
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
论高级用字阶段汉字系统选择字符的几个原则
Arduino小车巡线程序的灰度阈值优化方案
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
融合字符及字符排列特征的铭牌识别方法
一种基于OpenCV的车牌识别方法