标准金属量器液位图像识别装置的研制

2016-10-28 03:14张海鹏赵不贿石建荣
计算机测量与控制 2016年7期
关键词:量器调平液面

张海鹏,赵不贿,石建荣,肖 晖

(1.江苏大学 电气信息工程学院,江苏 镇江 212013;2.镇江计量检定测试中心,江苏 镇江 212132)

标准金属量器液位图像识别装置的研制

张海鹏1,赵不贿1,石建荣2,肖 晖2

(1.江苏大学 电气信息工程学院,江苏 镇江 212013;2.镇江计量检定测试中心,江苏 镇江 212132)

在使用标准金属量器对液体进行计量过程中,传统的人工读取液位的方法测量效率和准确度都比较低;提出了一种高精度的标准量器液位图像识别装置,该装置主要由水平调整和图像处理两部分组成,选用S3C2440 ARM芯片和Linux嵌入式系统作为硬、软件平台;水平调整是通过SCA100T双轴倾角传感器测量标准金属量器的倾角并控制步进电机自动调整,实现闭环控制;对采集的液位图像,由OpenCV进行灰度化、滤波、边缘检测、液位提取,再经过标定计算转换成实际液位高度;实验结果表明该方法能快速测量液位,精度高,应用于燃油加油机计量检定装置上,有较好的推广价值。

标准金属量器;液位图像识别;自动调平;嵌入式系统;OpenCV

0 引言

液位检测在高精度计量中对计量结果的精度具有决定性的影响,如燃油加油机检定装置的油位等。对于封闭的金属量器,传统的方法是在示液管旁固定一个游标读数机构,通过人工滑动游标,目测液位高度[1]。而现有的液位传感器,如磁致伸缩液位计、光导液位计等,解决了自动化读取液位的问题,但传感器与液体接触,参与了检定计量过程,破坏了标准量器原有的结构。而一些非接触式液位传感器又存在精度问题,如超声波传感器的测量准确度不超过0.5%FS[2],无法满足高精度液位测量的需求。本文给出了一种标准金属量器液位图像识别装置,带有自动调水平功能,这种非接触式液位测量装置,其分辨率高达0.1 mm,解决了液位自动计量系统中的关键问题。

1 系统结构设计与硬件模块选择

1.1 系统结构设计

装置采用先进的嵌入式自动调平和图像处理技术来提高量器液位计量的自动化程度和精确度,提出了嵌入式液位自动计量解决方案。装置主要由3个部分组成:嵌入式ARM控制器、调平机构、图像采集模块,如图1所示。

图1 系统硬件构架

1.2 处理器模块的选择

系统中的硬件平台选用的是基于ARM920T内核的S3C2440处理器,主频400 MHz[3],并外接了摄像头模块、倾角采集模块、LCD触摸屏模块、步进电机驱动模块等,如图2所示。

图2 嵌入式设备系统结构

1.3 装置调平模块的选择与设计

为了能高精确测量标准量器液位高度,需避免示液管倾斜带来的测量误差。系统设计了一套自动化调平机构,由倾角传感器、ARM控制器、步进电机、滑动丝杆构成,形成闭环控制系统。控制器自动采集双轴倾角传感器的倾角值,将采集到的倾角值进行PID计算并发出脉冲信号控制两只步进电机使标准量器自动调平。

倾角传感器选用SCA100T双轴倾角传感器,SCA100T是基于3D-MEMS的高精度双轴倾角传感芯片。它具有弱的温度依赖性、高分辨率、低噪声、且对震动不敏感等特性。ARM控制器通过SPI通信方式采集倾角传感器的X和Y轴角度。

调平装置装有3个撑脚,呈等腰直角三角形分布。其中一只撑脚长度固定,作为水平的基准点,另外两只撑脚由步进电机和可调丝杆组成。

根据处理器采集的两轴倾值,判断X轴和Y轴的倾角值是否在±0.5°之间,如果倾角值在这个区间,停止调平。如果不在,根据差值经过PID计算,控制器发出脉冲信号控制电机进行调平。自动调平流程如图3所示。

图3 自动调平流程图

PID闭环控制算法是工业控制中最常用的算法之一,P代表比例增益,实际就是放大倍数。I代表积分时间,增加控制稳定性。D代表动作积分,根据变化的趋势进行调节[4]。系统的自动水平调节系统由倾角传感器的输出控制步进电机的动作,而步进电机的动作又影响了倾角传感器的输出,由此构成一个闭环的系统。PID控制的公式如式(1)所示。

(1)

1.4 液位图像采集模块的选择与设计

ARM控制器通过USB外接摄像头,实时采集液位图像。摄像头选用的型号为QSC500的工业相机,其性能指标如表1所示。

表1 摄像头性能参数

采集图像过程要避免外界光源的干扰,将摄像头和示液管封装在一个暗箱里。在较细的玻璃示液管中,液面不是水平面,由于水与玻璃管内壁的吸附作用,边缘的液面比中间液面高出一点,液面总体呈现下凹抛物面[5],在暗箱内玻璃示液管的后端放一只平行光源,光从空气射像凹液面会折射光,摄像头拍摄的图像在凹液面处会有一条黑色的凹线条,液位成像示意图如图4所示。

