一种基于径向灰度的指针仪表自动读数方法
技术领域
本发明属于工业计算机视觉领域,具体涉及一种基于径向灰度统计的指针式仪表自动读数方法。
背景技术
指针式仪表因为其结构简单、造价低廉和抗电子干扰等特点,被广泛用于生产生活中。但由于其数值难以通过电子式传感器得到,许多场景如仪表质量检测、工厂仪表巡检往往需要人工读取仪表示数。然而人工仪表读数费时费力、增加劳动成本,长时间的重复读数容易引起视觉疲劳导致读数误差,一些工厂里频繁的人工巡检设备也容易增大设备和人员的安全隐患。通过机器视觉检测的方法设计一套高精度、全自动的仪表读数的方法能有效提高设备生产率、降低人工成本。
目前,大部分基于机器视觉的仪表自动读数都是基于角度来完成的,整个步骤一般分为表盘信息提取、指针检测和自动读数三个步骤。表盘信息提取常见的方法有模板匹配、阈值分割和特征向量判别等方法,其中模板匹配方法只适用于确定样式的仪表,泛化性能一般;阈值分割类方法对光照和背景的要求较高;手工设计特征算子过程复杂且依赖经验,这些原因使得表盘的轮廓提取、圆心定位和初始刻度检测都将产生系统误差并被引入后续读数步骤。指针位置检测常见方法有Hough直线检测,最小二乘直线拟合等,这两类方法需要以图像边缘检测或图像细化等预处理的结果求出指针所在直线方程,再根据表盘圆心坐标经过后处理步骤计算得到指针角度。然而不同样式的仪表所适用的直线检测方法有差异,在多种仪表读数的场景中,单一的直线检测方法也会导致角度误差和读数误差的增大。自动读数步骤一般为计算当前角度占量程角度的比值,再由该比值与量程相乘得到仪表读数。现有的基于角度的读数方法大都依赖精准的表盘圆心定位与指针直线检测,对于非线性量程的和非垂直拍摄的仪表读数效果不佳。
在此背景下,有必要提出一种对拍摄角度不敏感,泛化性能良好的指针式仪表自动读数方法。
发明内容
针对上述技术问题,本发明提出一种基于径向灰度统计的指针式仪表自动读数方法。该方法利用改进的Unet像素分割网络分割仪表图像刻度,依据刻度确定指针仪表的圆心坐标与半径,再由数字检测确定刻度数值,最后由径向灰度统计准确地计算出仪表图像的指针位置的读数。
本发明所采用的技术方案如下:
步骤A、构建改进的Unet表盘刻度线分割深度神经网络,采集仪表图像制作数据集并训练网络,待处理仪表图像输入训练好的网络得到刻度线分割结果;
步骤B、根据刻度分割结果计算表盘的圆心坐标与刻度到圆心的距离;
步骤C、通过yolov3检测表盘刻度数字类别和位置,再由mean-shift聚类方法确定刻度数字;
步骤D、分别对仪表刻度图像、数字检测结果图像、指针阈值化图像做径向灰度统计,得到各自的径向灰度统计直方图;
步骤E、联合仪表刻度、数字和指针的径向灰度统计直方图,计算指针仪表图像读数。
进一步地,所述步骤A具体处理过程如下:
步骤A1、获取仪表的正面单通道图像,分辨率归一化到560*580,将仪表刻度所在像素标记为255,将非仪表刻度像素标记为0,制作仪表刻度二值图像数据集;
步骤A2、构建一个跨层连接的9层U-net型深度神经卷积图像分割网络,第1层由两个普通卷积层和一个池化层组成,2-4层使用激活函数为LeakyReLU的残差模块作为卷积单元,再经过池层化压缩特征,5-8层的特征图经过上采样操作尺寸扩大一倍后输入下一层,并与前几层的残差卷积结果串联拼接成新的特征图,新的特征图经过残差模块卷积提取特征,在第9层的残差卷积中,特征图尺寸恢复为原图像大小,其中1-4层的卷积结果分别与5-9层的上采样的结果合并成新的特征图,第9层的特征图经过普通卷积将特征图维度变换为2,最后经过SoftMax层将数值归一化到0到1之间,得到像素二分类概率图;
步骤A3、将标注好的图片用以训练网络模型参数,得到仪表刻度分割模型。将待分割仪表图片输入训练好的网络,得到仪表刻度分割预测概率图。
进一步地,所述步骤B具体处理过程如下:
步骤B1、设置阈值滤去仪表刻度分割概率图中的非刻度像素,得到刻度二值图像,依次标记刻度二值图像中所有连通域Ci,分别计算每个连通域大小,除去面积过小的噪声连通域;
步骤B2、将每个连通域内的所有像素点拟合直线li,求任意两条拟合直线li和lj相交的交点坐标Dij(xij,yij),并计算交点横纵坐标的均值μx,μy与方差σx,σy;
步骤B3、假设交点的横坐标X和纵坐标Y均符合一维高斯分布,分别记为X~N(μx,σx)和Y~N(μy,σy),令X′=(X-ux)/σx,Y′=(Y-uy)/σy,则X′和Y′均符合标准高斯分布,记为X′~N(0,1)和Y′~N(0,1),保留横坐标X′在样本均值μx附近的80%的样本点,保留纵坐标Y′在样本均值μy附近70%的样本点,在所有交点中保留同时满足上述两个条件的交点;
步骤B4、对圆心附近剩余交点的横纵坐标分别求平均值,得到仪表圆心坐标C(xcentre,ycentre);
步骤B5、在刻度图像中,从圆心向外依次构建同心圆,分别统计每个同心圆上像素点灰度值总和,同心圆半径从1像素依次增大至图像边界,绘制不同半径同心圆上像素点灰度总和直方图;
步骤B6、将像素点灰度总和视为自变量为同心圆半径的函数,遍历函数找到每个极大值,除去函数值小于30的极大值点,记录剩余极大值点所对应的同心圆半径作为此圈的刻度半径rscale,若表盘有多圈刻度,则返回多个刻度半径。
进一步地,所述步骤C具体处理过程如下:
步骤C1、标注仪表图像中刻度数字的位置与类别,0-9每个数字标注为一类,总计10类检测目标,对单个数字标注所属类别和所在矩形区域;
步骤C2、把仪表数字数据集作为训练集,训练tiny-yolov3目标检测模型,得到仪表图像数字检测网络模型;
步骤C3、确定数字识别ROI区域,若要识别仪表内圈的刻度数字,则将外圈刻度半径以外和0.65倍半径以内的像素置为0,若要识别仪表外圈的刻度数字,则将外圈刻度半径以内的像素置为0;
步骤C4、将待检测数字ROI区域输入训练好的tiny-yolov3数字检测模型,经过前向传播得到仪表图像单个刻度数字的类别和矩形区域坐标;
步骤C5、计算每个数字的所在矩形的中心点坐标,以mean-shift算法聚类识别结果数字的中心坐标,聚类后的每一类单个数字组合成一个数字,共计n类,把同一类中的数字边界框合并为一个新的边界框,再将框内数字从左到右依次组成多位数字di,得到n个仪表刻度数字的位置和数值,;
步骤C6、以仪表圆心为中心点,-π/2方向为起始角度,以顺时针方向排序得到刻度数字序列,比较序列中每个区域到中心点的最远距离,取最大的值作为刻度数字的半径rdigit。
进一步地,所述步骤D具体处理过程如下:
步骤D1、在仪表刻度二值图像中,以仪表圆心作为起点,向外沿半径方延伸刻度半径r
scale长度作为终点,定义两点的连线为径向线段,以仪表圆心为中心,以-π/2为起始角度,记顺时针转过的角度为θ,方向θ的径向线段上距离圆心距离为r像素的灰度记为
统计顺时针转过[0,2π)区间内的径向直线上的像素灰度值总和,则刻度径向灰度S
scale可表示为:
步骤D2、对仪表数字结果图像做径向灰度统计,统计结果经过符号函数判断0角度所在区间,每一个非0区间对应一个刻度数字所在角度范围;
步骤D3、对仪表图像做预处理,增强指针信息,对指针增强图像做径向灰度统计,统计结果中极小值对应的角度即为仪表指针的方向。
进一步地,所述步骤D2具体包括以下步骤:
步骤D21、新建一张尺寸与仪表刻度图像相同的空白图像,依次将检测到的刻度数字绘制在空白图像中,每个数字对应一个矩形区域;
步骤D22、在绘制了矩形区域的图像中,以仪表圆心为中心,刻度数字半径r
digit为长度,以-π/2为起始角度,记顺时针转过的角度为θ,方向θ的径向线段上距离圆心距离为r像素的灰度记为
统计顺时针转过[0,2π)区间内的径向直线上的像素灰度值总和,则刻度数字图像径向统计S
digit可表示为:
步骤D23、将径向线段与数字矩形区域有相交的方向为计为1、无相交的方向计为0,引入符号函数:
其中x为方向θ的径向线段所有像素点总和Idigit(θ),将经过符号函数运算值为1的角度区间定义为数字角度区间,则数字角度区间Di可表示为:
Di={θ|sign(Sdigit(θ))=1},i=1,2,...,n
n个数字区间对应n个刻度数字的起始和终止角度。
进一步地,所述步骤D3具体包括以下步骤:
步骤D31、对待处理仪表图像做双边滤波,在保留图像边缘细节的同时滤除噪声,提升信噪比;
步骤D32、对滤波后的图像做自适应阈值分割,得到指针增强图像的二值图像;
步骤D33、指针增强图像中以仪表圆心为中心,取刻度半径r
scale和数字半径r
digit中较大的值作为指针径向半径r
pointer,即r
pointer=max(r
scale,r
digit),在指针增强图像中,以仪表圆心为中心,以-π/2为起始角度,记顺时针转过的角度为θ,方向θ的径向线段上距离圆心距离为r像素的灰度记为
在指针增强图像中统计顺时针转过[0,2π)区间内的径向直线上的像素灰度值总和,则仪表图像指针的径向统计S
pointer可表示为:
Spointer(θ)中最小值所在方向即为仪表指针方向θpointer。
进一步地,所述步骤E具体处理过程如下:
步骤E1、把经过符号函数处理的数字图像的径向灰度统计序列与刻度图像的径向灰度统计序列对应角度的统计值相乘,计算得到一组新的径向灰度统计序列,取新序列中非0的区间组成集合,得到n个数字角度区间Di的刻度径向灰度统计:
其中
表示每个数字角度区间D
i内刻度图像的径向灰度统计值;
步骤E2、对每个数字角度区间Di的刻度径向灰度求最大值所在的角度θi:
将每个数字区间最大值对应的角度θi与该数字区间对应的刻度数字di组成集合{θi,di},i=1,2,...,n,确定每个刻度数字di所对应角度的θi;
步骤E3、根据步骤E2的结果,计算在[θi,θi+1)角度区间内单位角度所对应的数字刻度分度值:
Δdi=(di+1-di)/(θi+1-θi),i=1,2,...,n-1
步骤E4、对于步骤D3求得的指针角度θpointer,判断其所在的刻度数字角度区间,使得θi≤θpointer<θi+1,则θpointer方向的仪表指针读数d可表示为:
d=di+Δd(θpointer-θi)
其中di为θi处的刻度数值,Δdi为角度区间[θi,θi+1)的单位角度分度值。
与已有技术相比,本发明的有益效果体现在:
1、本发明在图像分割网络Unet的基础上,融合Resnet中的残差块思想,设计了一个抗过拟合性好的仪表刻度分割网络。此分割网络可以在小规模的数据集上训练达到理想的分割性能。相比于传统的分割方法,此刻度分割网络的性能受光照和拍摄角度变化的影响较小。
2、本发明的读数方法是基于刻度线和指针位置分段读取的,其读数逻辑与人眼读取仪表示数的策略更为接近,可达到理想的读数精度。基于径向灰度统计的读数方法在仪表成像时由于略微角度偏移所造成的读数偏差要远小于基于角度比值的读数方法所产生的偏差。
3、本发明的读数方法适用性好,刻度分割、圆心半径检测、刻度数字识别和径向灰度统计步骤都适用于数十类样式的指针式仪表。本发明可广泛应用于多种样式指针式仪表的自动读数。
附图说明
图1为本发明示例中对径向灰度统计的指针仪表自动读数方法的流程图。
图2为刻度数据集图像,其中图2(a)是带表壳仪表的图像,图2(b)是单表盘仪表图像,图2(c)是图2(a)的刻度标注结果,图2(d)是图2(b)的刻度标注结果。
图3为本发明示例中仪表刻度分割网络的结构图。
图4为仪表图像的刻度分割结果。
图5为仪表图像的数字检测结果。
图6为仪表图像的刻度径向灰度统计直方图。
图7为仪表图像经过符号函数运算的数字径向灰度统计直方图。
图8为仪表图像的指针径向灰度统计直方图。
图9为仪表图像自动读数与人眼读数的结果。
具体实施方式
下面结合附图说明对本发明做进一步的说明:
实施例1:
下述实施例是针对单指针式仪表的径向灰度统计自动读数方法,该方法的完整流程图如图1所示。
步骤A、构建改进的Unet表盘刻度线分割深度神经网络,采集仪表图像制作数据集并训练网络,待处理仪表图像输入训练好的网络得到刻度线分割结果;
步骤B、根据刻度分割结果计算表盘的圆心坐标与刻度到圆心的距离;
步骤C、通过yolov3检测表盘刻度数字类别和位置,再由mean-shift聚类方法确定刻度数字;
步骤D、分别对仪表刻度图像、数字检测结果图像、指针阈值化图像做径向灰度统计,得到各自的径向灰度统计直方图;
步骤E、联合仪表刻度、数字和指针的径向灰度统计直方图,计算指针仪表图像读数。
实施例2:
本实施例在实施例1的基础上,所述步骤A的具体处理过程如下:
步骤A1、获取仪表的正面单通道图像,分辨率归一化到560*580,将仪表刻度像素标记为255,将非仪表刻度像素标记为0,共计25张图像,其中带外壳的仪表训练图像如图2(a)所示,刻度标注结果如如图2(c)所示;只有表盘的仪表训练图像如图2(b)所示,刻度标注结果如图2(d)所示;
步骤A2、如图3所示,构建一个跨层连接的刻度分割网络,共计9层,第1层由两个普通卷积层和一个池化层组成,2-4层使用激活函数为LeakyReLU的残差模块作为卷积单元,其中负值段的斜率为0.3,卷积后的特征图由池层化压缩特征,5-8层的特征图经过上采样将特征图的尺寸扩大一倍后输入下一层,并与前几层的残差卷积结果串联拼接成新的特征图,新的特征图同样经过残差模块卷积提取特征,在第9层的残差卷积中,特征图尺寸恢复为原图像大小,再经过普通卷积将特征图维度变换为2,最后经过SoftMax层将数值归一化到0到1之间,得到像素二分类概率图;
步骤A3、在每张训练集原始图像中随机选取中心点并截取中心点96×96尺寸的patch,通过随机切片原始图像扩增训练数据,训练时batch_size设置为16,迭代20个epoch,测试图像经过拼接输出最终刻度分割结果如图4所示。
实施例3:
本实施例在实施例1的基础上,所述步骤B的具体处理过程如下:
步骤B1、在刻度分割概率图中设置阈值0.5,高于阈值的像素被保留为刻度像素,阈值化处理后得到刻度二值图像,依次标记刻度二值图像中所有连通域Ci,,除去连通域面积小于5的噪声连通域;
步骤B2、将每个连通域内的所有像素点拟合为直线li,求任意两条拟合直线li和lj相交的交点坐标Dij(xij,yij),分别计算交点横纵坐标的均值μx,μy与方差σx,σy;
步骤B3、将交点的横坐标和纵坐标样本转换为标准正态分布,保留横坐标X′在样本均值μx附近的80%的横坐标样本点,保留纵坐标Y′在样本均值μy附近70%的纵坐标样本点,在所有交点中保留同时满足上诉条件的坐标点;
步骤B4、对圆心附近剩余交点的横纵坐标分别求平均值,得到仪表圆心坐标C(xcentre,ycentre);
步骤B5、在刻度图像中,从圆心向外依次构建同心圆,分别统计每个同心圆上像素点灰度值总和,同心圆半径从1像素依次增大至图像边界,绘制不同半径同心圆上像素点灰度总和直方图;
步骤B6、将像素点灰度总和视为自变量为同心圆半径的函数,遍历函数找到每个极大值,除去函数值小于30的极大值点,记录剩余极大值点所对应的同心圆半径作为此圈的刻度半径rscale,若表盘有多圈刻度,则返回多个刻度半径。
实施例4:
本实施例在实施例1的基础上,所述步骤C的具体处理过程如下:
步骤C1、标注仪表图像中刻度数字,需要标注每个数字所在矩形区域和数字类别,若刻度数字为多位,则需对每一位数字都进行标注,除了正向的仪表图像,每张原始图像分别绕圆心顺时针和逆时针旋转了5°作为增广的训练集数据,为了平衡正负样本数量,每张图片遮挡数字区域不做标注作为负样本,与标注数字的图像按1∶1比例组成仪表数字数据集,训练集共138张图像;
步骤C2、下载tiny-yolov3的模型与预训练文件,在配置文件中设置迭代次数max_batches=20000,初始学习率lr=0.001,学习率变动步长steps=16000,18000,类别数classes=10,在仪表数字数据集上训练,得到仪表图像数字检测网络模型;
步骤C3、根据内外圈的读数需求,预处理待读数仪表图像I(x,y),若为单圈刻度的仪表,将以仪表中心为圆心,0.65rscale为半径的圆形区域像素置为0,确定仪表读数ROI;
其中xcentre和ycentre是仪表圆心的横纵坐标,rscale为仪表刻度半径;双圈刻度仪表若要读取外圈示数,则将外圈刻度半径以内的像素置为0,确定外圈刻度读数ROI:
其中xcentre和ycentre是仪表圆心的横纵坐标,rscale_outer为仪表外圈刻度半径;双圈刻度仪表若要读取内圈示数,则将外圈刻度半径以外像素和0.65倍内圈半径以内像素置为0,确定内圈刻度读数ROI:
其中xcentre和ycentre是仪表圆心的横纵坐标,rscale_outer为仪表外圈刻度半径,rscale_inner为仪表内圈刻度半径;
步骤C4、将经过预处理的待检测数字ROI输入训练好的tiny-yolov3数字检测模型,经过前向传播计算得到仪表图像单个刻度数字的类别和矩形区域坐标;
步骤C5、对每个数字矩形框计算矩形的中心点坐标,以mean-shift算法聚类识别结果数字的中心坐标,使用band_width=200的高斯核函数计算距离权重,偏移停止阈值ε设置为0.01,迭代停止时共有n个类别,对应n个仪表刻度数字di,每一类数字从左到右依次组合成一个多位数字di,以每类最左边数字的左上点和最右边的右下点确定多位数字的位置坐标,仪表数字检测结果如图5所示;
步骤C6、以仪表圆心为中心点,-π/2方向为起始角度,以顺时针方向排序得到刻度数字序列,比较序列中每个区域到仪表圆心点的最远距离,取最大的值作为刻度数字的半径rdigit。
实施例5:
本实施例在实施例1的基础上,所述步骤D的具体处理过程如下:
步骤D1、在仪表刻度二值图像中,以仪表圆心为起点,向外沿半径方延伸刻度半径r
scale长度作为终点,定义两点的连线为径向线段,以仪表圆心为中心,-π/2作为起始角度,以0.1°为单位角度,记顺时针转过的角度为θ,方向θ的径向线段上距离圆心距离为r像素的灰度记为
统计顺时针转过[0,2π)区间内的径向直线上的像素灰度值总和,则刻度径向灰度S
scale可表示为:
图5仪表的刻度图像的径向灰度统计结果如图6所示,横坐标θ为从-π/2开始顺时针转过的角度,纵坐标Sscale(θ)表示方向θ的径向直线上的像素灰度值总和;
步骤D2、根据数字识别结果,对仪表数字结果图像做径向灰度统计,判断每个刻度数字所在的角度区间;
步骤D3、对仪表图像做预处理,增强指针信息,对指针增强图像做径向灰度统计,根据统计结果判断指针方向。
实施例6:
本实施例在实施例5的基础上,所述步骤D2的具体处理过程如下:
步骤D21、在一张尺寸与输入图像相同的空白图像中,绘制检测到的每个刻度数字实心矩形区域,像素值填充为255;
步骤D22、在绘制了矩形区域的图像中,以仪表圆心为中心,-π/2作为起始角度,以0.1°为单位角度,记顺时针转过的角度为θ,方向θ的径向线段上距离圆心距离为r像素的灰度记为
统计顺时针转过[0,2π)区间内的径向直线上的像素灰度值总和,则数字径向灰度统计S
digit可表示为:
步骤D23、将径向线段与数字矩形区域有相交的方向为计为1、无相交的方向计为0,引入符号函数
其中x为方向θ的径向线段所有像素点总和Idigit(θ),图5仪表的数字图像的经过符号函数运算的径向灰度统计结果如图7所示,将经过符号函数运算值为1的角度区间定义为数字角度区间,则数字角度区间Di可表示为:
Di={θ|sign(Sdigit(θ))=1},i=1,2,...,n
其中n个数字区间对应n个刻度数字以-π/2为起点顺时针转过的角度。
实施例7:
本实施例在实施例5的基础上,所述步骤D3的具体处理过程如下:
步骤D31、对待处理仪表图像做双边滤波,在直径d=17的邻域空间里,颜色空间滤波器σ=34,坐标空间滤波器σ=8,在保留图像边缘细节的同时滤除噪声,提升信噪比;
步骤D32、对滤波后的图像做自适应阈值分割,块计算方法选取高斯分布加权和,块大小设置为71,差值6=40,得到指针增强图像的二值图像;
步骤D33、指针增强图像中以仪表圆心为中心,取刻度半径r
scale和数字半径r
digit中较大的值作为指针径向半径r
pointer,即r
pointer=max(r
scale,r
digit),在指针增强图像中,以仪表圆心为中心,以-π/2为起始角度,记顺时针转过的角度为θ,方向θ的径向线段上距离圆心距离为r像素的灰度记为
在指针增强图像中统计顺时针转过[0,2π)区间内的径向直线上的像素灰度值总和,则仪表图像指针的径向统计S
pointer可表示为:
图5仪表的指针增强图像的径向灰度统计结果如图8所示,指针灰度统计结果Spointer(θ)最小值所在方向即为仪表指针方向θpointer。
实施例8:
本实施例在实施例5的基础上,所述步骤E的具体处理过程如下:
步骤E1、把经符号函数处理的数字图像径向灰度统计序列sign(S
digit(θ))与刻度图像径向灰度统计序列S
scale(θ)按对应角度点乘,计算得到一组新的径向灰度统计序列,新的序列中共有n段连续的非0区间,每一段区间对应一个刻度数字所在的角度区间,记n个数字角度区间D
i的刻度径向灰度统计
为:
其中,θ表示-π/2作为起始角度,顺时针转过的角度,
表示方向θ的径向线段上距离圆心距离为r像素点灰度值;
步骤E2、在每个数字角度区间Di中,求最大刻度径向灰度所在的角度θi:
在数字区间Di中,将最大径向灰度所在角度θi与区间对应的刻度数值di对应,组成集合{θi,di},i=1,2,...,n;
步骤E3、每两个θi组成一个读数区间,在[θi,θi+1)区间内计算数字刻度di+1和数字刻度di之间单位角度所代表的刻度分度值:
Δdi=(di+1-di)/(θi+1-θi),i=1,2,...,n-1
其中Δdi为区间[θi,θi+1)内单位角度所对应的刻度数值;
步骤E4、对于由指针径向灰度统计求得的指针角度θpointer,判断其所在的刻度数字角度区间,使得θi≤θpointer<θi+1,则θpointer方向的仪表指针读数d可表示为:
d=di+Δdi(θpointer-θi)
其中di为θi处的刻度数值,Δdi为区间[θi,θi+1)内单位角度对应的刻度数值,图5仪表图像的径向灰度统计自动读数结果如图9所示。