基于基于端点法识别数码管数字的方法与流程

文档序号:21641816发布日期:2020-07-29 02:53阅读:169来源:国知局
基于基于端点法识别数码管数字的方法与流程

本发明涉及图像处理技术领域,尤其涉及基于基于端点法识别数码管数字的方法。



背景技术:

数码管数字的显示是一种应用广泛的一种技术,显示的内容包括温度、压力等重要数据,数码管有固定的7个线段组成,每个线段都有一定的长度与宽度,通过不同线段的显示可以形成不同的数字,每个数字的显示都有不同的线段显示,根据显示的线段的特征实现对数字的识别。

现有识别数码管数字的技术对显示数字的识别存在准确性低,识别速度过慢等缺点。



技术实现要素:

本发明旨在至少在一定程度上解决相关技术中的技术问题之一。为此,本发明的一个目的在于提出基于基于端点法识别数码管数字的方法,本发明。

根据本发明实施例的一种基于端点法识别数码管数字的方法,包括如下步骤:

步骤1、对数码管所显示的数字进行拍照,并使用投影法将每一个数字进行分割,按从左往右的顺序将每一个数字都另存为一幅图像;

步骤2、对步骤1中的每一幅图像进行预处理;

步骤3、对预处理之后的数字图像进行数字识别。

优选地,所述预处理包括灰度化、二值化、形态学处理和提取骨架。

优选地,所述二值化采用大津算法,使得图像上数字所在位置的灰度值为255,其余背景的灰度值为0。

优选地,所述灰度化采用加权平均值法:

grayout(i,j)=0.11×bin(i,j)+0.59×gin(i,j)+0.3×rin(i,j)

其中,grayout(i,j)表示点(i,j)经过灰度化之后的灰度值,bin(i,j)表示原始图像的点(i,j)处的b分量值,gin(i,j)表示原始图像的点(i,j)处的g分量值,rin(i,j)表示原始图像的点(i,j)处的r分量值。

优选地,所述数字识别包括如下步骤:

步骤3.1、寻找曲线,确定曲线个数,以及每条曲线的端点;

步骤3.2、将步骤31中确定的曲线个数与端点之间的关系并进行数字识别。

优选地,所述寻找曲线的方法如下:

步骤3.11、以图像的左上角为起始点,从左往右,从上至下,进行寻找,将遇到的第一个灰度值为255的点记为a点;

步骤3.12、观察a点的八邻域是否有点的灰度值为255;若没有,则将a点的灰度值变为0,回到步骤3.11,重新寻找曲线;若有,且只有一个点的灰度值为255记为点b,并将点b的灰度值变为0;

步骤3.13、判断b点的八邻域中除了a点之外的点是否有灰度值为255;若没有,则将a和b两点计入曲线line1,其中,b点是线line1的一个端点;若有且只有一个点的灰度值为255,则将该点记为c点,并将点c的灰度值变为0;若有且不止有一个点的灰度值为255,则选择离a点最远的点,记为点c,并将点c的灰度值变为0;

步骤3.14、判断c点的八邻域中除了b点之外的点是否有灰度值为255;若没有,将a,b,c三点计入曲线line1,其中,c点是线line1的一个端点;若有且只有一个点的灰度值为255,则将该点记为d点,并将点d的灰度值变为0,若有且不止有一个点的灰度值为255,则选择离a点最远的点,记为点d,并将点d的灰度值变为0;

步骤3.15、重复步骤3.13和步骤3.14直到找到一点除了它的上一级点之外,八邻域中没有一个点的灰度值为255,假设这个记为k,将a点开始到k点结束,中间经历过的所有的点都计入线line1中,k点为线line1的一个端点,计入线line1的所有点的灰度值为0。

优选地,所述寻找曲线的方法还包括:

步骤3.16、找到线line1的一个端点之后,回到a点,观察a点的八邻域中b点除外是否有灰度值为255的点;若没有,则说明a点是线line1的另一个端点;若有,且只有一个点,则将该点记为l点,并经l点的灰度值变为0。

步骤3.17、判断l点的八邻域中除了a点之外的点是否有灰度值为255;若没有,则将l点计入曲线line1,其中,l点是线line1的一个端点;若有且只有一个点的灰度值为255,则将该点记为m点,并将点m的灰度值变为0;若有且不止有一个点的灰度值为255,则选择任意一个点记为m点并将点m的灰度值变为0;