图4 CCD成像示意图

2 液位图像的分析和处理

液位检测过程中最重要是液位线的提取,液位图像的识别主要包括五步:读取液位图像,灰度化处理,高斯滤波,边缘检测,液位线提取。

2.1 液位图像的获取

进行液位图像分析和处理,需要先获取液位图像,系统使用嵌入式USB数字摄像头采集液位图像。OpenCV中提供了图像采集API 函数[6]:

CvCapture* cvCreateCameraCapture( int index );

其中,index是 要使用的摄像头索引。系统只有一个摄像头,参数值取0,系统采集的液位图像如图5(a)所示。

2.2 液位图像前期处理

由于光线、CCD镜头、背景等干扰的影响下,采集到的液位图像存在一定无用的干扰信息。因此,有必要对采集到的液位图像进行数字处理,增强图像中的有用信号[7]。对液位图像的预处理是液位检测的前期工作,有利于液位线的提取。

2.2.1 图像灰度化

待检测的液位图像包含大量的颜色信息,这些信息会干扰液位图像的识别,因此首先要对液位图像进行灰度化处理,以过滤掉与液位识别信息无关的数据。按照公式(2)中对RGB三分量进行加权平均能得到较合理的灰度图像。

RGB=B*0.114+G*0.587+R*0.299

(2)

这个转换过程可以用OpenCV 中的函数来实现,这个函数的原型为:

void cvCvtColor(const CvArr*srcCvArr*dst,int code)

其中:src—输入的图像;dst—输出的图像;code—色彩空间转换。图5(b)是对图像进行灰度化后的结果。

2.2.2 图像滤波

液位图像采集时易受各种环境干扰的影响,因此采集的液位图像会出现噪声,为了减少噪声带来的干扰,需要用到降噪滤波器对液位图像数据处理。在图5(b)图像中含有各种干扰信息,系统采用高斯滤波的方法将其去掉。高斯滤波器是根据高斯函数的形状来选择权值的线性平滑滤波器,常用二维零均值离散高斯函数做平滑滤波器,函数表达式如下:

(3)

OpenCV中提供了图像滤波函数:

void cvSmooth (const CvArr*src,CvArr*dst,int smoothtype=CV_GAUSSIAN,int param1=3,int param2=0,double param3=0);

根据参数smoothtype 的不同可实现不同方式的滤波,系统使用CV_GAUSSIAN对液位图像进行高斯卷积,其处理结果如图5(c)所示。

2.3 液面刻度线提取

2.3.1 边缘检测

液位图像经过前期的灰度化和滤波处理后,得到的是与液位识别信息相关的数据,然后需要提取液位边缘轮廓。系统采用边缘检测的方法提取液位边缘轮廓,并使用Canny算法[8]来实现液位边缘检测。具体步骤是:首先平滑图像,去除液位图像中的噪声;然后求梯度运算,利用导数算子得到每个像素的梯度辐值|G|和方向e,即求出边缘的强度及其方向:

(4)

(5)

接着对梯度进行“非最大值抑制”, 这一步的目的是将模糊的液位边界变得清晰;

其次使用双阀值方法对经过“非最大值抑后”的所有边缘点处理;最后进行边缘连接。

OpenCV中提供了图像边缘检测函数:

void cvCanny( const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size=3 );

其中,image—单通道输入图像;edges—单通道存储边缘的输出图像;threshold1—第一个阈值;threshold2—第二个阈值;aperture— 算子内核大小;threshold1和threshold2 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。其处理后的图像如图5(d)所示。

图5 图像处理过程

2.3.2 计算液位的像素高度

首先找出上下两个标定点坐标和液面凹液面重心点坐标(将凹液面图形的重心点坐标作为凹液面读取点),下标定点到凹液面坐标点Y轴像素值之差就是示液管液位像素高度。图6(d)中提取的液面图形不是规则图形,要找出不规则图形的重心坐标点,先计算液面不规则图形的矩,利用目标所占区域的矩作为形状描述参数。矩可以用于二值或灰度级的区域描述。对于离散强度图像x(i,j),p+q阶原点矩定义为:

(6)

其中i,j,p,q是区域点的坐标(在数字图像中的像素坐标)。令XC,YC表示区域重心的坐标,则:

(7)

(8)

M10、M01表示提取的X、Y阶中心矩,M00表示不规则区域的面积。凹液面处理效果如图6所示。

图6 凹液面图形重心点处理效果

在OpenCV中,可以很方便的计算多边形区域的特征矩,可以使用cvGetSpatialMoment算子来计算二值图像的矩信息。处理函数如下:

static int aoiGravityCenter(IplImage *src, CvPoint ¢er)

{

double m00, m10, m01;

CvMoments moment;

cvMoments( src, &moment, 1);// 计算多边形三阶的所有矩

m00 = cvGetSpatialMoment( &moment, 0, 0 ); //区域的面积

m10 = cvGetSpatialMoment( &moment, 1, 0 ); //从矩状态结构中提取 x 次空间矩

m01 = cvGetSpatialMoment( &moment, 0, 1 ); //从矩状态结构中提取 y次空间矩

//计算重心

center.x = (int) (m10/m00); //x轴重心坐标

center.y = (int) (m01/m00); //y轴重心坐标

return 0;

}

