1.基于图像处理的指针式仪表读数方法,其特征在于包括如下步骤:
步骤1:从仪表xml配置文件中读入事先标定的仪表图片文件名、仪表最小刻度值V1、仪表最小值识别区域R1=(x1,y1,W1,H1)、仪表最大刻度值V2、仪表最大值识别区域R2=(x2,y2,W2,H2)、表盘识别区域R3=(x3,y3,W3,H3)和屏蔽区域R4=(x4,y4,W4,H4),其中,(x1,y1)表示仪表最小值识别区域的左上角坐标,W1和H1分别表示仪表最小值识别区域的宽度和高度,(x2,y2)表示仪表最大值识别区域的左上角坐标,W2和H2分别表示仪表最大值识别区域的宽度和高度,(x3,y3)表示表盘识别区域的左上角坐标,W3和H3分别表示表盘识别区域的宽度和高度,(x4,y4)表示屏蔽区域的左上角坐标,W4和H4分别表示屏蔽区域的宽度和高度;
步骤2:读入当前指针式仪表图像F1;
步骤3:计算仪表最小值和最大值刻度的斜率Kmin和Kmax;
步骤4:从步骤2)的图像F1中复制R3区域的子图像,称为表盘识别区域图像F3;
步骤5:对步骤4)的F3进行双边滤波,然后转化为灰度图,再采用OTSU方法进行二值化,并将其中R4区域信息删除,最后使用Canny算子得到表盘边缘信息图FC3;
步骤6:进行指针粗定位;
步骤7:对指针进行精确定位,计算指针所在直线的斜率Kp:
步骤8:计算指针指向刻度和最小量程之间的角度θ:
步骤9:指针式仪表图像F1中的读数为V:
2.根据权利要求1所述的基于图像处理的指针式仪表读数方法,其特征在于步骤3)中的计算仪表最小值和最大值刻度的斜率Kmin和Kmax,具体为:步骤3.1:从步骤2)的图像F1中复制R1区域的子图像,设为Fmin;
步骤3.2:将步骤3.1)的Fmin转化成灰度图,并采用OTSU方法进行二值化,然后采用Canny算子得到最小刻度的边缘图像FC1;
步骤3.3:采用Hough方法进行直线检测,提取步骤3.2)的图像FC1中的线段,得到最小值线段集合L1={li|i=1,2,…,n1},li表示L1中第i条线段,n1表示线段数量;
步骤3.4:计算步骤3.3)的集合L1中线段的斜率和中点,得集合P1={(li,ki,xi,yi)|i=
1,2,…,n1},ki表示线段li的斜率,(xi,yi)表示线段li中点的坐标;
步骤3.5:提取步骤3.4)的集合P1中的有效线段构成集合Peff={(lj,kj,xj,yj)|j=1,
2,…,m1,(lj,kj,xj,yj)∈P1},m1表示有效线段的数量;其中线段满足条件:(1)αmin≤kj≤βmin,αmin和βmin为事先给定的斜率阈值下限和上限;(2)min(xj,|xj–W1|)≥γ·W1且min(yj,|yj–H1|)≥γ·H1,其中γ为事先给定的线段位置判断系数;
步骤3.6:根据xml配置文件中表盘识别区域R3和最小值区域信息R1,根据式(1)计算最小值识别区域中心到表盘区域中心相连得到的直线的斜率k1,其对应的角度为θ1:步骤3.7:从集合Peff中找到满足刻度区域估计的线段集合Leff={le|e=1,2,3,…,m2},le表示Leff中第e条线段,且满足:le∈Peff且|θ1–θe|≤θthr,θthr为事先给定的角度估计阈值,θe表示线段le与水平向右方向的夹角;m2表示集合Leff中的线段数量;
步骤3.8:求Leff中长度最长线段llmax的斜率,即为最小刻度的斜率Kmin;
步骤3.9:根据步骤3.1到步骤3.8相同的方法计算仪表最大值刻度的斜率Kmax。
3.根据权利要求1所述的基于图像处理的指针式仪表读数方法,其特征在于步骤6)中对进行指针粗定位具体过程如下:步骤6.1:在表盘边缘信息图FC3中查找连通域,得连通域最小外接矩形集合C1={(xi,yi,wi,hi)|i=1,2,3,…,n3},其中(xi,yi)表示最小外接矩形左上角的坐标,wi和hi分别表示最小外接矩形的宽度和高度,n3表示连通域数量,矩形中点坐标表示为(xci,yci):步骤6.2:提取仪表量程中的连通域,具体如下:找到集合C1中的有效外接矩形并构成集合Cin={(xj,yj,wj,hj)|j=1,2,3,…,nin},Cin中矩形须满足条件:(1)xcj
步骤6.3:在集合Cin中找到面积最大的外接矩形,记为rmax=(xmax,ymax,wmax,hmax),(xmax,ymax)为矩形rmax左上角的坐标,wmax和hmax分别为矩形rmax的宽度和高度;
步骤6.4:根据式(5)确定矩形rmax在图像F3中的象限qr:
4.根据权利要求1所述的基于图像处理的指针式仪表读数方法,其特征在于步骤7)中计算指针所在直线的斜率Kp的具体过程为:步骤7.1:从图像F3中复制矩形rmax区域的子图像F5;
步骤7.2:根据步骤3.2中的相同方法对图像F5进行图像预处理,得定位后的边缘图像FC5;
步骤7.3:采用Hough变换方法对图像FC5进行直线检测,得到指针线段集合LP={li|i=
1,2,…,np},其中,li表示LP中第i条线段,np表示检测出的线段数量;
步骤7.4:对LP中线段进行聚类,得到满足式(6)~(10)的q个子集的集合L={Lv|v=1,
2,3,…,q},其中第v个子集为Lv={lvi|i=1,2,3,…,qv},qv表示子集Lv中的元素个数,且当i≠j时Li∩Lj=φ,Li∈L,Lj∈L,|θvi-θvj|≤θ0 (7)
|θui-θvj|>θ0,u≠v (8)
dis(lvi,lvj)≤λ0,lvi∈Lv,lvj∈Lv (9)
dis(lui,lvj)>λ0,lui∈Lu,lvj∈Lv (10)
其中,θvi表示第v个子集中第i条线段lvi与水平向右方向的夹角,θvj表示第v个子集中第j条线段lvj与水平向右方向的夹角,θui表示第u个子集中第i条线段lui与水平向右方向的夹角,θ0表示事先给定的角度阈值,λ0表示事先给定的线段距离判断阈值; 表示线段lui中点到线段lvj的垂直距离, 表示线段lvj中点到线段lui的垂直距离;
步骤7.5:按如下步骤进行线段合并:
步骤7.5.1:将Lv中元素按线段最左点的横坐标按从小到大进行排序;对Lv中线段lv1和lv2进行合并,令合并后的线段为lvr,其中,kvr和bvr分别表示lvr的斜率和截距, 和分别表示线段lvr的左右两个端点的坐标,根据斜率kvr的取值采用式(14)或(15)进行计算;从Lv中删除线段lv1和lv2,并将lvr加入到集合Lv中;
其中,kv1和kv2分别表示线段lv1和lv2的斜率,θv1表示lv1与水平向右方向的夹角,θv2表示lv2与水平向右方向的夹角,dv1和dv2分别表示线段lv1和lv2的长度,bv1和bv2分别表示lv1和lv2的截距; 表示lv1的最左点, 表示线段lv1和lv2上所有点中的最右点;重复这一过程直到Lv中无线段可合并,得集合Lv合并后线段lv;
步骤7.5.2:得到集合Lafter={lv|v=1,2,3,…,q},其中lv即为子集Lv通过步骤7.5.1进行线段合并后得到的线段;
步骤7.6:从Lafter中筛选出长线段并构建集合Llong={(x1j,y1j,x2j,y2j,kj)|j=1,2,
3,…,qL},qL表示Llong中的线段数量,其中的长线段满足:(x1j-x2j)2+(y1j-y2j)2≥(λlong·wmax)2,λlong为事先给定的长线段判断系数,(x1j,y1j)表示第j条长线段的起点坐标,(x2j,y2j)表示第j条长线段的终点坐标;kj表示第j条长线段的斜率;
步骤7.7:计算指针所在直线斜率Kp,即长线段集合Llong中的平均斜率: