Print

发布时间: 2020-04-10
摘要点击次数:
全文下载次数:
DOI: 10.3969/j.issn.2096-8299.2020.02.015
2020 | Volume 36 | Number 2




        




  <<上一篇 




  下一篇>> 





基于改进Canny检测与Hough变换的仪表图像识别算法
expand article info 姚洋, 彭道刚, 王志萍
上海电力大学 自动化工程学院, 上海 200090

摘要

针对发电厂中指针式仪表数量多、周围环境复杂、灰尘污染等因素导致获得的图像含有大量噪声从而影响仪表读数识别精度的问题, 提出了一种改进Canny边缘检测算法, 通过采用5×5邻域计算像素梯度幅值的方法, 提高了边缘检测精度, 并采用自适应双阈值选择法, 有效避免了传统Canny算法易出现伪边缘、边缘信息多等现象, 结合Hough变换技术提取仪表指针信息, 提高仪表识别精度。经实验对比验证, 该算法检测效果优于传统Canny算法, 仪表读数识别精度达到95%。

关键词

指针式仪表; 边缘检测; Canny算法; 自适应双阈值; Hough变换; 读数识别

The Instrument Image Recognition Algorithm Based on Canny Detection and Hough Transform
expand article info YAO Yang, PENG Daogang, WANG Zhiping
School of Automation Engineering, Shanghai University of Electric Power, Shanghai 200090, China

Abstract

Due to the large number of pointer instruments, the complex environment, dust pollution and other factors in power plants, the image obtained contains a lot of noise which affects the accuracy of meter reading recognition.An improved Canny edge detection algorithm is presented.By adopting the method of 5×5 neighborhood to calculate the amplitude of pixel gradient, edge detection accuracy is improved and adaptive double threshold selection method is adopted.Compared with traditional Canny algorithm, it can avoid false edge and more edge information.The instrument pointer information is extracted by Hough transform technology, the accuracy of instrument identification is improved.Verified by comparison, the detection result of this algorithm is better than that of traditional Canny algorithm, and the accuracy of meter reading recognition is 95%.

Key words

pointer instrument; edge detection; Canny algorithm; adaptive double threshold; Hough transform; accuracy of meter reading

指针式仪表(比如温度表、流量表、湿度表、压力表等)作为一种结构简单、成本低、安装方便且可靠性较高的常用测量仪器, 能够非常直观地显示出待测数据的变化, 因此被广泛应用于工业生产、国防军工等领域[1]。如何更加快速、精确地获取它们的测量数据是其应用领域中亟需解决的问题[2-6]

在图像获取过程中, 拍摄角度、仪表位置、污渍及光照不均匀等因素会导致图像存在大量噪声, 严重影响仪表读数识别精度[7]; 且图像边缘信息是图像中的关键信息, 对物体识别具有重要意义, 对目标轮廓及区域内相对位置的检测结果将直接影响图像识别精度。因此, 边缘检测技术是仪表图像分析领域研究的重点和难点。

传统的边缘检测算法有Sobel算法、Log算法、Krich算法、Roberts算法等, 但其处理效果并不理想[8]。1986年, CANNY J首次提出了Canny边缘检测算法(以下简称“Canny算法”), 能有效弥补其他传统边缘检测算法的不足, 因此Canny算法被认定为边缘检测方法中较好的算法[9]。但其缺点是对噪声鲁棒性低, 检测图像会多处出现伪边缘、孤立边缘点等问题, 影响后续的检测精度。

为解决以上问题, 本文提出了一种改进的Canny算法, 采用5×5邻域计算各像素点梯度幅值, 并通过自动选择最佳双阈值的方法提高边缘检测精度, 再结合Hough变换技术进行仪表指针位置定位, 得到了较好的应用效果。

1 仪表图像预处理

指针式仪表采用图像预处理技术的目的是为了将表盘区域从复杂背景中提取出来, 从而更加精确地获得仪表的读数。预处理技术主要包括:缩放和变换、灰度化、去噪和平滑、膨胀和腐蚀。在对电厂仪表识别过程中, 本文采用的预处理操作有灰度化、去噪和平滑。

灰度化能够减少图像处理过程中CPU的使用频率, 加快计算速度, 减少计算时间。设R代表红色像素, G代表绿色像素, B代表蓝色像素, 将原图转换为灰度图的计算公式为