步骤3.18、重复步骤3.17,直到找到一点除了他的上一级点之外八邻域中没有一个点的灰度值为255,此时假设这个点记为r点,此时将l点开始到r点结束,中间经历过的所有的点都计入线line1中,并且r点为线line1的另一个端点计入线line1的所有点的灰度值都已经变为0。

优选地,所述寻找曲线的方法还包括:步骤3.19、将经过一次寻找曲线后的图像继续进行步骤3.11到步骤3.18,直到图像上没有灰度值为255的点,结束步骤3.1。

优选地,所述数字识别的方法包括:

步骤3.21、判断数字图像上寻找到的线条个数或者端点个数;

若线条的个数为2,则表示数字可能3或者4;若线条的个数为1,则表示数字可能是除了3和4之外的所有数字;

步骤3.22、当线条个数为2时,观察4个顶点的位置,若其中三个顶点的横坐标比较相近且在图像上偏左侧的地方,得出数字为3;

若三个顶点的横坐标比较相近且在图像上偏右侧的地方,则这个数字为4;

步骤3.23、当线条的个数为1时,观察端点的特征;

当两个端点重合时,即曲线首尾相连时,得出数字是0;

当两个端点之间的横坐标的差值不超过10个像素时且纵坐标的差大于10个像素,得出数字是1;

当两个端点之间的纵坐标的差值不超过10个像素,而横坐标的差大于10个像素,得出数字是8;

根据该曲线的两个端点分别为:

(x1,y1)、(x2,y2),令f=(x1-x2)×(y1-y2);

如果f为负数,则这个数据为5或者6或者9,观察线line1的中点,如果中点的纵坐标比两个端点的纵坐标都大,得出数字是6,如果比两个端点的纵坐标都小,得出数字是9,如果大于其中一个端点的纵坐标,小于另一个端点的纵坐标,得出数字是5;

如果f为正数,则这个数据为2或者7;

观察线line1的中点,记为:

(x3,y3),令cha=||y1-y3|-|y2-y3||;

当cha的值不超过5个像素时,得出数字是2,否则这个数字是7。

优选地,所述纵坐标等是将图像放在一个二维坐标中,以图像的左上角顶点为原点,向左的方向为x轴,越往右x值越大,向下的方向为y轴,越往下y值越大。

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

提升计算速度:与穿线法识别数码管数字相比,在保证识别正确率的前提下,提示了运行速度;

易于调试:本算法的模块化结构使得易于对其进行更改,优化与调试,同时也可以直接移植到其他算法的开发;

灵活性强:针对每一个数字,根据数字的本身的特征,无需对所有的数字都进行统一的识别,而且由浅到深的方法,选择适合每一个数字的识别方法。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:

图1为本发明提出的基于基于端点法识别数码管数字的方法的运行流程图;

图2为本发明提出的基于基于端点法识别数码管数字的方法的实施例1中原始的图像;

图3为本发明提出的基于基于端点法识别数码管数字的方法的实施例1中预处理后的图像;

图4为本发明提出的基于基于端点法识别数码管数字的方法的实施例1中找到曲线以及端点的图像;

图5为本发明提出的基于基于端点法识别数码管数字的方法的曲线的横纵坐标方向示意图;

图6为本发明提出的基于基于端点法识别数码管数字的方法的实施例2中原始的图像;

图7为本发明提出的基于基于端点法识别数码管数字的方法的实施例2中预处理后的图像;

图8为本发明提出的基于基于端点法识别数码管数字的方法的实施例2中找到曲线以及端点的图像。

具体实施方式

现在结合附图对本发明作进一步详细的说明。这些附图均为简化的示意图,仅以示意方式说明本发明的基本结构,因此其仅显示与本发明有关的构成。

参照图1,一种基于端点法识别数码管数字的方法,包括如下步骤:

步骤1、对数码管所显示的数字进行拍照,并使用投影法将每一个数字进行分割,按从左往右的顺序将每一个数字都另存为一幅图像;

步骤2、对步骤1中的每一幅图像进行预处理;

步骤3、对预处理之后的数字图像进行数字识别。

