针对压力表这种模拟仪表没有提供接口供外部读取数据的情况,设计一种通过机器视觉技术来自动识别压力表读数的系统。运用标记连通域的方法标记指针及刻度线,Hough变换求取指针直线,求出表盘的圆心及半径,再在指针所指刻度区间运用角度法求得指针读数。经实验证明,该系统读取数据较人工估读数据更加准确,能够避免人为因素干扰,并能提高压力表检定效率。
0.引言
压力表是以弹性元件为敏感元件,用于测量对仪表零件不起腐蚀作用的液体、气体和蒸汽表压力的仪表,一般可分为普通压力表和精密压力表。压力表结构简单、坚固耐用,使用方便,易于维护修理,在基层单位应用普遍。基层单位使用的压力表,绝大部分是普通压力表,一块普通压力表,一年可能要送到计量站溯源两次,计量站压力表一年的检定任务量到达上千台次。而大部分压力表属于机械仪表,表本身并没有提供可供外部读取数据的接口,每次检定压力表,都需要人为的读取数据,再与标准表读数计算得出误差,效率低下,受人为因素影响较大,随着检定业务量的增大,检定人员也会产生视觉疲劳,影响数据的估读,可靠性及准确性都会随着降低。近年来,计算机视觉技术快速发展,为压力表等模拟指针仪表实现自动读数提供了强有力的技术支持,将人眼读数转化为计算机自动读数,避免了人为因素对读数产生的影响,同时提高了读数的精确性及检定效率。
1.系统构成
此系统由三大部分构成,组成框图如图1所示。
仪表部分:在同一压力泵平台上,安装标准表及被检表(以普通压力表为例),检定规程参照《JJG52-2013弹性元件式一般压力表、压力真空表和真空表检定规程》。
摄像头部分:使用特定的镜头及相机对被检表进行拍摄,将图片通过数据线传送给计算机,供后续算法使用。
读数识别系统部分:这是系统核心部分,通过一系列算法获取被检表的读数,从而实现压力表读数的自动识别。
2.系统流程图及主要算法实现
整套系统算法的流程如图2所示。
被检表图像传入计算机,首先对图像进行预处理。对处理后的图像提取指针回转中心及半径,去除半径外的图像,得到感兴趣区域ROI(RegionofInter-esting)。在ROI中,标记刻度线位置及角度,同时标记指针及其所指向的角度,通过对指针所指刻度区间运用角度比例法,得到压力表读数。
2.1图像预处理
图像预处理主要包括图像去噪及图像二值化处理。相机拍摄被检表图像经数据线传入计算机后,因各种原因,图像会带有噪声等干扰因素,会加大后续算法的计算量。本系统通过使用中值滤波来滤除图像噪声。同时为了减少后续算法计算量,我们还需要对图像进行二值化处理。
2.1.1中值滤波
中值滤波是一种典型的非线性滤波技术,基本原理是运用统计排序的方法,用像素点邻域灰度值的中间值来代替该像素点的灰度值,让周围的像素值接近真实值,从而消除孤立的噪声点。该方法在
2.1.2图像二值化
图像的二值化通常通过对图像进行阈值处理来实现。图像阈值处理是一种最基本的图像分割方法,它通过选取一个阈值,将图像各个像素值中大于(或大于等于)和小于等于(或小于)该阈值的像素点分别设置为不同的值,从而形成两个像素值集合,以达到分割对象图像和背景图像的目的。常用的阈值处理方法包括基于最大类间方差法(OTSU)的自适应全局阈值化分割法和基于高斯算子的局部阈值化分割法,此系统选取第二种方法进行分割。
局部自适应阈值基于像素邻域块的像素值分布来计算得到该像素点位置上的分割阈值,其好处是阈值是根据像素点邻域的像素分布来计算得出。其原理为:
{255,/(x,>T(x,
I0,x,)T(x,)
其中T(x,)为当前像素点的领域加权值,其权值为高斯核值,其中采用的二维高斯滤波器函数是
图4为基于OTSU阈值处理及基于高斯算子的局部阈值处理后的图像:
2.2指针提取
为了后续指针及刻度的角度确定并减少算法计算量,需要提前确定被检表的回转中心(即圆心)。在拍摄被检表图像的时候,也可以将图像的中心与表盘的回转中心重合,但人为因素可能带来误差,因此我们要计算得出圆心的位置,避免人为因素影响。
通过观察表盘可以发现,所有的刻度的延长线都经过圆心,同时,指针也随圆心转动,所以指针也经过圆心,求取所有刻度线与指针的交点,即可以得出圆心位置。同时观察图4,除了需要的刻度及指针对象外,图像还有许多其他背景图像,由此,还需要将表盘外圈及文字和数字去掉,尽可能只剩下表盘刻度及指针这些有用的对象,方便后续算法处理。
通过对表盘外圈进行拟合圆操作,可以得到一个大概的圆心位置及其半径,就可以提取感兴趣区域ROI,此系统一共提取两个ROI,分别用于刻度的标记及指针的提取。提取出的ROI如图5所示。
图像中每个像素点,其周围4个水平和垂直的像素称为该像素的4邻域,其周围4个水平和垂直的像素和4个对角相邻像素称为该像素的8邻域,如图6所示。连通域就是在一个像素集合中,所有像素都以一种邻接方式(4邻接或8邻接)相邻接,并与其他像素集合不相邻。将图5(b)进行连通域标记,提取最大一块连通域就能得到指针对象,如图7所示。同时对图5(a)中刻度进行连通域标记。
图6像素点X的4邻域和8邻域
提取到细化后的指针,则需要运用Hough变换从指针图像中提取指针直线方程,一是用于圆心的提取,二是确定指针所指的角度方向。在直角坐标系中,直线的方程可以表示为y=kx+6,其对应在极坐标系中则表示为:r=xcos+ysin0,这就说明直
2.3圆心提取
对图5(a)进行连通域标记后,对每一个刻度用最小二乘法进行线性拟合,得出每条刻度线的直线方程,以便于后续圆心的提取。
最小二乘法的原理:设某条刻度拟合的直线方程为:y=kx+b,则该条刻度连通域内像素点(,1)和直线上(xt,yt)的偏差为:dl=yl-kXi-b最小二
乘法就是计算得到k和b使gd2最小。求取各个刻度直线与指针直线的交点,再取各个交点的平均值,记为圆心。
对刻度进行直线拟合后,选取每个刻度连通域中拟合直线的中点或者该刻度连通域的质心,用于标记其代表的刻度,便于后续读数的计算。标记方法:将所有的标记点按横坐标分为圆心左边部分和圆心右边部分,按照纵坐标大小不同,左边部分从下往上标记,右边部分从上往下标记,即将表盘的刻度从小到大依次标记完成,将标记的结果保存于数组中,数组的索引为刻度的序号,数组值为该刻度对应的角度(角度以表盘6点钟位置为0度,顺时针依次增大)。圆心的结果和刻度的标记如图9所示。
2.4计算指针读数
此系统指针读数计算方法是:刻度值根据其在标记结果数组中的索引值乘于表盘刻度分度值,再加上表盘的最小值来计算,指针的读数用指针所指的角度与相邻的两个刻度的角度比例来计算。由于连通域标记可能会将某些刻度与指针标记在一起(包括指针和刻度重合的情况),所以指针读数计算会有以下几种情况。
设指针的角度为&两个标记的刻度值的角度为和eB、压力值为:va和vb,分度值为F。
第一种情况:
指针读数为:s=H?V+Vb。
"A-廿B
第二种情况(包含指针和刻度重合的情况):指针读数为:s=H??V+Vb。
"A-廿B
第三种情况:
指针读数为:s=H?V+Va。
A-"B
实验验证
该系统在VS2013环境下编写完成,选取的标准表为ConST273数字式压力校验仪,选取的普通压力表的信息如表1所示,实验结果如表2、表3所示。
表2及表3结果表明,自动识别读数精确度要高于人工估读读数,由于角度比例法只在指针所指相邻刻度间进行,比全局使用角度比例法误差更小,说明了这套系统能够用于压力表的读数识别,并且精确度更高,能够避免人为因素干扰,达到了预计需求。
4.结论
本文针对普通的一般压力表的检定读数,提出了基于机器视觉的自动读数方案,通过对压力表图像中指针及刻度线进行连通域标记,求得圆心,并将刻度值进行标记,运用局部角度比例法,计算压力表的读数。通过实验对自动识别读数算法进行了可行性论证,通过实验表明,该方法精确度更高,准确性更好,同时避免了人为干扰因素,提高了压力表检定效率。 |