$ G_{\mathrm{ray}}=\frac{R \times 30+G \times 59+B \times 11+50}{100} $ (1)

电厂仪表的图像噪声多属于正态分布。高斯滤波适用于消除正态分布噪声。高斯滤波是对整幅图像进行加权平均的过程, 每一个像素点的值, 都由其本身和邻域内的其他像素值经过加权平均后得到, 其滤波结果直接影响边缘检测效果以及仪表读数识别结果。

本文以电厂中的压力表作为测试对象, 将复杂环境下的压力表根据圆形模板匹配进行剪切保存, 并把保存下来的压力表转化为灰度图, 再采用高斯滤波去除噪声。图 1为压力表提取后的灰度图和高斯滤波图。由图 1可知, 经过高斯滤波, 仪表读数更加易识别。

图 1 压力表的灰度图和高斯滤波图

2 算法介绍

2.1 传统Canny算法

传统Canny算法需要根据图像的滤波情况手动输入全局高低阈值, 高低阈值的选定对图像边缘处理的效果影响甚大。阈值的选择需要工程师凭借对图像处理的理解及经验积累, 才能选出大概的高低阈值, 且其阈值有可能不是最优值。

传统Canny算法利用2×2邻域一阶偏导的有限差分进行图像平滑后来计算梯度幅值和梯度方向, 用xy分别标识横向和纵向, G[i, j], G[i, j+1], G[i+1, j], G[i+1, j+1]分别代表G[i, j]像素的周围像素点, 则其方向对应的偏微分公式为

$\begin{aligned} G_{x}[i, j]=& \frac{1}{2}\{G[i, j+1]-G[i, j]+\\ &G[i+1, j+1]-G[i+1, j]\} \end{aligned}$ (2)

$\begin{aligned} G_{y}[i, j]=& \frac{1}{2}\{G[i+1, j]-G[i, j]+\\ &G[i+1, j+1]-G[i, j+1]\} \end{aligned}$ (3)

梯度幅值公式为

$ M(i, j)=\sqrt{G_{x}^{2}[i, j]}+G_{y}^{2}[i, j] $ (4)

梯度方向公式为

$ \theta(i, j)=\arctan \left(\frac{G_{y}[i, j]}{G_{x}[i, j]}\right) $ (5)

图 1(b)采用传统Canny算法进行边缘检测及Hough变换检测, 结果如图 2所示。

图 2 传统Canny算法边缘检测及Hough变换检测后的压力表图像

图 2可以看出, 由于传统Canny算法设置的阈值过低, 产生了伪边缘信息, Hough变换检测指针时出现5条直线(其中1条极短, 缩小后显示不明显), 影响Hough变换直线检测和圆检测的准确性, 产生了误差。其对应的坐标和仪表转动轴心的坐标显示在Win32控制台上, 如图 3所示。

图 3 圆心坐标和直线坐标

图 3中, [173, 177]为检测出的仪表转动轴心点, 其他坐标为仪表指针检测的始终点。为保留靠近指针的2条直线, 其他3条直线要去除掉, 需依次遍历Hough直线上的所有点, 根据距离圆心最近的直线, 保留其中2条直线。

2.2 改进Canny算法

2.2.1 改进的梯度幅值计算方法

本文改进了传统Canny算法的滤波器和高低阈值的人工设置, 将传统的2×2邻域增加至5×5邻域。G[i, j], G[i, j+1], G[i, j+2], G[i+1, j], G[i+1, j+1], G[i+1, j+2], G[i+2, j], G[i+2, j+1], G[i+2, j+2]分别代表图像像素以G[i, j]为中心的邻域的像素点。通过计算0°, 45°, 90°, 135°等8个方向的一阶偏导数有限差分来确定像素梯度幅值。设d1, d1是像素中心点G[i, j]与邻域像素点的差值。算法如下。

x方向偏导数为

$ \begin{aligned} G_{x}[i, j]=& \frac{G[i+1, j]-G[i, j]}{d_{1}}+\\ & \frac{G[i+2, j]-G[i, j]}{d_{2}}+\\ & \frac{G[i-1, j]-G[i, j]}{d_{1}}+\\ & \frac{G[i-2, j]-G[i, j]}{d_{2}} \end{aligned} $ (6)

