指针式仪表自动读数与识别(六):指针定位

老吴2019-04-10 21:52图像1874浏览


版权声明:本篇文章为原创文章,转载请注明出处。https://yao2san.com/article/2056

指针定位作为仪表识别读数识别的重中之重,其定位是否准确直接决定了最终的读数,因此,需要重点分析一下。本文首先介绍一下Hough直线检测的原理及不足之处,然后使用两种新的方法来定位指针:一种是环向模板匹配法(CTM),另一种是径向灰度求和法(RGS),并通过测试来验证其准确性。

Hough直线检测原理

Hough直线检测的核心思想是:将在图像空间中的直线检测问题转换到参数空间中对点的检测问题,通过在参数空间里寻找峰值来确定直线。即,对于图像上的任意一点,计算经过该点的直线的可能的斜率(k)和截距(b),当遍历完所有图像上的点后,对k-b进行统计,选出出现次数最多的k-b,有了斜率和截距后就可以确定一条直线。但是由于直角坐标系中垂直x轴方向的直线的斜率不存在,因此需要转化为极坐标系来计算。

其原理如下:
对于直角坐标系中的任意一点A(x,y),经过点A的直线满足:

y=kx+b

那么在X-Y平面过点A(x_0,y_0)的直线簇可以表示为:

y_0=kx_0+b

则为了确定唯一的k值和b值,将其转化为参数空间ρ-θ,在极坐标系中表示为

ρ=x_0×cos⁡θ+y_0×sin⁡θ

则经过点(x_0,y_0)的所有可能直线在ρ-θ平面内可用一条曲线表示,图像上的每一个点的所有可能直在ρ-θ平面内就是一个曲线簇,如下图:

理论上,一个点对应无数条直线,但在实际应用中,必须限定直线的数量(即有限数量的方向)才能够进行计算。因此,将直线的方向θ离散化为有限个等间距的离散值,参数ρ也就对应离散化为有限个值,于是参数空间不再是连续的,而是被离散量化为一个个等大小网格单元。将图像空间(直角坐标系)中每个像素点坐标值变换到参数空间(极坐标系)后,所得值会落在某个网格内,使该网格单元的累加计数器加1。当图像空间中所有的像素都经过Hough变换后,对网格单元进行检查,累加计数值最大的网格,其坐标值(ρ_0,θ_0)就对应图像空间中所求的直线。

引用自https://blog.csdn.net/walilk/article/details/76142426

Hough直线检测定位指针的优化

大部分仪表指针均近似一条直线,因此可以选用Hough变换或者Radon变换进行直线检测. Radon变换的直线检测的原理是检测根据角度变化时出现的“局部峰值”,可以确定直线的方向,同时,峰值大小能够确定直线上点的个数,Radon变换是直线参数变换的连续形式,所以需要输入灰度图像作为源图像,因而速度较慢,而Hough是直线参数变换的离散形式,直接使用二值化后的图像作为源图像即可,速度较快,并且由于Hough变换受图像噪声影响较小,所以使用基于Hough变换的直线检测进行指针定位。

根据Hough直线检测要求,需要输入二值化后的边缘图像作为原图像,因此首先要进行图像的预处理以及边缘检测。利用EmguCV中的Hough直线检测函数进行指针检测结果如下:

直接使用Hough变换检测出的直线是不唯一的,并无法确定指针的位置,因此需要对检测出的直线(线段)进行过滤。
根据仪表图像的特点,基于以下原则,可对指针线段进行初步过滤和筛选:
(a) 指针长度不会大于表盘的半径;
(b) 指针必定落在表盘内;
(c) 指针所在直线必定经过表盘中心。

最终经过过滤后的指针定位结果如下:

可以看到最终结果仍然有可能包含多条线段,并且一部分图像只检测到了指针一边边界的线段,这样便无法准确确定指针角度,最终读数也会有较大误差,但这些线段已经非常接近指针了。对于这些问题,一方面可以通过调整直线检测参数和直线过滤参数来解决,另一方面也可用老吴我自己想的环向模板匹配法来解决。

环向模板匹配

基于Hough变换的形状检测理论上可以扩展到任意形状的检测,但随着形状的复杂度增加,相应的计算复杂度也会增加,并且也会失去很好的检测效果。所以,对于较为复杂的形状或者图像进行检测时,常用另一种方法:模板匹配法。

