基于OpenCV的仪表图像自动识别方法与流程

文档序号:11234489阅读:2418来源:国知局
基于OpenCV的仪表图像自动识别方法与流程

本发明涉及一种识别方法,特别是一种基于opencv的仪表图像自动识别方法。



背景技术:

随着国内外智能监控行业和安防产业的发展,机器视觉越来越多地应用在人体行为及表情识别、pcb印刷电路检测、数字和指针仪表识别、产品外观检测、物流物品分类等诸多方面,机器视觉取代人工视觉进入各种领域,大大提高了人们的生产生活效率。

目前,电力系统变电站中许多设备的运行状态显示采用了许多的指针式仪表,如电压表、电流表、气压表、温度表、功率表、油温表、油压表、避雷器表等等。这些仪表一般都不具有数据线接口的功能,无法实现仪表所测量的参数的实时监控、记录与分析,从而无法实现对智能变电站运行的自动化控制,也不能在设备出现故障或存在重大安全隐患的情况下及时快速的进行报警。此外,记录仪表的数据主要是靠人眼近距离的观测,人工手动记录,人工数据分析,检测出来的示数精度低,重复性、可靠性差,人的劳动强度大,多次重复劳动容易引起人体视觉疲劳,容易造成识别数据、记录数据出现错误。

基于以上原因,需要一种仪表数据自动识读的技术,要求是能够快速准确的对仪表上的示数进行识别,并且识别的结果具有一定的稳定性、准确性和重复性,这样的结果才有可信度,才能作为仪器运行的数据,才能真实的反应仪器运行的状态。



技术实现要素:

本发明所要解决的技术问题是提供一种基于opencv的仪表图像自动识别方法。

为解决上述技术问题,本发明所采用的技术方案是:

一种基于opencv的仪表图像自动识别方法,其特征在于包含以下步骤:

步骤一:读取摄像头采集的仪表图像,进行模板匹配,将已知的模板与现有的图像进行模板匹配,将输入图像每个像素点与模板比较,并为每个像素点计算一个值,记录其与模板比较后相似程度,选出最接近模板的点,并选中模板对应模式,进行下一步识别;

步骤二:读取仪表数据,对图像进行简单的图像处理,接着进入各自读数通道进行读数识别,最后显示读数。

进一步地,所述步骤一中模板匹配具体为,利用opencv提供的imgproc函数库中的matchtemplate函数,将输入图像与模板图像进行匹配,对于图像中每一个像素点对应一个值,表明其与模板图像的相似度,相似度最高的点用数组matchpoint[]保存,分别用matchtemplate函数六种匹配模式匹配,将数组matchpoint[]中六个数值比较,三个以上点相同,确定是同一类仪器,进入下一个识别模式。

进一步地,所述匹配模板,根据不同需求选择不同角度、亮度的图片,准确的选择对应仪器;同一仪器,用多个模板匹配。

进一步地,所述步骤二中简单的图像处理包含滤波,阈值操作,轮廓检测和获取roi操作。

进一步地,所述获取roi操作,根据模板匹配的模板选择的最优区域,选取roi区域作为识别的研究对象。

进一步地,所述步骤二中各自读数通道包含数字仪表和指针仪表,仪表自动识别过程为,图像滤波,利用自适性阈值操作和轮廓检测,获取合适边框,进一步确定仪表位置,进一步排除外界干扰,再接着进行指针或数字仪表操作。

进一步地,所述数字仪表识别包含利用数字仪表图像的差分二值图对比,得到识别结果,并返回数值;所述指针仪表识别,包含利用指针仪表图像指针与零点的偏转角度和量程,其中利用hough变换算法计算偏转角,量程为已知数据,最终得到识别结果,并返回数值。

进一步地,所述六种匹配模式匹配算法包含,

1)平方差匹配method=cv_tm_sqdiff,利用平方差来进行匹配,最好匹配为0,匹配越差,匹配值越大:

2)标准平方差匹配method=cv_tm_sqdiff_normed

3)相关匹配method=cv_tm_ccorr,采用模板和图像间的乘法操作,较大的数表示匹配程度较高,0标识最坏的匹配效果:

4)标准相关匹配method=cv_tm_ccorr_normed