y方向偏导数为

$ \begin{aligned} G_{y}[i, j]=& \frac{G[i, j+1]-G[i, j]}{d_{1}}+\\ & \frac{G[i, j+2]-G[i, j]}{d_{2}}+\\ & \frac{G[i, j-1]-G[i, j]}{d_{1}}+\\ & \frac{G[i, j-2]-G[i, j]}{d_{2}} \end{aligned} $ (7)

45°方向偏导数为

$ \begin{array}{r} G_{45^{\circ}}[i, j]=\frac{G[i-2, j-2]-G[i, j]}{d_{2}}+ \\ \frac{G[i-1, j-1]-G[i, j]}{d_{1}}+ \\ \frac{G[i+1, j+1]-G[i, j]}{d_{1}}+ \\ \frac{G[i+2, j+2]-G[i, j]}{d_{2}} \end{array} $ (8)

135°方向偏导数为

$ G_{135^{5}}[i, j]=\frac{G[i+2, j-2]-G[i, j]}{d_{2}}+ $

$ \frac{\mathrm{G}[\mathrm{i}+1, \mathrm{j}-1]-\mathrm{G}[\mathrm{i}, \mathrm{j}]}{\mathrm{d}_{1}}+ $

$ \frac{\mathrm{G}[\mathrm{i}-1, \mathrm{j}+1]-\mathrm{G}[\mathrm{i}, \mathrm{j}]}{\mathrm{d}_{1}}+ $

$\begin{aligned} G_{135^{\circ}}[i, j]=& \frac{G[i+2, j-2]-G[i, j]}{d_{2}}+\\ & \frac{G[i+1, j-1]-G[i, j]}{d_{1}}+\\ & \frac{G[i-1, j+1]-G[i, j]}{d_{1}}+\\ & \frac{G[i-2, j+2]-G[i, j]}{d_{2}} \end{aligned}$ (9)

梯度幅值为

$M[i, j]=\sqrt{G_{x}^{2}[i, j]}+G_{y}^{2}[i, j]+G_{45^{\circ}}^{2}[i, j]+G_{135^{\circ}}^{2}[i, j]$ (10)

梯度方向为

$ \theta[i, j]=\arctan \left(\frac{G_{y}[i, j]}{G_{x}[i, j]}\right) $ (11)

采用5×5邻域的滤波器可以对梯度幅值阵列中的任一像素沿梯度方向进行梯度幅值的插值。通过对传统Canny算法滤波器的改进可以检测梯度幅值的极大值点, 从而有效抑制噪声干扰。

2.2.2 改进的自适应双阈值选择

在电厂仪表巡检时, 电力巡检机器人采用自动变焦技术使仪表图像变得清晰, 并保存清晰图像。仪表像素部分在图像像素中所占比例有大小之分:大比例仪表图像具有边缘信息少、梯度分布不分散的特点; 小比例仪表图像具有边缘信息丰富、梯度幅度分布分散的特点。传统Canny算法中高低阈值是固定不变的, 采用传统Canny算法的巡检机器人在电厂环境中得不到应用。根据电厂环境的特殊情况, 本文对传统Canny算法进行了自适应高低阈值的改进。

在改进自适应双阈值算法中, 定义图像梯度幅度为I[i, j], 梯度幅度均值为Iave; ThTl分别表示要求的高低阈值; σ表示图像的标准差, K是它的系数, 取值范围为K∈(1.2, 1.6)。将大比例仪表图像和小比例仪表图像的自适应双阈值选择整合为一种算法, 该算法过程如下。

(1) 判断像素梯度幅度I[i, j]是否小于Iave的15%~20%, 如果判断结果为是, 则直接将该像素标记为伪边缘点。

(2) 如果满足I(i, j)大于Iave的15%~20%, 则根据如下公式可计算出图像的高低阈值

$ I_{\mathrm{ave}}=\frac{\sum_{i=1}^{m} \sum_{j=1}^{n}|I[i, j]|}{m n} $ (12)

$\sigma=\left(\frac{\sum\limits_{i=1}^{m} \sum\limits_{j=1}^{n}\left|I[i, j]-I_{\text {ave }}\right|^{2}}{m n}\right)^{\frac{1}{2}}$ (13)