预处理包括灰度化、二值化、形态学处理和提取骨架。

灰度化是将彩色图像变为灰度图像,本发明采用的是符合人体生理学角度的加权平均值法,灰度化采用加权平均值法:

grayout(i,j)=0.11×bin(i,j)+0.59×gin(i,j)+0.3×rin(i,j)

其中,grayout(i,j)表示点(i,j)经过灰度化之后的灰度值,bin(i,j)表示原始图像的点(i,j)处的b分量值,gin(i,j)表示原始图像的点(i,j)处的g分量值,rin(i,j)表示原始图像的点(i,j)处的r分量值。

二值化是将灰度化之后的图像变为二值图,本发明采用的二值化方法是大津算法,使用这种算法可以自适应地选择一个阈值将图像进行二值化,使得图像上数字所在位置的灰度值为255,其余背景的灰度值为0。

形态学处理是将填充七段式数码管数字图像中每一段之间的空隙。

提取骨架是将每一段构成数字的有宽度的线段的宽度变为一个像素,便于后面的数字识别。

本发明提出的数字识别方法是寻找预处理之后的数字图像上的曲线数量,以及寻找每一个曲线的两个端点,根据曲线数量与端点之间的相对位置关系进行数字的识别,其中数字识别包括如下步骤:

步骤3.1、寻找曲线,确定曲线个数,以及每条曲线的端点;

步骤3.2、将步骤31中确定的曲线个数与端点之间的关系并进行数字识别。

优选地,所述寻找曲线的方法如下:

步骤3.11、以图像的左上角为起始点,从左往右,从上至下,进行寻找,将遇到的第一个灰度值为255的点记为a点;

步骤3.12、观察a点的八邻域是否有点的灰度值为255;若没有,则将a点的灰度值变为0,回到步骤3.11,重新寻找曲线;若有,且只有一个点的灰度值为255记为点b,并将点b的灰度值变为0;

步骤3.13、判断b点的八邻域中除了a点之外的点是否有灰度值为255;若没有,则将a和b两点计入曲线line1,其中,b点是线line1的一个端点;若有且只有一个点的灰度值为255,则将该点记为c点,并将点c的灰度值变为0;若有且不止有一个点的灰度值为255,则选择离a点最远的点,记为点c,并将点c的灰度值变为0;

步骤3.14、判断c点的八邻域中除了b点之外的点是否有灰度值为255;若没有,将a,b,c三点计入曲线line1,其中,c点是线line1的一个端点;若有且只有一个点的灰度值为255,则将该点记为d点,并将点d的灰度值变为0,若有且不止有一个点的灰度值为255,则选择离a点最远的点,记为点d,并将点d的灰度值变为0;

步骤3.15、重复步骤3.13和步骤3.14直到找到一点除了它的上一级点之外,八邻域中没有一个点的灰度值为255,假设这个记为k(中间可能找到的点有e,f,g,……),将a点开始到k点结束,中间经历过的所有的点都计入线line1中,k点为线line1的一个端点,计入线line1的所有点的灰度值为0。

步骤3.16、找到线line1的一个端点之后,回到a点,观察a点的八邻域中b点除外是否有灰度值为255的点;若没有,则说明a点是线line1的另一个端点;若有,且只有一个点,则将该点记为l点,并经l点的灰度值变为0。

步骤3.17、判断l点的八邻域中除了a点之外的点是否有灰度值为255;若没有,则将l点计入曲线line1,其中,l点是线line1的一个端点;若有且只有一个点的灰度值为255,则将该点记为m点,并将点m的灰度值变为0;若有且不止有一个点的灰度值为255,则选择任意一个点记为m点并将点m的灰度值变为0;

步骤3.18、重复步骤3.17,直到找到一点除了他的上一级点之外八邻域中没有一个点的灰度值为255,此时假设这个点记为r点(中间可能找到的点有m,n,o,......),此时将l点开始到r点结束,中间经历过的所有的点都计入线line1中,并且r点为线line1的另一个端点计入线line1的所有点的灰度值都已经变为0。

寻找曲线的方法还包括:步骤3.19、将经过一次寻找曲线后的图像继续进行步骤3.11到步骤3.18,直到图像上没有灰度值为255的点,结束步骤3.1。

本发明定义的相关术语如下:

