一种字符串图像识别方法与流程

文档序号:15984081发布日期:2018-11-17 00:40阅读:347来源:国知局

本发明涉及图像识别领域,具体是一种字符串图像识别方法。

背景技术

在图像识别领域,针对字符的识别,以及从图像中提取其它数据的方法,多采用“光学字符识别(opticalcharacterrecognition)”技术,简称ocr技术。ocr技术主要通过“单元模式匹配”法和“特征提取法”两种方式进行字符识别。

单元模式匹配法(patternmatching)是将每一个字符与已保存的标准字体、字号的位图文件进行“不严格”的比较,找出最为相似的字符,认定为目标字符。

特征提取法(featureextraction)是先将每个字符分解为很多个不同的字符特征,例如水平线、斜线、曲线等,然后将这些特征与已保存的字符特征相比较,选出特征最为接近的字符,认定为目标字符。

对于ocr技术的两种方式之一,单元模式匹配法在速度上较快,但这种方式是采用“最为近似”作为选定标准,对于被识别的内容中出现不同字体的情况,会导致“正确的字符反而不是最近似”的情况,进而出现识别错误。

ocr技术的另一种方式,特征提取法需要先将被识别字符作“特征识别”,以将字符拆分成不同的特征,因此在拆分难度上较大,以及识别时间上较长。同时,这种方式还存在两个缺点,一是被识别字符拆分出的特征可能会出现顺序不一致的情况,二是在汉字中存在着“多个汉字的特征极为相似甚至基本相同”的情况,这都给特征识别的方式带来了一些不确定因素。

另外,ocr技术只利用了字符的形态特征,而未利用图像的色彩特征,因此失去了一些识别速率。

申请号cn201210189898.2名称为“基于连通区域和间隙模型的车牌字符分割方法”采用连通区域去噪的方法分割字符图像,需要反复大量计算,识别速率较低。

申请号cn200810062050.7名称为“基于粗网格特征提取和bp神经网络的车牌字符识别方法”采用神经网络方法识别字符图像,在训练过程中往往需要对参数进行人为调整。



技术实现要素:

本发明的目的就是解决上述技术问题,提供一种字符串图像识别方法,包括以下步骤:

(1)图像二值化:将一幅图像转换成只包括黑白两种颜色的图像;

(2)字符串边界定位:在图像中计算出字符串的最小图像范围;

(3)字符串区域裁剪:将字符串的最小图像范围之外的部分剪裁掉,只保留包含有字符串的最小区域;

(4)字符分割:采用一种“递归式”的方法,通过不断尝试画分割线,根据画出的分割线与字符串是否相交决定继续分割还是退回重新画分割线,来判别每个字符的边界范围,将字符串中每个字符所占据的区域计算出来;

(5)字符识别:将图像中每个字符区域的像素信息数据化,与字库中数组比较,数组中每个字节都相等则输出这个字符,图像中字符串所有字符识别完成连接起来,形成字符串。

所述步骤(1)图像二值化包括以下子步骤:

(1.1)色彩转换:遍历图像中的每个像素,针对每个像素分别取出它的“红”、“绿”、“蓝”三个颜色分量,假设分别为ri、gi、bi,然后按照下面公式计算得到灰度值:

di=ri*pr+gi*pg+bi*pb

其中,di是像素转换后的灰度值;pr、pg、pb分别是“红”、“绿”、“蓝”三个颜色分量的乘法系数,表示“红”、“绿”、“蓝”三个颜色分量对于转换后的黑白图像所起的作用程度,取值范围介于0.0~1.0之间,并且它们三者相加的和,应当等于1.0。

将pr、pg、pb三者的值都设置为0.333,此时像素转换后的灰度值即为“红”、“绿”、“蓝”三个颜色分量的平均值,也可以用下面公式表示:

di=(ri+gi+bi)/3

将整幅图像中每个像素变换完毕之后,即会得到一张只包含有“灰度分量”的灰度图像

(1.2)计算阈值:统计出灰度图像中的最大灰度值和最小灰度值,然后将二者的平均值作为阈值;

(1.3)像素二值化:使用计算的阈值,遍历灰度图像中的每个像素,将图像中大于阈值的灰度变为白色,将小于阈值的灰度变为黑色;

