一种圆形指针式表盘视觉定位及自动读数方法与流程

文档序号:12035199阅读:407来源:国知局
一种圆形指针式表盘视觉定位及自动读数方法与流程

本发明涉及电力仪表自动化及其视觉应用领域,特别涉及一种圆形指针式表盘视觉定位及自动读数方法。



背景技术:

在工业实际当中,电表的存在非常普遍,需要大量人力物力进行抄表工作,虽然电子仪表的出现大大减少了相关工作,但是目前在很多工厂中大部分仍然是传统的物理式指针仪表,物理式指针仪表有着精确,抗干扰等优势,而且大范围替代传统指针仪表需要耗费大量资金。

采用人工操作来检表,工作强度大,效率低,并且存在人为误差,自动化程度低,人为因素大,缺乏客观科学评定检测标准及依据,因此,如果利用工业当中存在的监控设备高效准确的检测仪表读数则可以既节省财力,又提高效率。要检测仪表的指针读数,核心问题是解决仪表指针直线的自动图像识别问题。近年来研究的一些智能化方法有如下缺点:(1)大多应用hough变换来进行检测,但hough变换计算量大、存储量大、检测精度不高,且检测容易受到噪声干扰,无法实际应用到实际实时检测系统;(2)同时,在检测指针位置的过程中,基本上都采用填补法,这种算法较为复杂也易出错。



技术实现要素:

本发明的目的在于克服现有技术中传统hough变换速度慢、定位精确率低以及指针检测中填充算法复杂的问题,提供一种圆形指针式表盘视觉定位及自动读数方法,使用改进的随机hough变换,定位准确迅速,同时提出一种新的定位指针位置的算法。

为了实现上述发明目的,本发明提供了以下技术方案:

一种圆形指针式表盘视觉定位及自动读数方法,包括以下步骤:

步骤1:读取表盘原始图像f(x,y),对原始图像进行直方图均衡化;

步骤2:对原始图像f(x,y)进行改进的随机hough变换确定圆的圆心坐标(x,y),根据直方图均衡化后的图像确定圆的半径范围,,设置检测圆的重复次数n,检测同心多圆,得到n个圆的半径ri(i=1,2,3…n),同时,利用向量化编程提高运行速度;

步骤3:从圆的半径ri(i=1,2,3…n)中选取最大半径rn,提取仪表所在区域f'(x,y);

步骤4:在f'(x,y)中选取最小半径即r1按比例扩展,找到刻度盘区域h(x,y),对h(x,y)使用最大类间方差法确定阈值,进行阈值分割得到二值化图像,再计算得到刻度的起始位置和终点位置;

步骤5:在仪表所在区域f'(x,y)中取r1和r2组成条带区域h2(x,y),对条带区域h2(x,y)进行阈值分割,再进行形态学滤波;

步骤6:对形态学滤波后的条带区域h2(x,y)进行线性拟合,确定指针位置;

步骤7:结合步骤4得到的刻度起始位置和终点位置以及步骤6得到的指针位置,计算原始图像f(x,y)中的读数。

进一步,所述步骤1的具体步骤如下:

步骤1.1:读取表盘原始图像f(x,y);

步骤1.2:将原始图像f(x,y)进行直方图均衡化,具体公式如下:

其中,sk是均衡化之后的值为m的灰度,l是图像中的灰度级数量,mn是表盘图像f(x,y)中像素的总数,m是表盘图像f(x,y)每一行的像素个数,n是表盘图像f(x,y)每一列的像素个数,uj是原始图像f(x,y)中灰度为j的像素个数。

进一步,所述步骤2中随机hough变换的具体步骤如下:

步骤2.1:根据直方图均衡化后的图像,设置检测圆的个数n,预设n=4,并设置理想半径区间,最小值为0,最大值为图像长度和宽度中较小值的1/2,根据半径区间确定随机hough变换的累加区域;

步骤2.2:构造边缘点集,取x方向上的梯度值gx(x,y)和y方向上的梯度值gy(x,y),并计算该点的梯度幅值g(x,y),以g(x,y)中最大幅值的1/2为阈值,去除幅值较小的点;

步骤2.3:在筛选过后的点集中,以每个点为中心,以预设的半径区间为边长,构建每个点对应的检测矩阵,对该矩阵内所有经过筛选的点进行随机hough变换累积,利用repmat函数构建向量化矩阵,使每个点都累积完成;

步骤2.4:筛选累积结果,若累积结果超出图像范围,则设为无效;否则设为有效;