$T_{\mathrm{h}}=I_{\mathrm{ave}}+K \sigma$ (14)

$ T_{1}=\frac{T_{\mathrm{h}}}{2} $ (15)

当仪表图像检测边缘信息时, 由于边缘信息比较丰富且梯度幅度比较分散, 所以σ的值会更大。这时应该减小K的值, 目的是去除更多的伪边缘信息; 反之, 若σ值越小, 则应增大K值。

3 改进算法应用

本文在VS2015软件搭载OpenCV3.4库作为算法实现的操作平台, 采用改进Canny算法检测仪表图像边缘, 并与传统Canny算法检测做对比测试。由图 3可以看出, 传统Canny算法检测的边缘信息出现伪边缘, 进而Hough检测出来的仪表出现了5条指针的直线边缘, 对仪表识别出现了误差。

由于发电厂中的仪表图像信息的特点是边缘信息较少, 梯度幅度和平均值都较小, 所以将K值设置为1.5。

由式(12)~式(15)可以推导出改进自适应双阈值, 不需要人为设置Canny算法的高低阈值。对压力表的灰度图采用改进Canny算法进行边缘检测及Hough变换检测, 结果如图 4所示。

图 4 改进Canny算法边缘检测及Hough变换检测后的压力表图像

图 4可以看出, 改进Canny算法提高了仪表的边缘检测精度, 使Hough变换检测直线和圆边缘更加准确。改进Canny算法自动设置阈值, 且是最优阈值与传统Canny算法相比, 缩短了仪表识别算法的运行时间。改进Canny算法保留了原图像的边缘, 比传统方法具有更好的边缘检测效果, 可应用于电力巡检机器人平台。

电厂中的温度表经过改进Canny算法边缘检测及Hough变换检测前后的效果图如图 5所示。由图 5可知, 改进Canny算法及Hough变换检测出来的仪表大致一样, 都是由圆轮廓和指针组成。

图 5 改进Canny算法边缘检测及Hough变换检测前后的温度表图像

4 指针位置定位

在改进Canny算法检测仪表边缘信息图像的基础上, 采用Hough变换是进行中心特征点提取最直接的算法。该算法根据数学模型上的参数空间计算累积结果的最大值, 检测出特定的直线和圆。该过程称为Hough变换。Hough变换技术可以有效地抑制图像中的特征点断裂现象, 同时也有非常好的容错性和鲁棒性。本文采用这种仪表识别算法来进行指针位置定位。

指针仪表识别算法主要是采用仪表刻度盘上的最大量程和初始量程之间的角度和指针中心线的角度之间的关系来计算出指针所指的仪表量程读数[10]。以Hough圆检测出的圆心作为直角坐标系的原点建立直角坐标系和图像的空间坐标系, 假设仪表的最小和最大量程范围为(Lmin, Lmax), 由之前的Hough圆检测出的圆心为原点O, 检测出的圆心为仪表表盘转动的轴心。

以电压表为例, 仪表指针所在的直线用表示, 仪表的初始刻度与转动轴心所连成的直线用表示, 仪表的最大刻度与转动轴心所连成的直线用表示。射线X轴负方向的最小角度分别为φmax, φmin, φ, 其所成的角度范围是(-180°, 180°)。通过实验得出了仪表读数I和仪表指针之间关系, 推导出它们之间的表达式为

$ I=\frac{\Delta \phi}{\Delta \phi_{\mathrm{M}}} \times\left(L_{\max }-L_{\min }\right)+L_{\min } $ (16)

式中:Δφ——射线之间的夹角;

ΔφM——射线之间的夹角。

Δφ与ΔφM可分别表示为