上一级点与下一级点:假设在寻找曲线的过程中,先找到a点,由a点找到的点为b点,此时,a点是b点的上一级点,b点是a点的下一级点。

在数字图像上寻找到曲线之后,即可对曲线的个数与曲线端点的分析,识别出数字的值,主要的步骤为:

步骤3.21、判断数字图像上寻找到的线条个数或者端点个数;

若线条的个数为2,则表示数字可能3或者4;若线条的个数为1,则表示数字可能是除了3和4之外的所有数字;

步骤3.22、当线条个数为2时,观察4个顶点的位置,若其中三个顶点的横坐标比较相近且在图像上偏左侧的地方,得出数字为3;

若三个顶点的横坐标比较相近且在图像上偏右侧的地方,则这个数字为4;

步骤3.23、当线条的个数为1时,观察端点的特征;

当两个端点重合时,即曲线首尾相连时,得出数字是0;

当两个端点之间的横坐标的差值不超过10个像素时且纵坐标的差大于10个像素,得出数字是1;

当两个端点之间的纵坐标的差值不超过10个像素,而横坐标的差大于10个像素,得出数字是8;

根据该曲线的两个端点分别为:

(x1,y1)、(x2,y2),令f=(x1-x2)×(y1-y2);

如果f为负数,则这个数据为5或者6或者9,观察线line1的中点,如果中点的纵坐标比两个端点的纵坐标都大,得出数字是6,如果比两个端点的纵坐标都小,得出数字是9,如果大于其中一个端点的纵坐标,小于另一个端点的纵坐标,得出数字是5;

如果f为正数,则这个数据为2或者7;

观察线line1的中点,记为:

(x3,y3),令cha=||y1-y3|-|y2-y3||;

当cha的值不超过5个像素时,得出数字是2,否则这个数字是7。

纵坐标等是将图像放在一个二维坐标中,以图像的左上角顶点为原点,向左的方向为x轴,越往右x值越大,向下的方向为y轴,越往下y值越大。

实施例1:

为了更好地说明本发明,下面以实际处理一张数字图像来进行说明,其他的数字图像的处理结果以附图的形式展现,本图片实际数字为2,具体方法包括以下步骤:

参考图2,对数码管显示的数字图像进行拍照,确定数字区域之后,使用投影的方法将数字图像进行分割,得到只含有一个数字的图像,之后对每一张图像进行处理与识别。

对数字图像进行预处理,即包括灰度化、二值化、形态学处理、提取骨架,这些处理方式比较常规,不在赘述。

参考图3-4,对图像进行预处理后,在图像上寻找曲线以及曲线的端点,找到曲线的个数为1。

根据寻找到的曲线以及曲线的端点,记录端点坐标(x1,y1)、(x2,y2),计算f=(x1-x2)×(y1-y2),得到的值为147为正数,因此这个数字为2或者7,再寻找曲线的中点(x3,y3),计算cha=||y1-y3|-|y2-y3||,所得结果为2,小于5,因此数码管的数字为2。

实施例2:

参考图6是除了数字2以外的9个数码管数字的原始图像,经过预处理之后,会得到图7所示的数字图像,再在预处理之后的图像上寻找曲线以及端点,得到的结果如图8,其中寻找到的端点处以小圆圈圈出显示,之后进行数字的识别。

除了数字2以外的识别,剩余数字的识别主要依照下表进行识别判断。在识别数字时,识别条件由上至下,当已识别出具体数字之后,后面的判断条件不再计算。如,当计算出线条的个数为2且发现顶点的横坐标为3左1右时,即可判断出数字为3,而不需要在计算|x1-x2|及其他的值。

参考如下表:

其中:当线条个数为1时,设线段的端点坐标分别为(x1,y1)、(x2,y2),线段的中点坐标为(x3,y3)。

||表示计算绝对值,max表示取两者中的较大值,min表示取两者中的较小值。

本发明提与穿线法识别数码管数字相比,在保证识别正确率的前提下,提示了运行速度,本算法的模块化结构使得易于对其进行更改,优化与调试,同时也可以直接移植到其他算法的开发,针对每一个数字,根据数字的本身的特征,无需对所有的数字都进行统一的识别,而且由浅到深的方法,选择适合每一个数字的识别方法。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。

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