步骤2.5:统计每个点筛选后的累积结果,其重复出现次数最多的累积坐标(x,y)即为圆心坐标;

步骤2.6:以圆心(x,y)为中心,根据预设半径区间向外统计不同半径下圆形轮廓对应的幅值进行累加,将幅值合从小到大排列,根据设置检测圆的个数取对应半径大小。

进一步,所述步骤3阈值分割的具体步骤如下:

步骤3.1:选取步骤2中最大半径rn的2倍为矩阵边长,以圆心为中心,截取指针所在区域f'(x,y);

进一步,所述步骤4确定刻度盘区域的具体步骤如下:

步骤4.1:选取最小半径r1,在仪表所在区域f'(x,y)按比例放大半径,其公式为

(x-x0)2+(y-y0)2=pr2(7)

其中p为比例系数,(x0,y0)是检测圆的圆心,r为圆按比例放大的半径,取r1和r间区域,即为指针刻度所在的刻度盘区域h(x,y);

步骤4.2:对刻度盘区域h(x,y)进行阈值分割,阈值分割的公式如下:

其中gm(x,y)是阈值分割之后的图像,h(x,y)指在仪表所在区域f'(x,y)中选取区域,k*是自适应的最佳阈值,mg是h(x,y)的平均灰度,即全局阈值,m(k)是累加至灰度级m的均值,p1(k)表示像素被分到类c1的概率,pi表示像素值为i的像素在图像中的百分比,设阈值t(k)=k,并使选取区域h(x,y)阈值化处理为两类c1和c2,p1(k)表示像素被分到类c1的概率,1-p1(k)表示像素被分到类c2的概率,σ2是c1类和c2类之间的方差,参数pi、t(k)、p1(k)、c1、c2和σ2因不同步骤的h(x,y)而改变;

步骤4.3:搜索该区域内左下角和右下角点即为起始位置和终点位置。

进一步,所述步骤5的具体步骤如下:

步骤5.1:根据步骤2中得到的半径ri(i=1,2,3…n),选取最小的两个半径r1和r2进行环形区域提取的到条带区域h2(x,y)进行阈值分割,公式如步骤4.2所示;

步骤5.2:对阈值分割后的条带区域进行取反得h2'(x,y),再进行形态学滤波中的膨胀变换,膨胀公式如下:

其中,b为膨胀算子,设为a为处理对象即取反的条带区域h2'(x,y),b关于原点翻转,逐步移动以划过整个集合a,增长或粗化图像a,以修复连接效果不好的指针区域。

进一步,所述步骤6确定指针所在区域的具体步骤如下:

步骤6.1:取最小的两个半径r1和r2,求取半径平均值rave,使根据圆的几何性质:

αi=3*i,i=1,2,3…t(10)

得到t个坐标点(xi,yi),并以红点标出,预设t=120;

步骤6.2:将圆心坐标(x,y)和步骤6.1中取的坐标点(xi,yi)分别求对应斜率ri,公式为:

步骤6.3:以(xi,yi)为点中心,构建a*a矩阵mi,a由步骤6.1中决定的rave确定,公式为:

使该矩阵主要包含像素值为0的区域而且含有尽量少的边界像素值为1的像素点,矩阵mi内共有a*a个坐标点,每个坐标点以(xid,yid)表示;

d=1,2,3.....a2(13)

步骤6.4:统计mi中像素值为1的像素点,记录对应坐标(xid,yid),利用公式:

计算该矩阵中所有像素值为1的点对应的回归方程斜率,取对应d使得满足min(|r-ri|),由d确定的点即为指针对应坐标点。

进一步,所述步骤7的具体步骤如下:

步骤7.1:计算圆心(x,y)到刻度的起始位置的向量与圆心(x,y)到指针位置的向量之间的夹角θ1;

步骤7.2:计算圆心(x,y)到刻度的起始位置的向量与圆心(x,y)到刻度的终点位置的向量之间的夹角θ2;

步骤7.3:夹角之比θ1/θ2即是指针读数,所述夹角θ1和夹角θ2的计算公式如下:

其中,表示向量的夹角θ1,表示向量内积,表示向量的模,如果计算夹角θ2时,需要将公式中的替换为即有表示向量的夹角θ2,表示向量内积,表示向量的模,需要注意的是,令当x1≤0,y1≤0或者x1≤0,y1≥0或者x1≥0,y1≥0时,若则直接输出作为向量和向量的夹角,反之,当x1≥0,y1≤0或者当x1≥0,y1≥0时,若时,令作为向量和向量的夹角。

与现有技术相比,本发明的有益效果:

