新课程杂志首页 > 来稿选登 >

模糊图像中的文字信息定位与识别

作者:张伟伟 本文字数:2615
  [摘           要]  基于图像处理与字符识别技术设计并开发了一个对模糊图像中文字信息进行定位与识别的系统,系统先对读入图像进行灰度化、二值化、滤波、细化等预处理操作,得到含有文字信息的清晰图像,然后进行字符识别,包括字符定位与分割、字符归一化处理、字符特征提取、字符匹配识别处理四步。系统采用VC6.0实现人机交互界面友好,通过实验验证系统能够定位和识别出包含纯数字或纯汉字的图片,包含各类字符的车牌图片中的文字信息。
  [关    键   词]  图像处理;字符识别;特征提取
  [中图分类号]  TP391.41                   [文献标志码]  A                      [文章编号]  2096-0603(2019)05-0140-02
   社会发展进入信息时代,以图像为主的多媒体信息迅速成为重要的信息传递媒介,图像中的文字信息包含丰富的高层语义信息,提取出这些文字,对图像高层次语义的理解、索引和检索非常有帮助。图形图像文字识别技术早有应用,如对扫描图片进行OCR(光学字符识别)将包含文本的图像转化为文本,文字识别技术还可用于单据、车牌、标牌、银行卡账号、信封上字符的识别等。目前,国内外学者对基于机器视觉技术的数字识别做了深入的研究。本文旨在基于已有的文字识别技术设计图像预处理、字符定位、字符分割、特征提取以及字符识别方法,实现对模糊彩色图像中印刷体文字(汉字、英文字符)的识别。
   论文组织结构如下:第2节介绍本文采用的图像预处理方法,第3节基于本文需求提出一个简洁有效的字符定位、分割和识别算法,第4节给出实验测试结果,最后总结全文。
   一、图像预处理
   在对图像中的文字进行识别之前,首先要对图像进行预处理,本文的预处理过程为:输入图片→灰度化处理→二值化处理→滤波去除噪声点→细化处理。
   (一)灰度化
   设原始图像为BMP(bit map的缩写)文件,其余格式的可以转化为BMP格式。BMP是Windows本身可以直接提供读取支持的位图文件格式。BMP文件可用每像素1、4、8、16或24位来编码颜色信息,这个位数称作图像的颜色深度,它决定了图像所含的最大颜色数。根据BMP文件格式可以提取出图像中每个像素的颜色值,对彩色图像,每个像素颜色由红绿蓝(R、G、B)3个分量表示,所以能显示出各种颜色。灰度图像没有这些颜色差异,有的只是亮度上的不同,灰度值大的像素点比较亮(像素值最大为255,为白色),反之比较暗(像素值最小为0,为黑色)。
   灰度化处理就是对RGB图像进行加权求和,得到一个灰度值。本文采用式(1)计算灰度值。定义1基于RGB的灰度值定义为:
   灰度值 = 0.299 * Red + 0.587 * Green + 0.114 * Blue + 0.5(1)
   (二)二值化
   为了更加便利地进行后续的图像处理操作,还需要对已经得到的灰度图像进行二值化处理。图像的二值化,即根据一定的标准把图像中的像素分成两种颜色。本文根据像素的灰度值将图像处理成黑白两色。
   对含有字符的图像(如车牌),前景色为字符的颜色,背景像素个数显然是大于前景像素的个数。所以,可以设置像素个数少的颜色为规定的前景色,像素個数多的颜色为规定的背景色。我们采用自适应阈值法,先计算图像整体灰度的平均值,然后将此平均值作为阈值。如果灰度值大于阈值的像素数多于低于阈值的,则将灰度值大于阈值的像素设为背景色,低于阈值的设为前景色。如果灰度值大于阈值的像素数少于低于阈值的,则将灰度值低于阈值的像素设为背景色,高于阈值的设为前景色。
   (三)滤波处理
   采用去除杂点的方法进行去噪声处理。扫描整个图像,当发现一个前景色点的时候,就考察并计算和该前景色点间接或者直接相连的前景色点的个数,如果个数小于特定的值,那就说明该点是离散点,将其去掉(变成背景色点)。我们用递归调用法考察相连的前景色点。
   (四)细化处理
   由于需要处理的图像大多是从印刷出版物上扫描来的或是对印刷文字进行拍照得到的,所以在很多情况下字符会有些模糊,对字符识别造成一定的困难。可以对图像进行锐化处理,使模糊的图像清晰。
   本文采用Hilditch算法,该算法通过判断去掉图像中是边界点而不是连通点的像素点。对一个矩形区域,从左上角开始到右下角,每次扫描可以将矩形最外面一层剔去,层层剥离后,最终只剩下最中间的细化图像。
   二、字符识别算法
   (一)字符定位与分割处理
   本文通过水平方向和垂直方向的投影定位和分割图像中包含的字符。理论上,,水平投影、垂直投影后,所以可以对空白处进行行和列的分割。不过实际应用中还有很多细节需要考虑,例如左右结构的汉字经过垂直方向的投影,可能被分成两个甚至三个部分,另外汉字和英文字符混合时实现正确的分割就更为复杂。对于图像矩阵,从上到下逐行扫描,先设置状态为未发现文字。
   Step1:状态为未发现文字且未到图像末尾时循环做:如果当前行的前景色像素数为0,则设置该行为一行文字的开始,然后继续往下扫描,如果当前行的前景色像素数大于0,则设置状态为已发现文字。
   Step2:状态为已发现文字且未到图像末尾时循环做:如果当前行的前景色像素数大于0,则继续往下扫描,如果当前行的前景色像素数为0,则设置该行为一行文字的结束行,将包含一行文字的数据重新存放在一个数组中,再对这一行文字进行列分割得到一个个汉字或英文字符,之后再进行字符识别,然后将状态设为未发现文字。重复上述两步。