一般的,模板匹配可以分为两大类:基于灰度的模板匹配和基于特征的模板匹配。基于灰度的模板匹配又衍生出7中不同的算法:平均绝对差算法(MAD)、绝对误差和算法(SAD)、误差平方和算法(SSD)、平均误差平方和算法(MSD)、归一化积相关算法(NCC)、序贯相似性检测算法(SSDA)、hadamard变换算法(SATD)。本文的环向模板匹配法基于MSD算法实现。

MSD的相似性度量公式如下:

当D(i,j)取得最小值时时,即为最匹配子图。

模板匹配在寻找目标图像时具有很好的效果,但是由于其计算量大,需要对整个图像进行扫描匹配,在对实时性要求较高的条件下无法很好的工作,并且无法适用于目标子图的旋转匹配,所以基于模板匹配的思想和仪表特征,对MSD进行改造,提出了一种基于模板匹配的“环向模板匹配”法来定位指针的位置。
环向模板匹配(Circumferential Template Matching,CTM)法原理:根据仪表指针的特点,指针总是围绕表盘中心进行转动,形成一个圆面,因此,只需要使得模板图像(指针)围绕表盘圆心旋转一周, 并计算每个旋转角时的子图与模板相似度,选取出相似度最大时的角度值,并结合表盘圆心,即可以确定指针位置及方向。为了简化计算,采用一条线段作为搜索子图,代替矩形搜索子图,实验表明,以一条线段作为模板,并不会对结果产生较大影响,且能够提高效率。

CTM算法进行模板匹配的步骤如下:
1.确定一个模板区域T,T区域包含所要匹配的目图像;
2.以圆心为中心,逆时针方向遍历,每旋转一个角度θ,生成一个与T区域相似的子图;
3.计算S与T的相似度D(θ);
4.找到D(θ)取得最小值时的子图,即为匹配结果

(注意:这里仅给出思路,不给出公式)

以下是匹配结果:

径向灰度求和

径向灰度求和(Radial Gray Summation,RGS)法是老吴提出的另一种定位指针的方法,其思想基于CTM,是CTM的简化版。RGS摒弃了CTM计算子图与模板图像的相似度的方法,转为及计算径向的灰度和,其计算量更小,效率更高,且在表盘定位准确的情况下,能够达到近乎99%以上的准确率。

RGS法原理是:一般情况,表盘与指针颜色差距较大,相应的灰度图中的灰度值差距也较大,通过计算表盘圆半径上的灰度和s,当和值最大(或最小,根据表盘背景和指针颜色确定)时,半径方向即为指针方向,结合圆心即可确定指针位置

其原理很简单,就不在多说了,以下是检测指针的效果:

指针细化和合成

由于某些指针并非一条线段,而是具有一定的宽度,所以在进行边缘提取时,往往会提取到的是一个封闭的形状,而不是一条细线,导致直接Hough直线检测后的结果中可能会包含多个线段,对于多个线段需要进行归一化处理,最终转化为一条线段,才能够进行读数。而对于RGS,由于其只能检测一条线段,因此不需要进行归一化处理。

我这里选取以下两种方法来确定一个唯一的指针:图像细化和指针线段合成。

(1) 指针细化
图像的细化是指在保持原图像拓扑结构的情况下,尽可能快地抽出一个单像素宽的骨架的过程,细化的结果能基本保留图形中的拓扑结构。常见的细化算法有:Zhang并行快速算法、Hilditch算法、Pavlidis算法、Rosenfeld算法、基于参照表的细化算法、形态学细化算法等。
通过对图像的细化,可以将有宽度的指针转化为单像素宽度的线段,然后再进行Hough直线检测即可获得唯一的指针线段。

(2) 指针合成
针对Hough直线检测法对指针的检测结果的观察,通常直接Hough直线检测会得到两条线段,分别位于指针两侧,针对这个特点,可以将两条线段交点与圆心的连线作为合成后的指针。

设Hough直线检测到的两个线段L_1,L_2的端点分别为P_1 (x_1,y_1 ),P_2 (x_2,y_2 ),P_3 (x_3,y_3 ),P_4 (x_4,y_4),则其斜率分别为:

可求的其交点P为:

将交点P与圆心O的连线作为合成后的指针,如下图所示:

赞一个! (10)

文章评论(如需发表图片,请转至留言)