1、指针检测的算法与传统的填补法不同,利用简单的线性拟合就可以定位指针位置,运行量低,占用内存小,准确率高且速度快;

2、算法定位准确,可以在复杂背景下检测出多个圆,直接提取出检测区域,不需要拟合,同时检测出为同心多圆,可直接定位出圆形仪表以及仪表内的多个圆环;

3、可移植到c++平台下运行,并且也可以移植到其他平台。

附图说明

图1为本发明的方法流程图;

图2为本发明中的原始图像;

图3为本发明中用随机hough变换初步提取到的表盘图像并以蓝色线标识的示意图;

图4为本发明中截取指针所在的f'(x,y)区域;

图5为本发明中提取等比例扩大后截取的读数区域h(x,y)示意图;

图6为本发明中检测到读数区域的起始位置和终点位置;

图7为本发明中条带区域h2(x,y)的阈值分割结果;

图8为本发明中对h2(x,y)进行取反并膨胀的结果;

图9为本发明中定位指针在h2(x,y)对应点的示意图;

图10为本发明中最后的结果。

具体实施方式

下面结合试验例及具体实施方式对本发明作进一步的详细描述。但不应将此理解为本发明上述主题的范围仅限于以下的实施例,凡基于本发明内容所实现的技术均属于本发明的范围。

结合附图,一种圆形指针式表盘视觉定位及自动读数方法,包括以下几个步骤:

步骤1:读取表盘原始图像f(x,y),对原始图像进行直方图均衡化;

具体地,包括以下几个步骤:

步骤1.1:读取表盘原始图像f(x,y),如图2所示;

步骤1.2:将原始图像进行直方图均衡化,具体公式如下:

其中,sk是均衡化之后的值为m的灰度,l是图像中的灰度级数量,mn是表盘图像f(x,y)像素的总数,m是表盘图像f(x,y)每一行的像素个数,n是表盘图像f(x,y)每一列的像素个数,uj是原始图像f(x,y)中灰度为j的像素个数。

步骤2:根据原始图像f(x,y)确定圆的大致半径范围,对原始图像f(x,y)进行改进的随机hough变换确定圆的圆心坐标(x,y),根据直方图均衡化后的图像,设置重复次数k,检测同心多圆,得到n个圆的半径ri(i=1,2,3…n),同时,利用向量化编程提高运行速度,本实例中,随机hough变换初步提取到的表盘图像并以蓝色线标识的示意图如图3所示;

具体地,步骤2包括以下几个步骤:

步骤2.1:根据直方图均衡化后的图像,设置检测圆的个数n,预设n=4,并设置理想半径区间,最小值为0,最大值为图像长度和宽度中较小值的1/2,根据半径区间确定随机hough变换的累加区域;

步骤2.2:构造边缘点集,取x方向上的梯度值gx(x,y)和y方向上的梯度值gy(x,y),并计算该点的梯度幅值g(x,y),以g(x,y)中最大幅值的1/2为阈值,去除幅值较小的点;

步骤2.3:在筛选过后的点集中,以每个点为中心,以预设的半径区间为边长,构建每个点对应的检测矩阵,对该矩阵内所有经过筛选的点进行随机hough变换累积,利用repmat函数构建向量化矩阵,代替for循环使每个点都累积完成;

步骤2.4:筛选累积结果,若累积结果超出图像范围,则设为无效,否则设为有效;

步骤2.5:统计每个点筛选后的累积结果,重复出现次数最多的累积坐标(x,y)即为圆心坐标;

步骤2.6:以圆心(x,y)为中心,根据预设半径区间向外统计不同半径下圆形轮廓对应的幅值进行累加,将幅值合从小到大排列,根据设置检测圆的个数取对应半径大小。

步骤3:从圆的半径ri(i=1,2,3…n)中选取最大半径rn,提取仪表所在区域f'(x,y),对f'(x,y)使用最大类间方差法确定阈值,进行阈值分割得到二值化图像f2'(x,y);

具体地,步骤3包括以下几个步骤:

步骤3.1:选取步骤2中最大半径rn的2倍为矩阵边长,以圆心为中心,截取指针所在区域f'(x,y),本实例中,截取指针所在区域f'(x,y)示意图如图4所示;

步骤4:在f2'(x,y)中选取最小半径即r1按比例扩展,找到刻度盘区域h(x,y),进行阈值分割,计算得到刻度的起始位置和终点位置;

具体地,包括以下几个步骤:

步骤4.1:选取最小半径r1,按比例放大半径,其公式为

