摘 要:针对现实生活中油舱油位由于油位计读数不准而出现油位亏空或者溢出的情况,提出了一种新的油位计读数自动识别算法。首先,在预处理阶段使用高斯型同态滤波器增强油位计图像对光照的适应性,并通过中值滤波、二值化以及图像形态学等操作突出油位计的指针区域;然后,根据油位计轴心颜色不同于黑色指针颜色这一特殊属性,遍历指针像素找出颜色发生突变的坐标点,进而准确求出油位计的轴心坐标;再根据轴心位置选定包含油位计指针的感兴趣区域,对感兴趣区域进行霍夫变换即可准确地检测出指针位置;最后,以红色为标准分割出油位计的起点和终点位置,进而运用角度法自动识别出油位计的读数。实验结果表明,该方法不但可以提高油位计自动读数的准确率,而且大大降低了识别油位计读数所需要的时间。
关键词:油位计;油位读数;同态高通滤波;遍历像素;霍夫变换
0 引 言
指针式油位计作为一种油位测量仪器,由于其具有价格便宜、结构简单、可靠性高以及能够准确显示油位的读数等优点,在油舱、油库等领域应用广泛[1]。目前指针式油位计读数的识别主要依靠人眼观测来完成,但人工判读的方法存在一定缺陷,如对于处在表盘两个刻度线之间的指针,只能靠主观估计来判断读数,导致读数并不精确[2]。因此,提出一种油位计读数自动识别方法就显得十分必要。
油位计的自动识别关键在于寻找油位计轴心位置和识别指针位置。在寻找轴心位置方面,Alegria等提出了剪影法[3],该方法需要准备两幅油位计的图像,一幅正常图像,一幅缺失指针的图像,通过两幅图像之差就可以得到指针,再进行一些处理就可以得到轴心。这种方法针对不同的油位计需要准备不同的图像,实时性较差。还有一些学者采用Hough圆变换法[4-6],该方法需要先进行边缘计算,再对边缘上的每个点进行计算,求出油位计的圆及圆心。这种方法计算量大,且依赖于参数设置,可能会检测出许多不存在的圆。而在指针位置识别方面,大量学者采用Hough变换进行表盘指针的提取[7-8]。该方法需要对全局像素点进行搜索,具有存储空间大、计算时间长等缺陷[9],且直线检测的效果依赖于参数的设定,鲁棒性不强。Han等提出一种基于改进Hough变换的方法[10],该算法首先使用自适应的中值滤波、图像二值化等操作,然后使用Hough变换提取指针直线,但该算法对于光照强弱不具有鲁棒性。
针对上述问题,在寻找油位计轴心位置方面,根据油位计轴心颜色与指针的黑色存在较大的差异,文中提出一种遍历指针像素的方法来准确地求出油位计轴心位置。同时,在识别指针位置方面,提出一种改进的霍夫变换法来检测指针位置。最后通过实验对算法进行验证。
1 算法总体框架
所提算法的总体框架如图1所示。
图1 油位计自动读数系统框架
为了对油位计进行自动读数,首先需要对采集获得的油位计图像进行必要的预处理,主要包括图像滤波处理、图像增强处理以及边缘提取等步骤;其次采用遍历指针像素的方法识别出油位计的轴心位置,再利用改进的霍夫变换识别出指针的位置,然后根据油位计起点和终点处为红色进行颜色分割,得到起点和终点的坐标;最后运用角度法计算出油位计读数并判断油位状态。
1.1 图像预处理
经摄像头采集的油位计图像易受光照的影响,且在拍摄、传输过程中会携带大量的噪声[11]。为了后续油位计的准确读数,需要对图像进行预处理,包括同态滤波、中值滤波、二值化、形态学处理等操作。
1.1.1 同态滤波处理
针对采集的油位计图像易受光照影响,采用同态滤波器对弱光照下的油位计图像进行增强。同态滤波器是一种依据图像照度反射成像模型原理的频域滤波算法,该滤波器可以改变图像灰度范围和增强图像的对比度[12]。文中采用高斯型同态滤波器H(μ,ν)对油位计图像进行滤波处理,增强了弱光照油位计图像的亮度,提高了图像的对比度。其中高通滤波器H(μ,ν)的计算公式如下:
(1)
(2)
其中,D(μ,ν)是(μ,υ)点距频率矩形中心的距离;Do为截断频率,文中取Do为D(μ,ν)的中值;参数c用来控制同态滤波器的锐化,文中令c=2;参数γH和γL控制H(μ,ν)的变化范围,H(μ,ν)∈[γL,γH],文中令γH=2.0,γL=0.3。
使用高斯型同态滤波器处理结果如图2(b)所示,对于摄像头采集过程中偏暗的油位计图像能起到增亮的效果,同时也增强了油位计图像指针区域与非指针区域的对比度。
1.1.2 二值化与图像形态学处理
因为油位计图像的指针大多是黑色的,而油位计的其他区域大都呈现灰色或者白色,所以可以采用阈值法将指针和其他区域区分开。使用阈值法处理后的二值化图像f(x,y)表示为:
(3)
二值化后的结果图如图2(c)所示;在二值化后的图片中,发现图像中仍然存在着一些细小的干扰点,文中利用形态学中的腐蚀操作进行有效去除,结果如图2(d)所示。
1.2 油位计轴心确定
对于油位计轴心的识别,文中采用遍历指针像素的方法来识别油位计的轴心。可以发现指针轴心的颜色和黑色指针还是存在很大的差异。二值化后的图像中可以发现指针被轴心间断成了两段,根据这一特点,先对形态学操作后的图像进行轮廓提取操作,可以用两个最小外接矩形框框出被间断的两段指针,再分别求取这两个矩形的质心,并求得两个质点的坐标(x1,y1),(x2,y2)。将这两个点进行连线可以在指针上得到一条直线,根据这两个点可以求得这条直线的斜率k以及截距b,从而可得直线方程:
y=k*x+b
(4)
对这一条直线上的像素进行遍历,可以根据RGB来进行判断,找出直线上第一个非黑色的点(X1,Y1)和最后一个非黑色的点(X2,Y2),并记录下来。最后对这两个点的坐标进行求中间点操作,即可得到轴心的坐标(X,Y),如图2(e)所示。
图2 油位计图像指针处理图
X=(X1+X2)/2
(5)
Y=(Y1+Y2)/2
(6)
1.3 指针位置识别
指针的位置识别,大量学者采用了全局的霍夫变换[8,13]。该方法首先把坐标转换到极坐标系下,极坐标系下一条直线可以表示为:
ρ=xcosθ+ysinθ
(7)
其中,ρ表示原点到直线的距离;θ表示直线垂线的倾斜角度。
然后把图像边缘上的每个点带入式7进行计算,并将结果计入累加器A(ρ,θ)。因为同一条直线上的点具有相同的ρ和θ,所以每计算出一对(ρ,θ),则A(ρ,θ)=A(ρ,θ)+1,最后取累加器中最大的值即可得出直线检测结果。该方法需要对所有的边缘点进行计算,计算量大,且容易检测很多不存在的直线,对后续的指针位置确定以及油位计读数的准确性产生较大的影响。
文中采用一种改进的霍夫变换,首先根据检测指针轴心的先序工作,判断指针大致所在的位置,并用最小矩形框框出指针所在的ROI;再在这个小范围内进行霍夫变换以检测指针直线,就可以极大地减少计算量。其次根据指针是最长的这一特点,对检测结果进行判断,仅输出显示最长的那条直线,即检测到的指针,如图2(f)所示。在检测到指针后,可以得到直线的两个端点的坐标,然后根据指针头部到轴心的距离Lh要大于指针尾部到轴心的距离Le的条件(Lh>Le),得到指针头部的坐标为(P1,P2)。
与传统霍夫变换相比,该方法通过对参数空间的限定来减小变换的搜索范围,大大减少了存储空间和计算量,从而提高了计算速度。
1.4 油位计起始及终止位置确定
运用角度法进行油位计的读数[14],油位计的起点、终点位置的确定相当重要。通过观察发现,仪表刻度环上起点、终点处大都有红色的矩形框,因此通过颜色分割[15-16]、轮廓面积的方法来得到起点终点的位置,具体步骤如下:
(1)将图片由RGB转换到HSV颜色空间;之所以选择把图片转换到HSV颜色空间,是因为HSV颜色空间更容易表示一种颜色,H值代表的色调基本上就可以确定某种颜色。
(2)根据红色的H值,制作红色的mask,并用mask与原图像进行betwise_and运算得到感兴趣区域图像,如图3(a)所示。
(3)得到的感兴趣区域图像中存在一些细小的干扰点,需要进行腐蚀操作,去除非感兴趣的干扰点,再进行膨胀操作扩大红色区域的边缘,结果如图3(b)所示。
(4)运用轮廓法把起点、终点的矩形标记出来,并求得矩形的质心,则两个质心的坐标对应于起点、终点的位置坐标(K1,D1),(K2,D2),结果在原图上显示,如图3(c)所示。
图3 油位计起始及终止位置确定过程
1.5 油位计读数
采用角度法[14]对指针式油位计进行读数,根据前文求出的轴心坐标(X,Y),指针位置(P1,P2),起点、终点坐标为(K1,D1),(K2,D2)。通过向量夹角的方法可以求得刻度0和10之间的角度α,则带刻度的表盘角度为360-α,油位计的每一刻度之间的夹角为γ:
γ=(360-α)/10
(8)
再根据计算得到的指针头部坐标(P1,P2)和起点、终点的位置(K1,D1),(K2,D2),计算出指针和0刻度线之间的夹角β,则油位计的读数θ可以按照如下公式计算:
(9)
2 实验结果分析
2.1 不同光照下仪表读数算法准确性的验证与分析
为了验证文中算法在不同光照条件下读数的有效性,实验选取了不同光照下的仪表图像(弱光照、强光照以及正常光照)来进行实验。仪表图像如图4(a)所示,表1为不同光照条件下的读数相较于人工读数的误差。
表1 不同光照条件下油位计读数误差分析
2.2 仪表读数算法验证与分析
为了说明文中读数方法的有效性,实验选取了不同厂家生产的十张油位计图像,它们的指针都指向不同的位置,计算仪表读数与人工读数之间的相对误差以及读数所需运行时间;同时比较了文中读数方法与采用全局霍夫变换方法[5-6]的性能。不同仪表识别结果如图4(b)~(e)所示,程序读数运行时间和相对误差分析见表2。
图4 不同油位计的读数识别结果
表2 油位计读数程序运行时间和相对误差分析
从表中数据分析可得,文献[6]算法通过直方图计算最佳阈值来进行二值化预处理,然后使用霍夫变换检测轴心,因为在二值化预处理时未考虑到光照条件对油位计读数的影响,所以对采集时光照较暗的油位计进行读数误差较大。文献[5-6]均采用全局霍夫变换检测轴心的方法,该方法依赖于参数的设定,检测出的圆心位置可能不准确,从而导致最终的读数出现误差较大。而利用文中算法进行油位计的读数,在读数相对误差和读数所需时间上都要优于文献[5-6]中的算法。主要是因为文中算法在图像预处理阶段使用了同态滤波器等,可消除采集时光照强弱对于油位计图像的影响,提高读数的准确性;提出的遍历指针像素的方法可以很好地记录下指针上的突变颜色,从而可以较准确地检测出指针轴心的位置,减少了计算搜索量;并且使用改进的霍夫变换可以大大减少搜索指针位置的时间,提高程序读数效率。
3 结束语
提出了一种改进的指针式油位计读数识别算法。该算法首先对油位计图像进行同态滤波、中值滤波等必要的图像预处理操作以消除图像采集过程中受到的光照以及噪声影响,提高算法对不同光照的适应性;然后对二值化和形态学操作处理后的油位计图像进行指针轮廓的查找,创新性地遍历指针的颜色,记录下非黑色区域的坐标,从而准确得到油位计的轴心;根据轴心位置,可以大致确定包含油位计指针的感兴趣区域,并在这个区域内进行霍夫变换来检测指针,避免了对全局的边缘点进行搜索,大大减少了计算量和程序运行的时间,提高了查找的准确率;将油位计图像转换到HSV颜色空间下,因为油位计起点、终点处为红色,所以根据红色的H值进行起点、终点的分割,从而得出油位计的起点、终点的坐标位置;最后根据角度法可以读出油位计的读数。实验结果表明,该算法具有较高的准确率,程序运行时间较短,且能够适应多种光照条件,有较高的鲁棒性。