1. 引言
近年来,暴雨是夏季常见的天气现象。由于地形和各种气候因素的综合影响,短时间内易形成洪峰,破坏性极大。为了有效地避免洪涝灾害造成的损失,及时了解河道状况,水情监测已成为必须重视的关键问题。为了实时准确监测水流,我国大部分水文监测站仍采用传统的水位测量方法,包括安装水位计进行目测读数或使用传感器自动采集水位信息。测量水位信息所使用的传感器主要包括超声波、雷达、压力、浮子机械编码、雷达等 [1]。这些测量方法大大提高了测量效率,同时也存在着成本高、维护困难、对环境影响较大等缺点。基于视觉的水尺读数法目前主要是人工目测,需要大量人力,实时性不高,在恶劣环境下读取水位时很难保证人身安全。
随着数字图像处理技术的蓬勃发展,基于水位尺图像识别的水位估计方法近年来受到越来越多研究者的关注 [2] [3]。彭将辉等 [4] 提出了一种形态学处理与Canny算子相结合的水线识别方法。该方法对图像质量要求较高,边缘提取时阈值的选取对于识别的准确率有很大的影响。江帆等 [5] 提出首先采用投影法对水位尺标志进行分割,然后通过BP神经网络对水位尺字符进行识别的方法,在船舶表面平整且分割的字符完整的情况下取得了较好的识别准确率。施朝健等 [6] 提出了通过Canny算子、几何矫正和霍夫直线检测提取水面线的方法。该方法同样受环境影响很大,不能保证提取水面线的准确性。在基于深度学习的水尺检测与水位估计方面,目前已有的研究工作较少。朱学海等 [7] 提出了基于深度学习算法的Leon-IDSS智能水位尺测定系统。该系统首先利用深度学习算法提取图片深度特征得到训练模型,然后用训练好的模型对视频或图片中的水线进行识别。鉴于以上研究现状,本文提出了一种全自动的基于图像的水尺检测及河道水位估计方法。首先使用Faster R-CNN网络截取河道水位图像中包含水尺区域的子图像;然后对水尺图像进行预处理,提取水尺在水面以上部分的水平边缘与垂直边缘,并根据垂直边缘的倾斜角度调正图像;最后利用图像处理算法进行水尺刻度的读取,进而获得当前的水位信息。
2. 基于Faster R-CNN网络的水尺检测及倾斜调正
2.1. 基于Faster R-CNN网络的水尺检测
在实际应用中,一般情况下摄像机距离河道距离较远,如图1所示,水尺在摄像头拍摄画面中尺寸较小,不利于后续的处理与检测。如果需要对水尺读数进行检测,就需要将摄像机抓取图像中的水尺所在区域截取出来进行处理,即获得图2所示的水尺图像。对于图像目标物体检测,最常用的方法是基于模板匹配的方法。考虑到单纯的模板匹配只能够匹配固定形状与固定尺寸的模板图像;而使用空间金字塔方法,在增加了处理的时间复杂度的同时,却无法进一步提高识别的准确率。因此本文使用Faster R-CNN网络检测水尺区域子图像。
Faster R-CNN网络是Ross B. Girshick [8] 在2016年提出的目标检测深度神经网络。在结构上,Faster R-CNN将特征抽取、候选区域提取、检测边框回归、分类整合在一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显。在本文中,用于水尺区域检测的Faster R-CNN网络结构如图3所示。该网络使用VGG16网络对整幅图像进行特征提取;使用区域生成网络在原图像中生成可能存在水尺的感兴趣区域;使用深度网络判断感兴趣区域中是否存在目标水尺,若存在目标水尺,则使用矩形检测框包围所述目标水尺。最后,将检测到的矩形检测框区域从原图像中截取出来,则可获得包含水尺区域的子图像。
图2为使用Faster R-CNN网络对图1所示的图像进行水尺区域检测的结果示意图。从图中可以看出,Faster R-CNN网络可以有效地从河道图像中把水尺区域检测出来。
Figure 3. Structure of water level gauge region detection based on Faster R-CNN
图3. 基于Faster R-CNN的水尺区域检测结构
2.2. 水尺图像倾斜调正
在本文中,摄像机采集的水尺图像通常存在一定的倾斜角度,并且每张图像的刻度尺倾斜角度不同。为了保证后续水尺读数过程中图像像素级计算的可靠性,需要调正图像。我们首先采用经典的霍夫变换 [9] 来检测刻度尺边缘直线。然后,根据边缘线倾斜角度,自动调正图像。具体步骤如下:
1) 对水尺图像进行预处理,即依次进行灰度化、中值滤波和自适应阈值处理 [10],生成二值化图像;
2) 通过霍夫变换检测二值化图像中刻度尺边缘直线,并进而求出倾斜角度;
3) 根据直线倾斜角度调正图像。当检测到多条刻度尺边缘线的倾斜角度时,取最大值。
将图2的水尺灰度图像经过二值化处理,得到图4(a)。一般情况下,水尺左右两边由正“E”型和反“E”型交替组成。在本文提出的水尺图像读数方法中,为了方便操作,仅处理水尺图像的右半边。图4(b)给出了经过倾斜校正后的右半边的水尺图像。从图中可以看出,水尺图像右半边由“ヨ”型块和与其宽度相等的白色块交替组成,其中“ヨ”型块的刻度线宽度与间隔宽度相等。
(a) (b)
Figure 4. Binary image. (a) Water scale; (b) The right half of Hough’s changed water scale
图4. 水尺二值图像。(a) 水尺;(b) 霍夫变换后的水尺右半边
3. 基于水尺图像的水位估计
在基于水尺图像的读数过程中,由于光线不同/明暗不同、倾斜角度不同均会对读数结果造成影响,刻度尺磨损、反光造成刻度线不清晰,也会导致处理后的刻度尺图像中“ヨ”型块的刻度线缺失。因此,本文提出了利用水尺刻度形状不会改变这一先验知识加入判断的方法,进而有效削弱水尺刻度磨损和反光对读数造成的影响,提高水尺读数的精确度。
对于如图4(b)所示的水尺右半部分图像,我们可以用一个由0和255组成的二维矩阵来表示。将二维矩阵的每个元素除以255得到由0和1组成的二值图像矩阵
:
(1)
其中,矩阵
是n行m列矩阵,
为图像矩阵
第i行第j列的元素,表示图像对应像素点的灰度值。
将图像矩阵
每行元素累加,定义图像矩阵
第i行元素的累加值
为:
(2)
定义相邻两行元素累加值之差的绝对值
为:
(3)
判断
是否大于等于预设的第一阈值
,如果
,则记录此刻的i值。将i值按顺序集合,得到行向量
,其中
。
将刻度尺图像中刻度的像素级宽度集合记作刻度尺矩阵,用行向量
表示,定义
为:
(4)
其中,
是行向量
相邻元素之差,即:
(5)
在本文中,水尺读数过程用到的先验知识主要包括:水位尺右半边由“ヨ”型块和与其宽度相等的白色块交替组成,其中“ヨ”型块的刻度线宽度与间隔宽度相等。具体判断方法为:首先,将白色块的平均宽度用w表示,白色块的数量记作
,初始化令
;利用预设的第二阈值
对行向量
做阈值处理,遍历刻度尺矩阵
,当元素
满足:
时,记录此刻的
值,其中,
是经验数,
范围:
,同时
,那么白色块的平均宽度:
,
(6)
将“ヨ”型块的刻度线平均宽度用b表示,其数量记作
,初始化令
;利用白色块的平均宽度w对行向量
做阈值处理,遍历刻度尺矩阵
,当元素
满足:
时,记录此刻的
值,同时
,那么刻度线的平均宽度:
,
(7)
由水位尺右半边的“ヨ”型块和白色块宽度相等可知,对于刻度尺矩阵
中的元素,应满足条件1:
(8)
其中,
表示
向下取整,
表示右半边刻度尺的白色块,
表示“ヨ”型块的五条刻度线宽度,由“ヨ”型块的刻度线宽度与间隔宽度相等可知条件2为:
(9)
若同时满足上述两个条件,则判断该元素合理,否则,则判断该元素不合理。对于不符合的元素按照以下方法进行修正。在刻度尺矩阵
中,代表白色块的两个相邻元素依次用
和
表示,其中,
和
满足:
,
;当刻度线缺失时,表现为:
(10)
若是
,即白色块
宽度不合理,包含了一个或多个刻度线宽度,则对刻度尺矩阵
进行修正:
,并且插入
。
基于修正后得到的刻度数据,可以确定水面所截刻度尺部分占白色块或“ヨ”型块的比例
:
(11)
最后,根据得到的白色块的数量
、“ヨ”型块的刻度线数量
和
,确定刻度尺的读数,即:
(12)
其中,a为刻度尺量程。
4. 实验结果与分析
为了验证本文所提方法的有效性,我们对大量河道图像进行了测试。首先通过Faster R-CNN算法获得河道图像中的水尺区域,然后通过像素级图像处理得到水位尺读数。具体为:通过图像灰度化、中值滤波和自适应阈值,生成二值化图像;然后通过霍夫变换获得二值化图像刻度尺边缘倾斜角度,将刻度尺图自动调正;在调正的图像上进行像素级计算,得到刻度尺矩阵;再加入先验知识,判断刻度尺矩阵的合理性并进行修正;最后基于先验知识修正后得到的刻度尺矩阵确定刻度尺的读数。我们使用绝对误差作为指标来进行评价。绝对误差是本文提出的自动水位尺读数方法与人工度数之差的绝对值。设人工读数的值为x,机器读数为
,则绝对误差为
。表1给出了10张河道图像的水位估计结果。由表1可以看出,本文所提出的基于图像的水位估计方法可以精确的估计水位,获得了较好的实验结果。
Table 1. Automatic water level gauge measurement results
表1. 自动水位尺读数结果
5. 结论
本文提出了一种基于图像的全自动河道水位估计方法。该方法的优点可总结如下:1) 在水位尺读数方面,针对人工读数不及时、耗费人力的问题,提出了一种基于图像的自动水位尺读数方法。该方法能够实现水位的自动、实时读数,有较高的精度。2) 针对摄像机不同角度拍摄的刻度尺图像倾斜程度不同的问题,本文加入经典的直线检测方法——霍夫变化,来实现刻度尺图像的自动调正,使得在一定倾斜范围内的刻度尺图像都可以通过像素级计算得到刻度尺读数。3) 针对刻度尺图像可能存在的刻度尺磨损、拍摄反光等问题,提出一种根据先验知识修正的思路,根据已知的刻度尺相关信息来自查通过像素级计算得到的刻度尺矩阵是否合理,大大提高了刻度尺读数的可靠性。
致谢
北京科技大学王瑄在本论文方法设计、实现及撰写过程中给予的帮助。