5)相关系数匹配method=cv_tm_ccoeff,将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示6,糟糕的匹配,0表示没有任何相关性:

其中

t′(x′,y′)=t(x′,y′)-1/(w·h)·∑x″,y″t(x″,y″)

i′(x+x′,y+y′)=i(x+χ′,y+y′)-1//(w·h)·∑x″,y″i(x+x″,y+y″)

6)标准相关系数匹配method=cv_tm_ccoeff_normed

本发明与现有技术相比,具有以下优点和效果:

(1)利用模板匹配技术,只需要增加模板及其数据便可以使系统识别更多的仪表数据。模板匹配技术,在同一平面不同位置,不同亮度的图片识别上有着较大优势,多不同角度模板,也能进一步提高识别准确性。

(2)利用图像处理技术,实现数字和指针仪表的自动识别,和现有单指针或单数字以表识别相比,提高了工作效率。

(3)利用图像处理技术进行读数,减少人为误差,提高读书精度,提高工作效率。

(4)利用阈值,轮廓检测和roi技术,方便程序适应各类图片,自动识别轮廓区域,精确定位操作区间,排除读数时的干扰。

(5)使用opencv开源函数库,可以更加方便的调用各种api,简化程序的编写。c++程序的编写更加得灵活,继承性使得程序更加得稳定。

附图说明

图1是本发明的一种基于opencv的仪表图像自动识别方法的流程图。

图2是本发明的一种基于opencv的仪表图像自动识别方法的模板匹配流程图。

具体实施方式

下面结合附图并通过实施例对本发明作进一步的详细说明,以下实施例是对本发明的解释而本发明并不局限于以下实施例。

如图所示,本发明的一种基于opencv的仪表图像自动识别方法,其特征在于包含以下步骤:

步骤一:读取摄像头采集的仪表图像,进行模板匹配,将已知的模板与现有的图像进行模板匹配,将输入图像每个像素点与模板比较,并为每个像素点计算一个值,记录其与模板比较后相似程度,选出最接近模板的点,并选中模板对应模式,进行下一步识别;

模板匹配具体为,利用opencv提供的imgproc函数库中的matchtemplate函数,将输入图像与模板图像进行匹配,对于图像中每一个像素点对应一个值,表明其与模板图像的相似度,相似度最高的点用数组matchpoint[]保存,分别用matchtemplate函数六种匹配模式匹配,将数组matchpoint[]中六个数值比较,三个以上点相同,确定是同一类仪器,进入下一个识别模式。

匹配模板,根据不同需求选择不同角度、亮度的图片,准确的选择对应仪器;同一仪器,用多个模板匹配。单模板匹配,可以在同一平面,不同亮度提高匹配成功率,多对一,增加不同角度的图片,可以提高多角度匹配准确度。

步骤二:读取仪表数据,对图像进行简单的图像处理,接着进入各自读数通道进行读数识别,最后显示读数。

简单的图像处理包含滤波,阈值操作,轮廓检测和获取roi操作。获取roi操作,根据模板匹配的模板选择的最优区域,选取roi区域作为识别的研究对象。

opencv中高斯滤波用于消除高斯噪声,是线性平滑滤波,是对图像进行加权平均的过程。一维高斯函数公式如下:

二维高斯函数公式如下:

函数声明如下:

c++:voidgaussianblur(inputarraysrc,outputarraydst,sizeksize,doublesigmax,doublesigmay=0,intbordertype=border_default);

以上参数分别为,输入图像,输出图像,高斯内核大小,x方向标准差,y方向标准差,边界模式。

具体的opencv中自适应阈值操作函数,函数声明如下:

c++:voidadaptivethreshold(inputarraysrc,outputarraydst,doublemaxvalue,intadaptivemethod,intthresholdtype,intblocksize,doublec);

以上参数分别为输入图像,输出图像,使用cv_thresh_binary和cv_thresh_binary_inv的最大值,算法选择cv_adaptive_thresh_mean_c或cv_adaptive_thresh_gaussian_c),阈值类型(cv_thresh_binary或cv_thresh_binary_inv),像素的领域尺寸,取值为3,5,7等,最后一个为加减权后的常数。自适应与之操作是对阈值操作的修正。

