霍凤财, 王 迪, 李政璋
(1. 东北石油大学 a. 电气信息工程学院; b. 黑龙江省网络化与智能控制重点实验室, 黑龙江 大庆 163318; 2. 大庆油田 第九采油厂电力维修大队, 黑龙江 大庆 163511)
随着人类社会进入大数据时代, 电子类, 数字式的仪表应用越来越普遍, 数显仪表以其精度高, 读数便利等优点, 使其不断增加在仪表产业中所占的份额。但同时也出现了在某些场合下不适用性问题, 诸如恶劣的油污, 灰尘环境, 或是当现场仪表输入变量变化频率过快时, 这类仪表就不再适用, 而指针式仪表在这方面则有许多数显仪表所难以媲美的优点, 比如抗干扰性, 防水, 防尘, 油污耐受性等。在国内工业发展早期, 操作人员对这些指针式仪表进行读数识别都是利用传统的检测方法, 即人工判读, 因此难以避免会受到各种人为因素的干扰。例如人眼视觉对表盘观测角度的问题, 人员本身的视觉疲劳问题, 观测距离造成的误差以及光照对指针的影响所造成偏差等, 为节约检测时间, 削除人为不稳定因素, 提高检测工作的精确性和泛用性, 将仪表识别过程自动化是势在必行的。
Han等[1]提出了利用Hough变换对指针式仪表进行检测的方法, 并利用检测边界得出读数; Song等[2]和Zhang等[3]提出的基于计算机视觉对数字模拟仪表的自动校准标示着计算机视觉技术在仪表检测领域的广泛应用。孙凤杰等[4]提出的专一性优化光照条件影响的提取指针方法近乎完美解决了光照条件对指针识别及分割运算的影响问题。尚振宏等[5]提出一种新的实时指针仪表识别方法, 实现自动跟踪判读, 预示着工业过程的仪表识别技术跨入实时监测时代。笔者结合工业现场实际, 采用透视变化对图像进行前期处理, 解决了现场无法良好采集正视图像的问题, 并通过Hough变换对指针进行识别。实验结果表明, 该算法能良好的完成对仪表的读数问题, 并解决倾斜状态下的仪表图像识别, 识别时间短、 准确率高, 为人工智能在工业现场的不断完善提供了一种新的思路。
针对线性指针式仪表的识别的流程框图如图1所示, 主要分为图像倾斜校正、 图像的预处理、 指针检测和读数计算4部分。
在图像采集过程中, 仪表图像不可能是完全垂直方向获取, 必然存在一定角度倾斜的现象, 为解决此类问题, 采用透视变换的方式对倾斜图像进行校正。
图1 线性指针式仪表识别流程图Fig.1 Flow chart of linear pointer instrument identification
透视变换[6,7](Perspective Transformation)是将图片投影到一个新的视平面, 也称作投影映射(Projective Mapping)。通用的变换公式为
其中u,v是原始图片坐标, 变换后的图片坐标为
可实现从四边形向正方形的变换, 从而完成对图像的倾斜校正。
在实际应用过程中, 经过倾斜校正后的图像还可能存在噪声等因素影响。因此, 需对图像进行预处理, 在本文中所需的图像预处理步骤包括: 图像的滤波去噪, 图像的二值化, 基于图像分割原理的边缘检测与对图像中所期望目标的检测。
1.2.1 图像的滤波去噪
为减小运算量, 降低误差出现率, 使图像的处理变得相对简单, 要先将相机从现场仪表获取的图像进行灰度化处理, 然后再进行平滑滤波操作。笔者采用中值滤波法, 其原理是根据采集到的图像的大小, 确定一个以某像素为中心的领域, 用该领域内的像素点灰度值的中值作为该点的灰度值, 在二维图像的中值滤波算法定义为: 假设图像中某一像素点i, 其灰度值为x(i), 其领域内有L个像素点,L=2N+1,N为正整数。则在像素点i领域内的中值y(i)可表示为
y(i)=Med[x(i-N),…,x(i),…,x(i+N)]
(5)
1.2.2 图像的二值化
考虑到仪表识别的特点, 可对去噪的灰度图像进行二值化处理。在二值化过程中, 最重要的是阈值的选取, Otsu法[8-10]是自适应阈值选取最常用的方法。其中二值化变换函数表达式为
其中f(x,y)为某点(x,y)处的像素值,T为阈值, 则处理后的二值图像为f′(x,y)。
1.2.3 边缘检测
对于要进行的仪表识别工作, 为凸显图像边缘, 首先要借助边缘增强算子, 并定义像素点的边缘强度, 最后根据提取边缘点集的需求设置一个特定阈值。目前实用性范围内常用的边缘检测算子有很多种, 包括Sobel算子[11,12]、 Roberts算子[13]、 Prewitt算子[14]和Canny算子[15,16], 这些算子各有优劣, 且适用条件也根据不同情况有所不同。在众多的边缘检测算法中, 选取基于优化算法的Canny边缘检测算子, 其良好的检测精度及较短的计算时间等优点, 使其成为指针式仪表的识别研究中最常使用的方法。
Hough变换[17-20]是一种利用图像的全局特征将特定形状的边缘连接形成连续平滑边缘的一种方法。它通过将源图像上的点映射到用于累加的参数空间, 并计算累计结果的局部最大值, 获得一个符合所需目标的集合作为变换的结果, 实现对已知解析式曲线的识别。由于它利用了图像的全局特征, 所以受噪声和边界间断的影响较小。在图像空间中, 所有共线的点(x,y)都可用直线方程描述为:y=kx+b, 其中k,b是直线的斜率和截距, 该式也可改写成b=-kx+y, 可看成参数空间k,b中的一条直线, 其斜率为x, 截距为y。如果直线无限接近竖直方向, 上式则无法完成检测, 此时采用直线的极坐标方程表示直线:ρ=xcosθ+ysinθ。Hough变化的基本策略是: 依次遍历图像的所有像素, 对每个像素判断是否满足某个特定条件, 将经过该像素的所有直线区域进行累加处理, 最后识别出所有经过该像素的直线。算法的本质是一种投票机制, 对参数空间中离散点进行投票, 若投票值高于某限定值, 则说明有足够多的点位于该参数点所决定的直线上, 这种方法受噪声和直线出现间断的影响较小。
对于仪表读数识别的问题, 根据工业现场情况的复杂性, 大多使用角度法而非距离法得出数据, 但二者都是以计算比例为前提。所以总体思路是使用指针角度法计算最终表盘数据值, 过程主要分为两个部分: 其一是通过指针所在直线段的Hough变换得到的θ角确定指针与初始刻度的偏转角度; 其二是根据偏转角度与仪表表盘特征最终确定仪表读数。计算方式为
其中θ为Hough变化得出的指针偏转角度,θ0为指针指向初始刻度的偏转角度,θ1为指针量程最小值与指向中间位置的偏转角度,k为指针仪表读数,k0为指针初始刻度值,M为该仪表测量一周的理论推导值, (x0,y0)为图像中心点坐标, (x,y)为指针端点中距中点距离较大点的坐标。
首先从现场提取一张仪表表盘的图像, 并在Matlab中读取原图像。为简化运算, 先对图像进行灰度化处理获得原图与生成的灰度图像对比如图2a所示。
将原图变换为灰度图像后, 需进行去噪工作。为凸显图像去噪算法的作用效果, 人为加入噪声密度参数为0.02的椒盐噪声, 采用中值滤波算法作滤波处理。人为加入噪声的图像与经过中值滤波后的图像对比见图2b, 能明显观察出图像中表盘区域内虽成功滤除了原图中表盘区域内的小型密集点状噪声, 但清晰度也随滤波处理而降低。
将经去噪后的图像进行二值化处理。图像经二值化后指针和表盘刻度等图像信息相对比较明显, 利用边缘检测对图像进行边缘提取, 这里使用Canny边缘检测算子, 其优势在于对图像中灰度变化较明显的边缘特征检测效率更高。二值化处理后的图像和边缘检测后的图像对比见图2c, 可见经边缘检测后的图像特征更为明显, 便于后期的Hough变换直线提取工作。
a 原图与灰度图 b 加噪图像与滤波图像 c 二值化图像与边缘检测图图2 预处理对比图Fig.2 Comparison of pretreatment chart
完成图像预处理后, 对图像中的仪表指针进行提取, 用于后面计算工作。利用Hough变换峰值检测, 在Hough变换峰值选取中, 系列的参数设定为:Q值被选定为5(即peaks的输入是持有峰值行和列坐标的5×2大小的矩阵), val1被设定为0.3max(H(:)), houghlines函数中的fillgap被定义为3, 使断裂的直线可以以间距为3的阈值进行修补, minlength设定为36(即筛除掉图中长度小于36像素的直线段)。获得如图3所示指针的直线。
图3 Hough变换提取指针直线 图4 均化直线 Fig.3 Pointer line of Hough transform extraction Fig.4 Homogenization of the straight line
图4的均化直线是通过对图3得到的直线进行像素点平均化处理后得到的一条符合指针特征的直线, 从而为读数识别做准备。根据先验知识设定该仪表盘的对应读数参数是:θ0为45°,θ1为135°,k0为-20,M为230。应用式(7)进行运算处理, 得出所需刻度, 完成仪表识别工作。正对表盘条件下, 指针读数为: 36.8。
为验证图像校正的有效性, 通过相机对图2a所示仪表在倾斜一定角度的前提下进行拍摄, 获得如图5所示的图像。利用Matlab编写程序, 根据倾斜校正与透视变换的原理, 获取一些特征点构成特征矩形, 从而实现对倾斜图像的校正。笔者选取了图像中较为明显的4个角上的点作为倾斜特征点构成特征矩形, 如图6所示。完成上述倾斜校正操作后可得到倾斜校正后的图像, 如图7所示。
图5 倾斜仪表图 图6 倾斜校正前图像 图7 倾斜校正后图像 Fig.5 Inclining instrument image Fig.6 Image before tilt correction Fig.7 Image after tilt correction
经过图像倾斜校正后, 采取与2.1和2.2节所阐述的图像预处理, 图像边缘检测和图像指针识别等相同的处理过程, 其结果如图8和图9所示。通过对不用条件下的识别结果进行比较可以得出: 由于倾斜校正后仪表图像的读数与正对条件下识别出的结果存在微小偏差, 其具体的读数对比表如表1所示。
图8 Hough变换提取指针直线图 图9 均化直线图 Fig.8 Pointer line of Hough transform extraction Fig.9 Homogenization of the straight line
正对条件倾斜条件直观目视对应读数36.836.536.6
从表1中显示出直观判读数值与两种不同拍摄角度下的读数识别结果相差不大, 且根据识别得出的指针位置图可知, 算法准确性非常高。从而说明该改进方法对工业线性指针式仪表具有良好的识别能力, 并能将该方法推广到其他工业线性指针式仪表的识别, 以此避免由于人为读数造成的误差并提高了工作效率。
针对工业线性指针仪表读数识别问题, 首先根据图像的拍摄角度使用透视变换选取图像中特定区域的特征点, 在成功构建特征图形后对倾斜图像进行校正, 实现了图像修正的目的; 其次利用中值滤波对待识别仪表图像进行滤波去噪, 并使用二值化处理简化了图像结构, 达到了方便计算机进行分析运算的目的; 同时利用Canny边缘检测成功地对被测图像进行边缘获取, 提高了图像的可辨识度, 降低了后期由于机器判读可能造成误判的影响。最后运用Hough变换算法对检测直线的应用从被测图像中提取指针的直线特征, 并通过直线段的起始与终止点获取了直线对应的斜率以及倾角, 利用倾角经过量程变换获得仪表读数。根据倾斜条件, 正对条件与人眼判读三者比较得出倾斜条件下的算法与人眼, 正对条件下的读数结果在正常允许的误差范围以内, 达到了工业指针式仪表读数识别的目的。