(1.4)颜色反转:首先判断二值化图像是否需要反转,判断的方法是,分别统计白色像素和黑色像素的数量,比较黑白像素数量的多少,如果黑色像素少于白色则需要做反转,否则,如果白色像素少于黑色像素则不需要做反转,当判断的结果是“需要反转”后,则遍历二值化图像中的每个像素,将黑白颜色依次互换即可。

所述步骤(2)字符串边界定位包括以下子步骤:

(2.1)先依次遍历二值化图像的每一行,统计出每一行中前景色像素的数量;

(2.2)在遍历完所有行之后,可以得到一个一维数组,数组中的每一个元素对应图像的每一行,表示每一行中前景色像素的数量;

(2.3)在数组中找出“第一个”不为零的元素和“最后一个”不为零的元素,记录下这两个元素在数组中“序号”,这两个“序号”即是字体所在区域外接矩形的上边缘和下边缘。

所述步骤(4)字符分割包括以下步骤:

(4.1)初始化:在此步骤中,初始化一个变量n,它的初始值设置1;

(4.2)先在图像最左边的外侧第n像素处画出一条分割线,由于这条分割线在图像左边缘外侧,假设图像中的坐标从0开始,所以它在图像上的横坐标是-n,然后执行第4.3步;

(4.3)从当前分割线向右方迈步。迈步的步长是“字号”或“字号的一半”,在此处,如果是第一次到达图像的此坐标处,则使用“字号”作为步长,然后执行第4.4步;如果是第二次到达图像的此坐标处则使用“字号的一半”作为步长,然后执行第4.4步;如果是第三次到达图像的此坐标处,则说明当前的分割线位置是错误的,将当前分割线取消,并回退前一次迈步,然后重新执行第4.3步,此时,还有一种情况,如果此时已经位于图像最左边,则无法回退前一次迈步,在这种情况下,清除所有分割线,将n的值增加1,然后执行第4.2步;

(4.4)在迈出后的位置,尝试画一条分割线。如果分割线与字体不相交,即分割线所在的纵线上没有字体像素,则执行第4.5步操作,相反,如果分割线与字体相交,则执行第4.6步操作;

(4.5)将这条分割线与前一条分割线之间的区域“假定”为是一个字符,将这个区域裁剪出来,并做“字符识别”尝试,如果字符识别失败,则执行第4.6步,相反,如果字符识别成功,则这次迈步“暂时”认定为“迈步成功”,并执行第4.7步;

(4.6)进入此步骤,说明先前迈步失败,此时,应将之前画的分割线取消,并将迈步回退,然后重新执行第4.3步;

(4.7)判断当前所在位置是否已经到达图像的最右端,如果未到达,执行第4.3步,以继续查找下一条分割线,如果已经到达,则执行第4.8步;

(4.8)进入此步骤,说明所有的分割线都已经成功查找完成。将每一次迈步过程中识别出的字符依次连接,形成字符串。

所述步骤(5)字符识别包括以下子步骤:

(5.1)字符居中:在“图像分割”步骤得到的结果中,多数情况下,图像中字符是居中的,但某些汉字字母、标点符号是不居中的,除此之外,在“图像分割”步骤中得到的结果图像,它的高度可能不等于字号,它的宽度可能不等于字号或字号的一半,因此,在做居中化之前,需要先将图像的尺寸调整正确;

(5.2)图像数据化:将把字符图像转换成二进制数据,转换方式如下:将图像中的前影颜色认为是1,将背景颜色认为是0,按照先列后行的顺序依次遍历图像中的每个像素,在遍历某一行时,将行内像素认为是一个bit位,组成相应的字节数据数组;

(5.3)字库对照:将数据化后的结果数组,分别与字库中的每个字符对应的数组做对比,如果数组中的每个字节全部相等,则认为此字符就是图像中的字符,取出它的gbk编码,识别成功;否则认为识别失败;对于图像中的字符串,将每个字符都认识出来之后,将每个字节的gbk编码依次连接,形成字符串。

本发明具有以下有益效果:

(1)由于没有使用“形态学”方法,因此不需要图像处理所必需的大规模计算,大大提高字符识别速率;

