基于机器视觉的自动仪表盘指针检测研究*
2022-01-27郝永飞唐旭晟程良利
郝永飞,唐旭晟,程良利
(福州大学 机械工程及自动化学院,福建 福州 350108)
0 引 言
作为汽车的信息显示中心,汽车仪表负责将汽车的状态实时反馈给驾驶员,因此,汽车仪表的检测对于汽车驾驶的安全性和正确性至关重要[1]。其中,指针检测是汽车仪表检测的重要环节,如速度表、转速表、油量表等都是通过指针来显示。
传统的汽车仪表检测主要还是由人眼目测,存在效率低、易出错的缺陷。而将机器视觉技术应用于仪表检测中,无疑能够克服人工检测的不足,实现仪表的自动化检测。目前,国内外学者在指针识别方面做了许多研究。
SELVATHAI T等人[2]使用Hough圆变换提取了仪表中心坐标,通过Hough累加空间中峰值的位置定位指针,并利用其相对坐标系的角度识别读数;Hough变换的鲁棒性强,但其计算量大,且需要较大的存储空间。周泓等人[3]根据指针颜色特征信息,把仪表图像从RGB模型转换到HSI模型,将色调和饱和度分量作为特征参数,提取了指针区域,采用Hough变换提取了指针直线,并识别了其读数。吴欢欢等人[4]利用图像减影法获取了指针区域,随后通过定位圆法确定了指针位置,并对读数进行了识别;但该图像减影法受图像噪声的影响较大。郑文学等人[5]采用模板匹配和极坐标变换等方法对指针读数进行了识别;但其模板的匹配需要预先标定仪表模板,因此,模板的好坏直接影响着指针检测的效率。
笔者基于迭代加权的最小二乘法拟合指针直线,通过最小距离和的交点法定位回转中心后,实现对指针读数的识别。
1 仪表检测系统组成
1.1 总体组成
仪表检测系统主要由4个部分组成:检测软件、仪表驱动系统、机器视觉系统和仪表工装系统。
系统总体框架如图1所示。
图1 检测系统总体框架
该系统的计算机采用i7-9700K处理器,处理速度为3.60 GHz,能够满足实时采集需求。基于Visual Studio 2015平台,笔者采用MFC作为图形界面开发框架,开发了仪表检测软件;同时采用OpenCV视觉算法库,实现了对仪表图像的预处理和识别判定。系统中的检测软件主要负责控制驱动信号的发送、仪表图像的采集和仪表检测算法的执行等操作。
仪表驱动系统的作用是代替汽车实现对仪表的驱动,即在检测软件的控制下,通过输出驱动信号,来模拟汽车仪表在实际工作时的各类状况信息。该系统主要包含脉冲信号、三态门信号、电压信号和电机驱动信号等,以满足大部分仪表的信号需求。
机器视觉系统采用德国The Imaging Source公司的DFK 33GP006彩色工业相机,该相机遵循Gige接口标准,支持外触发以及数字I/O输入,最高分辨率可达到2 592×1 944,能够满足仪表检测的实际需求。
镜头选用OptoEngineering镜头,型号为EN5MP1216,最大畸变0.35%。相机结合固定焦距镜头形成图像采集模块,通过网卡接口与工控机进行图像信息传输。相机通过开关式磁力座固定在设备顶部,并使镜头竖直向下正对仪表工装。该系统在封闭的室内检测仪表,利用仪表自带的背景光作为光源,获取的图像质量能够满足检测的需要,并安装碗型LED光源为没有背景光的仪表补充照明。
仪表工装系统主要用于对仪表进行固定,防止仪表在检测过程中移动或偏转,且能使仪表每次被放下时都正面竖直向上。针对不同的表型,需设计特定的工装,以保证仪表放置的一致性。同时,笔者在工装上安装传感器来判断是否存在仪表、仪表是否被检测。
1.2 检测软件
检测软件主界面如图2所示。
图2 软件主界面
图2中,界面主要分为操作区、图像显示区、测试点显示区、检测报告显示区和状态显示区5个部分。操作区主要负责仪表检测的启动,设备启动后,在图像显示区可实时显示仪表状态,设备按照测试点显示区中配置好的检测项对当前仪表进行检测,并将检测结果显示在检测报告显示区。
仪表检测之前,首先要在参数配置界面中配置被检仪表的基本参数和检测项参数。表型基本参数主要为:表型名称、表型类型、供电电压等。检测项参数则是根据仪表特性来定义的检测项目,如指示灯检测、指针检测、段式计数识别等。
笔者主要介绍仪表的指针检测。
2 仪表指针检测流程
汽车仪表形式多样,而且仪表指针的类型也各不相同。为了实现指针检测的通用性,在该系统中,笔者依据仪表指针颜色与其背景的关系,将各类仪表分为如下两类:
(1)A类。指针颜色与背景色差异明显;
(2)B类。指针的颜色与背景色相近,对比度不明显。
该系统采集的A、B类仪表图像如图3所示。
图3 指针仪表图像
仪表指针检测前,首先由人工确定该类仪表的指针类型,并在软件中预先配置相应的仪表参数。
指针检测流程如图4所示。
图4 指针检测流程图
3 指针定位与识别
3.1 A类仪表指针定位
3.1.1 指针粗定位
指针粗定位是将指针从背景中分离出来,得到清晰完整的指针区域。其详细算法步骤如下:
(1)图像灰度化。为减少处理的数据量,笔者首先将采集的仪表图像转为灰度图像,即基于心理学对彩色图像的RGB 3个分量进行加权平均,选取3个分量的权值比为3 ∶6 ∶1[6],即:
Gray=0.299R+0.587G+0.114B
(1)
式中:Gray—加权平均后的灰度值;R—彩色图像的红色分量;G—彩色图像的绿色分量;B—彩色图像的蓝色分量。
(2)图像滤波。由于采集到的仪表图像可能含有脉冲噪声,采用中值滤波处理图像,滤波模板选用尺寸大小为3*3正方形模板;
(3)对比度拉伸。对比度拉伸[7]是通过缩放图像的灰度值来提高目标区域与背景区域的对比度。此处笔者采用线性灰度拉伸,其定义如下:
g=G*Mult+Add
(2)
式中:g—缩放后的灰度值;G—原图像灰度值;Mult—灰度值缩放因子;Add—灰度值偏移量。
(4)图像二值化。笔者采用最大类间方差法[8]来进行图像二值化处理。其基本思想是将目标与背景的分割阈值记作T,则类间方差可表述为:
g=ω0ω1(μ0-μ1)2
(3)
式中:g—类间方差;ω0—目标像素点在整幅图像的分布概率;ω1—背景像素点在整幅图像的分布概率;μ0—目标像素点的平均灰度;μ1—背景像素点的平均灰度。
笔者通过遍历的方式求得使类间方差g最大的分割阈值T。
二值化后的图像如图5所示。
图5 二值图像
(5)特征选择。笔者采用连通域标记算法[9]提取二值图像的连通成分。指针区域与背景区域在长度和面积特征上区别明显,选取合适的阈值即可提取指针区域。此时指针边缘不平整,存在凸起和凹坑,笔者采用凸包[10]来平滑指针边缘。
凸包前后的指针区域如图6所示。
图6 凸包前后指针区域
3.1.2 指针精定位
长条状的指针不利于后续的读数识别,因此通过精定位将指针拟合为一条直线,主要分为两步来实现,即指针细化和拟合指针直线。
(1)指针细化。即在粗提取的指针区域中去掉一些点,得到指针的中心轴。
设粗提取的指针像素集合为A,用结构元B腐蚀和开操作,完成集合A的骨架提取[11]。提取集合A的骨架S(A)的算法定义如下:
(4)
式中:S(A)—指针像素集合A的骨架;A—指针像素集合;i—集合A被腐蚀为空集前的迭代次数。
其中:Si(A)=(AΘiB)-(AΘiB)°B。
细化后的指针骨架如图7所示。
图7 指针骨架
(2)拟合指针直线。拟合直线最常用的方法是最小二乘法[12],其通过求取样本点偏差平方和的最小值来确定最佳拟合直线。
其直线的截距式公式为:
y=ax+b
(5)
式中:a—直线斜率;b—y轴上的截距。
则平方差之和定义如下:
(6)
式中:(xi,yi)—指针细化后的样本点。
但对于大的离群点而言,最小二乘法的鲁棒性不强。为减少这些离群点的影响,笔者为每个样本点引入权重,则加权后的平方差之和定义如下:
(7)
式中:Wi—每个样本点的权重。
应用加权最小二乘法时,权重W的取值不同,解出的参数a和b也会不同,拟合出的直线也不一样,因此,权重W的合理选取至关重要。
为了确定权重W,以便拟合出比较理想的指针直线,笔者在此引入Tukey权重函数,即先计算样本点到直线的距离,再由各点距离来分配权重大小的鲁棒性的方法。它可以有效剔除异常点,且能让其他样本点的权重得到合理分配。
Tukey权重函数W(δ)定义如下:
(8)
式中:δ—样本点到直线的距离;γ—削波因数。
经试验,笔者选取γ为2。由式(8)可得,δ大于γ的点为离群值点,其权重W(δ)为0,这些点被剔除,不参与直线拟合;其他点的权重W(δ)在0~1之间,越接近理想拟合直线的样本点,其所分配到的权重也就越大。因此,该方法可以将离群值点所产生的影响降到最低。
在引入Tukey权重函数后,通过迭代法拟合指针直线的步骤如下:
(1)第一次迭代,使用权重W(i)=1(i=1,2,3…n),即采用标准的最小的二乘法拟合得到一条近似指针直线y;
(2)计算所有样本点到近似直线y的距离δ(i),再由Tukey权重函数计算每一点的权重W(i);
(3)将步骤(2)求出的每一点的权重W(i)代入式(7),通过加权最小二乘法拟合出一条新的近似指针直线y;
(4)重复步骤(2,3),反复求取权重W(i)和近似指针直线y;当获得理想的指针直线时,则迭代结束。
改进最小二乘法拟合的指针直线如图8所示。
图8 改进最小二乘法拟合直线
图8中,指针直线与骨架中间的所有点几乎重合,这表明拟合效果的比较理想。
3.2 B类仪表指针定位
用上述指针粗定位算法提取B类仪表指针时,由于指针与背景对比度不明显,提取的指针上端部分与刻度区域有粘连,这不利于采用4.2节中的算法实现指针的精定位。因此,笔者设计了一种结合灰度法和基于Tukey权重函数的迭代加权最小二乘法的新方法,以此来实现B类仪表的指针精定位。
首先,笔者同样采用上述指针粗定位算法对ROI区域截取的B类仪表图像进行了处理,得到了有粘连的指针区域,求取了该粘连指针区域的最小外接旋转矩形,并进行了膨胀处理,随后沿长轴方向均匀地取n条平行于短轴的线段。
粘连指针区域最小外接矩形如图9所示。
图9 粘连指针区域最小外接矩形
若某根线段划过指针,则沿该线段可得到对应区域像素点的灰度值依次为255,255,…,0,…,0,255,255,…。设灰度值255,255,…,0变化,产生的边缘点为第一类边缘点A,即由白到黑产生的边缘点;设灰度值0,255,255,…变化,产生的边缘点为第二类边缘点B,即由黑到白产生的边缘点。
笔者将得到的A、B两类边缘点,分别作为拟合指针两边缘直线的样本点,其中的离群点在后续拟合指针直线的算法中予以去除。
拟合的指针直线如图10所示。
图10 拟合的B类仪表指针直线
图10(a)中,指针直线为两边缘直线所形成夹角的角平分线。图10(b,c)中,为A、B两类边缘点拟合的边缘直线。
由此可以看出,求取的指针直线效果理想;若拟合得到的两边缘直线是平行线,则取它们的中心线作为指针直线。
3.3 指针回转中心定位
精准定位指针的回转中心对后续指针读数起着关键的作用。目前常用的两种方法为交点法[13]和刻度圆心法[14]。
交点法通过拟合指针处于两个刻度位置的直线方程,将求得的交点坐标作为指针回转中心。但若仪表有轻微移动,或拟合的指针直线方程有误差时,求得的指针回转中心就会有误差。
刻度圆心法直接把刻度的外接圆圆心或者刻度点的拟合圆圆心作为指针回转中心。该方法对刻度提取的精度要求高,稳定性和通用性比较差。
笔者提出一种最小距离和的交点法,即求出一点与多个指针直线交点的距离和最小,把该点作为指针回转中心。该算法的具体步骤如下:
(1)采集仪表指针在不同刻度位置的多幅图像;
(2)利用上述改进的最小二乘法拟合这些图像中的指针直线;
(3)计算两条直线的相交点,设不同刻度位置的图像数量是m,则交点个数为n=m*(m-1)/2;
(4)则所有交点到回转中心的距离和L为:
(9)
式中:(a,b)—回转中心;(xi,yi)—两两直线的相交点。
当距离和L为最小时,求得回转中心横坐标a为:
(10)
式中:xi—两两直线相交点的横坐标。
同样,求得回转中心纵坐标b为:
(11)
式中:yi—两两直线相交点的纵坐标。
(5)回转中心修正。由步骤(4)求出初定的回转中心坐标(a,b)后,则可以求出每一个交点到回转中心的距离Di。设置距离阈值d,当有交点距离Di>d时,该点予以剔除,不参与后续计算。
改进的交点法可以降低仅两条指针直线相交带来的随机误差,提高回转中心的定位精度,以便于后续的读数准确识别。
3.4 指针读数识别
此处笔者采用角度法[15]来识别指针读数。笔者首先计算当前指针直线与基准直线的角度,再将该角度与整体量程的角度进行比例换算,得出指针的读数。其具体过程如下:
首先以已求得的指针回转中心为原点,水平向右为X轴正向,竖直向上为Y轴正向,建立直角坐标系;
以坐标轴X正方向为起始,逆时针旋转,角度在第一、二象限时为正角度,角度范围为0°~180°;顺时针旋转,角度在第三、四象限为负角度,角度范围为0°~-180°;
设零刻度时指针直线为基准直线,角度为α1,指针偏转后的角度为α2。根据起始刻度所在象限的不同,可分别确定指针偏转角度的计算公式。
起始刻度在第三象限的指针转角如表1所示。
表1 起始刻度在第三象限的指针转角
起始刻度在第四象限的指针转角如表2所示。
表2 起始刻度在第四象限的指针转角
则指针读数V为:
(12)
式中:V—指针读数;α—指针偏转角度;β—整体量程对应的角度范围;R—仪表的整体量程。
4 实验与结果分析
笔者将图3中的两款仪表分别放在该检测系统中进行指针检测,即通过对被检仪表施加不同的驱动信号,使得仪表指针偏转,并由系统中的检测算法获取对应的测试值,同时根据驱动信号的大小查得被检仪表相应的理论偏转值,偏差为二者相减所得。偏差若在规定的范围内,则认定该仪表合格。
A类仪表检测结果如表3所示。
表3 A类仪表检测结果
B类仪表检测结果如表4所示。
表4 B类仪表检测结果
实验结果显示:该系统检测值与理论偏转值之间的误差均在1%以内,并且读数识别时间约为200 ms左右。该结果证明,该算法具有较好的精度,能够满足汽车仪表指针检测的实际需求。
5 结束语
针对传统的汽车仪表检测中存在的效率低、精度不高等问题,笔者将机器视觉应用于汽车仪表的检测,设计出了一种通用型的指针检测算法及其检测系统,并采用该仪表检测系统对A、B两类仪表进行了检测实验,并得出了以下结论:
(1)将仪表指针分为两类,分别采用骨架提取和灰度法获得拟合指针的样本点,在迭代加权的最小二乘法中引入Tukey权重函数,取得了理想的拟合效果;
(2)实验结果表明,该算法可以准确地识别指针的示数,其检测值与理论偏转值的误差在1%以内,同时识别速度也能满足实际检测的需要。
采用该检测系统进行仪表检测之前,需要预先配置较多的参数,这给检测带来了一定的麻烦。因此,在后续的研究中,笔者将在算法参数自适应方面进行研究,以尽量减少检测系统需要配置的参数数目。