图像处理后取得重心坐标点和相应的Y轴坐标线的图像如图5(e)所示。

2.3.3 系统的标定

度M,则液位的实际高度:

(8)

3 试验结果与分析

3.1 实验结果

数字USB摄像头采集的图像像素为1 600×1 200b,示液管的高度为L=200.00mm,通过openCV中cvResize算子将图像高度分辨率N=2 000,数字USB摄像头支柱距示液管中心距离为150mm,摄像头中心线下测距离暗箱底部100mm,在Linux平台下,对10幅计量示液管图像进行了测试,并与相应的人工读取游标卡尺的值进行对比,最终结果统计如表2所示。

表2 图像识别与人工读数比较

3.2 误差分析

液位图像识别过程中造成测量误差主要由以下几个原因:

(1)图像畸变产生的误差 图像的畸变主要包括拍摄的液位图像时产生的几何畸变。

(2)玻璃液位计倾斜带来的误差 由于地面不平会造成玻璃液位计的倾斜,系统中使用自动调平来减小玻璃液位计倾斜带来的误差。

(3)摄像头和凹液面的距离随着液位的改变而变化带来的误差 由于液位会上下浮动,距离摄像头的距离会发生改变,距离摄像头水平面的距离越大,带来的误差会随之增大。因此测量时尽量缩短玻璃管的长度。

由表2可见,在误差允许范围内,图像识别与人工读数结果很接近,绝度误差都在±0. 5 mm内,这验证了液位图像检测具有较高的测量精度,可以满足液位检测精度要求。

4 结论

本文设计了一种关于标准量器液位的自动计量的方法并测试完成,分辨率为0.1 mm,在燃油加没机计量检定测试中,完全能够取代人工测试。从而克服了人工读取液位的繁琐、耗时以及误差大等问题,提高了计量检定测试的速度、效率、精度和自动化程度。

[1] 中国计量科学研究院.标准金属量器检定规程[M].北京: 中国计量出版社,2005.

[2] 赵 刚,唐得刚.几种常用的液位在线检测方法的比较[J].中国仪器仪表,2005,(5):36-40.

[3] 张毅刚.嵌入式应用设计[M].黑龙江:哈尔滨工业大学出版社,1997.

[4] 王 敏,秦肖臻.自动控制原理[M].北京:北京化工出版社,2003.

[5] 胡春海.玻璃液位实时监测系统的研究[J]自动化与仪表,2000,15(2):9-11

[6] 陈胜勇,刘 盛.基于OpenCV的计算机视觉技术实现[M].北京:科学出版社,2008

[7] 刘治锋.基于图像的水位自动检测研究[D].南京:南京理工大学,2004.

[8] 雷丽珍.数字图像边缘检测方法的探讨[J].测绘通报,2006(3):40-42.

Development of Standard Metal Tank Liquid Level Measuring Device Using Image Recognition

Zhang Haipeng1,Zhao Buhui1,Shi Jianrong2,Xiao Hui2

(1.College of Electrical and Information Engineering, Jiangsu University ,Zhenjiang 212013,China;2.Zhenjiang Measuring and Testing Center,Zhenjiang 212132,China)

In the course of using standard metal tank for liquid metering, the traditional method of measuring the level of human-readable is inefficiency and inaccurate.Putting forward a high-precision standard metal tank level image recognition device which is mainly composed of the level adjustment and image processing,choosing S3C2440 ARM chips and Linux Embedded system as a hardware and software platform. level adjustment is implemented by measuring the inclination of tank by SCA100T axis inclinometer sensor and controlling stepper motor to automatically adjust, realizing closed-loop control; Processing the acquired liquid level image by OpenCV,including graying, filtering, edge detection, liquid extraction, and then after converting into actual level height through calibration. Experimental results show that this method can measure the level with high speed and precision, and it have a better promotional value used in fuel dispensers verification device.

standard metal tank;level adjustment;level image recognition;embedded system;OpenCV

2015-12-28;

2016-02-29。

张海鹏(1988-),南,河南信阳人,硕士研究生,主要从事嵌入式方向的研究。

赵不贿(1957-),男,江苏镇江人,教授,博士研究生导师,主要从事Petri网方向的研究。

1671-4598(2016)07-0205-03

10.16526/j.cnki.11-4762/tp.2016.07.055

TP391 文献标识码:A

猜你喜欢
量器调平液面
常用玻璃量器计量检定工作中应注意的事项
李学军运用调平归源法治疗慢性萎缩性胃炎经验
分子热运动角度建立凹凸液面饱和蒸气压的物理图像∗
皮带自移机尾自动调平策略研究
常见液体量器的误差分析及其正确选用
吸管“喝”水的秘密
林用二自由度自动调平平台的研究
GY-JLY200数据记录仪测试动液面各类情况研究
发射平台液压调平控制系统型谱研究
玻璃量器的清洁度对衡量法检定结果的影响