(2)能够实现半角字符和全角字符混合排版识别;

(3)在识别过程中,因为是以严格的字符边界,以及全角半角字符宽度为依据,因此识别准确度较高。

附图说明

图1为本发明字符串边界定位示例图。

图2为本发明字符串裁剪示意图。

图3为本发明字符分割示意图。

图4为本发明字符分割步骤流程图。

具体实施方式

下面结合附图对本发明进一步说明。

一种字符串图像识别方法,包括以下步骤:

1、图像二值化:将一幅图像转换成只包括黑白两种颜色的图像;

2、字符串边界定位:在图像中计算出字符串的最小图像范围;

3、字符串区域裁剪:将字符串的最小图像范围之外的部分剪裁掉,只保留包含有字符串的最小区域;

4、字符分割:采用一种“递归式”的方法,通过不断尝试画分割线,根据画出的分割线与字符串是否相交决定继续分割还是退回重新画分割线,来判别每个字符的边界范围,将字符串中每个字符所占据的区域计算出来;

5、字符识别:将图像中每个字符区域的像素信息数据化,与字库中数组比较,数组中每个字节都相等则输出这个字符,图像中字符串所有字符识别完成连接起来,形成字符串。

步骤1中图像二值化包括以下子步骤:

1.1、色彩转换:遍历图像中的每个像素,针对每个像素分别取出它的“红”、“绿”、“蓝”三个颜色分量,假设分别为ri、gi、bi,然后按照下面公式计算得到灰度值:

di=ri*pr+gi*pg+bi*pb

其中,di是像素转换后的灰度值;pr、pg、pb分别是“红”、“绿”、“蓝”三个颜色分量的乘法系数,表示“红”、“绿”、“蓝”三个颜色分量对于转换后的黑白图像所起的作用程度,取值范围介于0.0~1.0之间,并且它们三者相加的和,应当等于1.0。

将pr、pg、pb三者的值都设置为0.333,此时像素转换后的灰度值即为“红”、“绿”、“蓝”三个颜色分量的平均值,也可以用下面公式表示:

di=(ri+gi+bi)/3;

将整幅图像中每个像素变换完毕之后,即会得到一张只包含有“灰度分量”的灰度图像;

1.2、计算阈值:统计出灰度图像中的最大灰度值和最小灰度值,然后将二者的平均值作为阈值;

1.3、像素二值化:使用计算的阈值,遍历灰度图像中的每个像素,将图像中大于阈值的灰度变为白色,将小于阈值的灰度变为黑色;

1.4、颜色反转:首先判断二值化图像是否需要反转,判断的方法是,分别统计白色像素和黑色像素的数量,比较黑白像素数量的多少,如果黑色像素少于白色则需要做反转,否则,如果白色像素少于黑色像素则不需要做反转,当判断的结果是“需要反转”后,则遍历二值化图像中的每个像素,将黑白颜色依次互换即可。

步骤2字符串边界定位包括以下子步骤:

2.1、先依次遍历二值化图像的每一行,统计出每一行中前景色像素的数量;

2.2、在遍历完所有行之后,可以得到一个一维数组,数组中的每一个元素对应图像的每一行,表示每一行中前景色像素的数量,图1字符串能够得到这样的数组:

[0,0,0,0,0,0,0,0,0,15,5,18,33,14,27,17,26,17,17,17,21,19,5,20,3,0,0,0,0,0,0,0,0,0,];

2.3、在数组中找出“第一个”不为零的元素和“最后一个”不为零的元素,记录下这两个元素在数组中“序号”,对于图1,序号分别是10和25,这两个“序号”即是字体所在区域外接矩形的上边缘和下边缘。

步骤3中字符串区域裁剪即将上边缘以上和下边缘以下的图像部分裁剪掉,只保留上下边缘之间的部分。对于图1,只保留从第13到第25行之间的部分。

步骤4中字符分割要求字符串所使用的字库必须满足以下条件:

1)字库中的全角字符所占的“区域”的宽度和高度等于字号。例如图2所使用的字号是16号,该字库中的全角字符所占的“区域”的宽度和高度等于16。注意,这里指的是所占的“区域”的宽度和高度,不是指字符本身的宽度和高度;