(x-x0)2+(y-y0)2=pr2(7)

其中p为比例系数,(x0,y0)是检测圆的圆心,r为圆按比例放大的半径,取r1和r间区域,即为指针刻度所在的刻度盘区域h(x,y),本实例中,图5为提取等比例扩大后截取的读书区域h(x,y)示意图;

步骤4.2:对h(x,y)进行阈值分割,阈值分割的公式如下:

其中gm(x,y)是阈值分割之后的图像,h(x,y)指在仪表所在区域f'(x,y)中选取区域,k*是自适应的最佳阈值,mg是h(x,y)的平均灰度,即全局阈值,m(k)是累加至灰度级m的均值,p1(k)表示像素被分到类c1的概率,pi表示像素值为i的像素在图像中的百分比,设阈值t(k)=k,并使选取区域h(x,y)阈值化处理为两类c1和c2,p1(k)表示像素被分到类c1的概率,1-p1(k)表示像素被分到类c2的概率,σ2是c1类和c2类之间的方差,参数pi、t(k)、p1(k)、c1、c2和σ2因不同步骤的选取区域h(x,y)而改变;

步骤4.3:搜索该区域内左下角和右下角点即为起始位置和终点位置,本实例检测到读数区域的起始和终点位置如图6所示。

步骤5:在仪表所在区域f'(x,y)中选取最小的两个半径r1和r2组成条带区域h2(x,y),对条带区域进行阈值分割,再进行形态学滤波;

具体地,包括以下几个步骤:

步骤5.1:根据步骤2中得到的半径ri(i=1,2,3…n),选取最小的两个半径r1和r2进行环形区域提取条带区域h2(x,y)进行阈值分割,阈值分割公式如步骤4.2所示,得到本实例中如图7所示的条带区域h2(x,y)的阈值分割结果;

步骤5.2:对阈值分割后的条带区域进行取反得h2'(x,y),再进行形态学滤波中的膨胀变换,膨胀公式如下:

其中,b为膨胀算子,设为a为处理对象即取反的条带区域h2'(x,y),,b关于原点翻转,逐步移动以划过整个集合a,增长或粗化图像a,以修复连接效果不好的指针区域,本实例对h2(x,y)进行取反并膨胀的结果如图8所示。

步骤6:对条带区域h2'(x,y)进行线性拟合,确定指针位置;

具体地,包括以下几个步骤:

步骤6.1:取最小的两个半径r1和r2,求取半径平均值rave,使根据圆的几何性质:

αi=3*i,i=1,2,3…t(10)

得到t个坐标点(xi,yi),预设t=120;

步骤6.2:将圆心坐标(x,y)和步骤6.1中取的坐标点(xi,yi)分别求对应斜率ri,公式为:

步骤6.3:以(xi,yi)为点中心,构建a*a矩阵mi,a由步骤6.1中决定的rave确定,公式为:

使该矩阵主要包含像素值为0的区域而且含有尽量少的边界像素值为1的像素点,矩阵mi内共有a*a个坐标点,每个坐标点以表示;

d=1,2,3.....a2(13)

步骤6.4:统计mi中像素值为1的像素点,记录对应坐标利用公式:

计算该矩阵中所有像素值为1的点对应的回归方程斜率,取对应d使得满足min(|r-ri|),由d确定的点即为指针对应坐标点,本实例中,定位指针在h2(x,y)对应点的示意图如图9所示。

步骤7:结合步骤4得到的刻度起始位置和终点位置以及步骤6得到的指针位置,计算原始图像f(x,y)中的读数,本实例得到的结果如图10所示。

具体地,包括以下几个步骤:

步骤7.1:计算圆心(x,y)到刻度的起始位置的向量与圆心(x,y)到指针位置的向量之间的夹角θ1;

步骤7.2:计算圆心(x,y)到刻度的起始位置的向量与圆心(x,y)到刻度的终点位置的向量之间的夹角θ2;

步骤7.3:夹角之比θ1/θ2即是指针读数,所述夹角θ1和夹角θ2的计算公式如下:

其中,表示向量的夹角θ1,表示向量内积,表示向量的模,如果计算夹角θ2时,需要将公式中的替换为即有表示向量的夹角θ2,表示向量内积,表示向量的模,需要注意的是,令若x1≤0,y1≤0或者x1≤0,y1≥0或者当x1≥0,y1≥0时,若则直接输出作为向量和向量的夹角,反之,若x1≥0,y1≤0或者当x1≥0,y1≥0时,若时,令作为向量和向量的夹角。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1