具体的,opencv中的轮廓检测和轮廓绘制函数配套使用,函数声明如下:

c++:voidfindcontours(inputarrayimage,outputaarrayofarrayscontours,outputarrayhierarchy,intmode,intmethod,pointoffset=point());

以上参数分别为,输入图像,输出的轮廓,输出向量,轮廓检索模式(4种),轮廓近似方法(3种),轮廓点可选偏移量(默认)。

c++:voiddrawcontours(inputarrayimage,inputarrayofarrayscontours,intcontouridx,constscalar&color,intthickness=1,intlinetype=8,inputarrayhierarchy=noarray(),intmaxlevel=int_max,pointoffset=point());

以上参数分比为,需要绘制的图像,输入轮廓,指示变量(为负,绘制所有轮廓),轮廓颜色,轮廓线条粗细,线条类型,层次结构信息,轮廓的最大等级,偏移参数。

具体的opencv中边缘检测函数,canny函数原理如下:

卷积所用的式子:

其x向、y向的一阶偏导数矩阵,梯度幅值以及梯度方向的数学表达式为:

p[i,j]=(f[i,j+1]-f[i,j]+f[i+1,j+1]-f[i+1,j])/2q[i,j]=(f[i,j]-f[i+1,j]+f[i,j+1]-f[i+1,j+1])/2

θ[i,j]=arctan(q[i,j]/p[i,j])

函数声明如下:

c++:voidcanny(inputarrayimage,outputarrayedges,doublethreshold1,doublethreshold2,intaperturesize=3,booll2gradient=false):

以上参数分别为输入图像,输出图像,滞后性阈值1,滞后性阈值2,sobel算子孔径大小,计算图像梯度幅值的标识。

各自读数通道包含数字仪表和指针仪表,仪表自动识别过程为,图像滤波,利用自适性阈值操作和轮廓检测,获取合适边框,进一步确定仪表位置,进一步排除外界干扰,再接着进行指针或数字仪表操作。

数字仪表识别包含利用数字仪表图像的差分二值图对比,得到识别结果,并返回数值;所述指针仪表识别,包含利用指针仪表图像指针与零点的偏转角度和量程,其中利用hough变换算法计算偏转角,量程为已知数据,最终得到识别结果,并返回数值。数字仪表识别,指针仪表识别。一次操作识别一种仪表,多次操作,可进入数字或指针仪表各自的识别操作。根据所需图片,自动判别数字或指针图像,并快速得到识别后的数值,显示识别结果。

六种匹配模式匹配算法包含,

1)平方差匹配method=cv_tm_sqdiff,利用平方差来进行匹配,最好匹配为0,匹配越差,匹配值越大:

2)标准平方差匹配method=cv_tm_sqdiff_normed

3)相关匹配method=cv_tm_ccorr,采用模板和图像间的乘法操作,较大的数表示匹配程度较高,0标识最坏的匹配效果:

4)标准相关匹配method=cv_tm_ccorr_normed

t′(x′,y′)=t(x′,y′)-1/(w·h)·∑x″,y″t(x″,y″)

i′(x+x′,y+y′)=i(x+x′,y+y′)-1/(w·h)·∑x″,y″i(x+x″,y+y″)

5)相关系数匹配method=cv_tm_ccoeff,将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示6,糟糕的匹配,0表示没有任何相关性:

其中

t′(x′,y′)=t(x′,y′)-1/(w·h)·∑x″,y″t(x″,y″)

i′(x+x′,y+y′)=i(x+x′,y+y′)-1/(w·h)·∑x″,y″i(x+x″,y+y″)

6)标准相关系数匹配method=cv_tm_ccoeff_normed

函数声明如下:

c++:voidmatchtemplate(constcvarr*image,constcvarr*templ,cvarr*result,intmethod);

以上参数分别为,待搜索图像,搜索模板,比较结果得映射图,匹配算法选择。

本说明书中所描述的以上内容仅仅是对本发明所作的举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种修改或补充或采用类似的方式替代,只要不偏离本发明说明书的内容或者超越本权利要求书所定义的范围,均应属于本发明的保护范围。

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