2)字库中的半角字符所占的“区域”的高度等于字号,宽度等于字号的一半。例如图2所使用的字库中的半角字符所占的“区域”的高度和宽度分别等于16和8;

3)字库中的每一个字符,包括全角和半角,它所在区域的最左边的列或最右边的列必须为背景色。

所述字符分割,即是在图像中针对每个字符找出一根对应的纵向分割线,使得分割线“恰好落在两个字符之间”,然后依据分割线将图像分割成若干块,如图3所示。

步骤4中字符分割,是一种“递归式”的方法,以不断向前“迈步尝试”和向后“回退”的方式,来判别每个字符的边界范围,包括以下子步骤:

4.1、初始化:在此步骤中,初始化一个变量n,它的初始值设置1;

4.2、先在图像最左边的外侧第n像素处画出一条分割线,由于这条分割线在图像左边缘外侧,假设图像中的坐标从0开始,所以它在图像上的横坐标是-n,然后执行第3步;

4.3、从当前分割线向右方迈步。迈步的步长是“字号”或“字号的一半”,在此处,如果是第一次到达图像的此坐标处,则使用“字号”作为步长,然后执行第4步;如果是第二次到达图像的此坐标处则使用“字号的一半”做为步长,然后执行第4步;如果是第三次到达图像的此坐标处,则说明当前的分割线位置是错误的,将当前分割线取消,并回退前一次迈步,然后重新执行第3步,此时,还有一种情况,如果此时已经位于图像最左边,则无法回退前一次迈步,在这种情况下,清除所有分割线,将n的值增加1,然后执行第2步;

4.4、在迈出后的位置,尝试画一条分割线。如果分割线与字体不相交,即分割线所在的纵线上没有字体像素,则执行第5步操作,相反,如果分割线与字体相交,则执行第6步操作;

4.5、将这条分割线与前一条分割线之间的区域“假定”为是一个字符,将这个区域裁剪出来,并做“字符识别”尝试,如果字符识别失败,则执行第6步,相反,如果字符识别成功,则这次迈步“暂时”认定为“迈步成功”,并执行第7步;

4.6、进入此步骤,说明先前迈步失败,此时,应将之前画的分割线取消,并将迈步回退,然后重新执行第3步;

4.7、判断当前所在位置是否已经到达图像的最右端,如果未到达,执行第3步,以继续查找下一条分割线,如果已经到达,则执行第8步;

4.8、进入此步骤,说明所有的分割线都已经成功查找完成。将每一次迈步过程中识别出的字符依次连接,形成字符串。

上述步骤中存在的跳转过程如图4所示。

步骤5字符识别包括以下子步骤:

5.1、字符居中:在“图像分割”步骤得到的结果中,多数情况下,图像中字符是居中的,但某些汉字字母、标点符号是不居中的,例如,下划线“_”在上下不居中,在某些字库中,中括号“[”和“]”是左右不居中的,因此需要对这些字符图像做“居中化”处理,除此之外,在“图像分割”步骤中得到的结果图像,它的高度可能不等于字号,它的宽度可能不等于字号或字号的一半,因此,在做居中化之前,需要先将图像的尺寸调整正确;

5.2、图像数据化:将把字符图像转换成二进制数据,转换方式如下:将图像中的前影颜色认为是1,将背景颜色认为是0,按照先列后行的顺序依次遍历图像中的每个像素,在遍历某一行时,将行内像素认为是一个bit位,组成相应的字节数据。值得说明的是,对于不同的字号来说,对每个字符数据化后的字节数量是不同的,16号字库全角字符和半角字符分别是32个字节和16个字节,20号字库的全角字符和半角字符分别是60个字节和40个字节;

5.3、字库对照:将数据化后的结果数组,分别与字库中的每个字符对应的数组做对比,如果数组中的每个字节全部相等,则认为此字符就是图像中的字符,取出它的gbk编码,识别成功;否则认为识别失败。最后,对于图像中的字符串,将每个字符都认识出来之后,将每个字节的gbk编码依次连接,形成字符串,至此,图像识别全部完成。

本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

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