$ \Delta \phi=\left\{\begin{array}{ll} \phi-\phi_{\min }, & \phi \geqslant \phi_{\min } \\ \phi-\phi_{\min }+360^{\circ}, & \phi \lt \phi_{\min } \end{array}\right. $ (17)

$\Delta \phi_{\mathrm{M}}=\left\{\begin{array}{ll}\phi_{\max }-\phi_{\min }, & \phi_{\max } \geqslant \phi_{\min } \\ \phi_{\max }-\phi_{\min }+360^{\circ}, & \phi_{\max }<\phi_{\min }\end{array}\right.$ (18)

根据式(16)~式(18)可以得出, 每个仪表的初始量程和最大量程之间的角度是确定且已知的, 检测出的仪表指针与仪表初量程刻度之间的夹角φ成为得到仪表数值的关键所在。根据仪表指针算法坐标系UVXY之间的关系, 可以由指针与空间坐标系形成的夹角θ得出仪表指针和初始量程刻度之间的夹角φ

压力表指针算法坐标系如图 6所示。

图 6 压力表指针算法坐标系

以Hough圆检测的圆心为中心像素点建立直角坐标系, 并划分为4个区域, 表明指针的活动范围。

仪表指针的活动区域如图 7所示。

图 7 仪表指针的活动区域

不同区域中φθ的关系分析如下。

区域1:对应图 7中仪表表盘右上角区域, 在该区域的仪表指针X轴负方向的夹角φ可以表示为

$\phi=90^{\circ}+\theta$ (19)

区域2:对应图 7中仪表的左上角区域, 在该区域的仪表指针X轴负方向的夹角v

$\phi=90^{\circ}-\theta$ (20)

区域3:对应图 7中仪表左下角区域, 在该区域的仪表指针X轴负方向的夹角φ

$90^{\circ}-\theta=360^{\circ}-\phi$ (21)

区域4:对应图 7中仪表右下角区域, 在该区域的仪表指针X轴负方向的夹角φ

$90^{\circ}-\theta+360^{\circ}-\phi=180^{\circ} \\ \phi=270^{\circ}-\theta$ (22)

通过Hough变换检测的仪表指针落在哪个区域, 根据式(19)~式(22)推导出仪表指针与X轴负方向的夹角φ, 再根据对应区域的公式算出Δφ, 最后由式(16)推导出仪表的指针读数I

5 实验分析

设人工读数为I0, 算法测量值为I, 仪表读数的识别率为R。仪表读数识别率的公式为

$ R=\frac{\left|I_{0}-I\right|}{100} \times 100 \% $ (23)

在电厂测试环境下, 考虑表盘污渍、光照和空气污染等因素影响, 测试该算法的可行性和稳定性。本文对电厂仪表的50张图片进行了分析, 提取了10张图片作为样本, 分别采用Canny传统算法、改进Canny算法与人工读数进行比较, 结果如表 1所示。根据式(23)可计算出改进Canny算法所得到的仪表读数识别率可达95%。

表 1 Canny传统算法、改进Canny算法与人工读数识别比较

下载CSV
图片
序号
人工
读数
传统Canny算法读数 改进Canny算法读数
测量值 误差 测量值 误差
1 0.390 0.395 0.005 0.391 0.001
2 0.600 0.595 0.005 0.598 0.002
3 0.365 0.372 0.007 0.368 0.003
4 0.510 0.508 0.002 0.509 0.001
5 12.750 12.752 0.002 12.749 0.001
6 40.610 40.621 0.011 40.613 0.002
7 42.330 42.333 0.003 42.332 0.002
8 69.120 69.119 0.001 69.121 0.001
9 125.650 125.630 0.020 125.646 0.004
10 130.750 130.753 0.003 130.745 0.005

误差的主要来源是, 在目标检测过程中, 表盘的指针和内轮廓会发生变形, 导致部分刻度间距拉大或者缩小, 以至在判读刻度过程中, 如果指针靠近发生偏移的刻度, 读数会偏大或者偏小。另外, 在提取仪表读数过程中, 如果存在较大的干扰光源, 会使图像增强效果变差, 无法完全滤除反光影像, 导致后续表盘部分的提取发生较大的偏差。

6 结语

本文在对传统Canny算法检测边缘研究的基础上, 提出改进Canny算法将改进滤波器和改进自适应阈值选择算法应用于电力巡检仪表图像的边缘检测中, 通过实验测试得到清晰的边缘检测图像。特别是在不同噪声环境下, 该算法避免了边缘信息不足造成的仪表读数不精确的问题, 提升了仪表读数的识别精度。本文中所建立的改进Canny算法边缘检测及Hough变换检测方法, 经实验测试稳定可靠, 仪表读数识别率可达95%, 与人工读数的误差较小。

参考文献