机器视觉字符识别之粘连字符分割识别

科技   2024-12-17 07:45   北京  

粘连字符的分割有很多种方法:

第一种方法:利用阈值法提取联通区域,再利用形态学分离字符;

第二种方法:每个字符定义一个感兴趣区域;

第三种方法:  计算区域每列像素数目,由于不同字符之间连接部分非常狭窄,求取每列像素的全局最小值;

......

其中第一种方法最为常见,也是本文介绍的方法。


粘连字符分割识别

本次采用halcon自带的分类器文件;

一般用于识别数字和字符,以及少数特殊字符;

字符库的使用望文生义即可;

Document文档字符、DotPrint点阵字符、Industrial工业字符等;

可以尝试切换不同的字符库进行识别;

还可自行训练字符库。


待识别原图

图中数字俩俩连在一起



根据直方图阈值法阈值分割结果


填充孔洞后


利用矩形元素在垂直方向开运算

此步骤为关键一步

此时已分离单个字符



利用halcon自带字符库

最终识别结果



核心程序

*(1)字符分割

*关闭更新

dev_update_window ('off')

*读取图像

read_image (Bottle, 'bottle2.png')

*获得图像大小

get_image_size (Bottle, Width, Height)

*关闭窗口

dev_close_window ()

*打开一个图像大小两倍的窗口

dev_open_window (0, 0, 2*Width, 2*Height, 'black', WindowHandle)

set_display_font (WindowHandle, 20, 'mono', 'true', 'false')

dev_display (Bottle)

disp_continue_message (WindowHandle, 'black', 'true')

*全局阈值处理,获得区域

threshold (Bottle, RawSegmentation, 0, 95)

*根据形状特征填充孔洞

fill_up_shape (RawSegmentation, RemovedNoise, 'area', 1, 5)

*利用圆形结构元素执行开运算

opening_circle (RemovedNoise, ThickStructures, 2.5)

dev_display (Bottle)

*填充孔洞

fill_up (ThickStructures, Solid)

*利用矩形结构元素执行开运算。矩形宽设为1,高为7,相当于低于7的连接被截断

opening_rectangle1 (Solid, Cut, 1, 7)

*计算连通区域

connection (Cut, ConnectedPatterns)

*计算区域交集

intersection (ConnectedPatterns, ThickStructures,NumberCandidates)

*根据区域面积进行选择

select_shape (NumberCandidates, Numbers, 'area', 'and', 300, 9999)

*区域排序

sort_region (Numbers, FinalNumbers, 'first_point', 'true', 'column')

*(2)读取数字

*读取OCR分类器(多层感知器)

read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej.omc', OCRHandle)

*使用分类器进行字符分类

do_ocr_multi_class_mlp (FinalNumbers, Bottle, OCRHandle, RecNum, Confidence)

*求取字符区域中心坐标及面积

area_center (FinalNumbers, Area, Row, Column)

set_display_font (WindowHandle, 27, 'mono', 'true', 'false')

*循环显示读取得到的数字

for i := 0 to |RecNum| -1 by 1

*显示结果

disp_message (WindowHandle, RecNum[i], 'image', 80, Column[i]-3, 'green', 'false')

endfor

*清除分类器

clear_ocr_class_mlp (OCRHandle)

dev_update_window ('off')


发展简史

OCR的概念是在1929年由德国科学家Tausheck最先提出来的,后来美国科学家Handel也提出了利用技术对文字进行识别的想法。而最早对印刷体汉字识别进行研究的是IBM公司的Casey和Nagy,1966年他们发表了第一篇关于汉字识别的文章,采用了模板匹配法识别了1000个印刷体汉字。


早在60、70年代,世界各国就开始有OCR的研究,而研究的初期,多以文字的识别方法研究为主,且识别的文字仅为0至9的数字。以同样拥有方块文字的日本为例,1960年左右开始研究OCR的基本识别理论,初期以数字为对象,直至1965至1970年之间开始有一些简单的产品,如印刷文字的邮政编码识别系统,识别邮件上的邮政编码,帮助邮局作区域分信的作业;也因此至今邮政编码一直是各国所倡导的地址书写方式。


20世纪70年代初,日本的学者开始研究汉字识别,并做了大量的工作。中国在OCR技术方面的研究工作起步较晚,在70年代才开始对数字、英文字母及符号的识别进行研究,70年代末开始进行汉字识别的研究,到1986年,我国提出“863”高新科技研究计划,汉字识别的研究进入一个实质性的阶段,清华大学的丁晓青教授和中科院分别开发研究,相继推出了中文OCR产品,现为中国最领先汉字OCR技术。早期的OCR软件,由于识别率及产品化等多方面的因素,未能达到实际要求。同时,由于硬件设备成本高,运行速度慢,也没有达到实用的程度。只有个别部门,如信息部门、新闻出版单位等使用OCR软件。进入20世纪90年代以后,随着平台式扫描仪的广泛应用,以及我国信息自动化和办公自动化的普及,大大推动了OCR技术的进一步发展,使OCR的识别正确率、识别速度满足了广大用户的要求。


软件结构

编辑

由于扫描仪的普及与广泛应用,OCR软件只需提供与扫描仪的接口,利用扫描仪驱动软件即可。因此,OCR软件主要是由下面几个部分组成。


图像输入、预处理:

图像输入:对于不同的图像格式,有着不同的存储格式,不同的压缩方式,目前有OpenCV,CxImage等开源项目 。预处理:主要包括二值化,噪声去除,倾斜较正等。


二值化:

对摄像头拍摄的图片,大多数是彩色图像,彩色图像所含信息量巨大,对于图片的内容,我们可以简单的分为前景与背景,为了让计算机更快的,更好的识别文字,我们需要先对彩色图进行处理,使图片只前景信息与背景信息,可以简单的定义前景信息为黑色,背景信息为白色,这就是二值化图了。


噪声去除:

对于不同的文档,我们对噪声的定义可以不同,根据噪声的特征进行去噪,就叫做噪声去除。


倾斜较正:

由于一般用户,在拍照文档时,都比较随意,因此拍照出来的图片不可避免的产生倾斜,这就需要文字识别软件进行较正。


版面分析:

将文档图片分段落,分行的过程就叫做版面分析,由于实际文档的多样性,复杂性,因此,目前还没有一个固定的,最优的切割模型。


字符切割:

由于拍照条件的限制,经常造成字符粘连,断笔,因此极大限制了识别系统的性能,这就需要文字识别软件有字符切割功能。


字符识别:

这一研究,已经是很早的事情了,比较早有模板匹配,后来以特征提取为主,由于文字的位移,笔画的粗细,断笔,粘连,旋转等因素的影响,极大影响特征的提取的难度。


版面恢复:

人们希望识别后的文字,仍然像原文档图片那样排列着,段落不变,位置不变,顺序不变,的输出到word文档,pdf文档等,这一过程就叫做版面恢复。


后处理、校对:

根据特定的语言上下文的关系,对识别结果进行较正,就是后处理。


工作流程

编辑

一个OCR识别系统,其目的很简单,只是要把影像作一个转换,使影像内的图形继续保存、有表格则表格内资料及影像内的文字,一律变成计算机文字,使能达到影像资料的储存量减少、识别出的文字可再使用及分析,当然也可节省因键盘输入的人力与时间。

从影像到结果输出,须经过影像输入、影像前处理、文字特征抽取、比对识别、最后经人工校正将认错的文字更正,将结果输出。


影像输入

欲经过OCR处理的标的物须透过光学仪器,如影像扫描仪、传真机或任何摄影器材,将影像转入计算机。科技的进步,扫描仪等的输入装置已制作的愈来愈精致,轻薄短小、品质也高,对OCR有相当大的帮助,扫描仪的分辨率使影像更清晰、扫除速度更增进OCR处理的效率。


影像预处理:影像预处理是OCR系统中,须解决问题最多的一个模块。影像须先将图片、表格及文字区域分离出来,甚至可将文章的编排方向、文章的提纲及内容主体区分开,而文字的大小及文字的字体亦可如原始文件一样的判断出来。


对待识别图像进行如下预处理,可以降低特征提取算法的难度,并能提高识别的精度。

二值化:由于彩色图像所含信息量过于巨大,在对图像中印刷体字符进行识别处理前,需要对图像进行二值化处理,使图像只包含黑色的前景信息和白色的背景信息,提升识别处理的效率和精确度。


图像降噪:由于待识别图像的品质受限于输入设备、环境、以及文档的印刷质量,在对图像中印刷体字符进行识别处理前,需要根据噪声的特征对待识别图像进行去噪处理,提升识别处理的精确度。


倾斜校正:由于扫描和拍摄过程涉及人工操作,输入计算机的待识别图像或多或少都会存在一些倾斜,在对图像中印刷体字符进行识别处理前,就需要进行图像方向检测,并校正图像方向。


文字特征抽取:单以识别率而言,特征抽取可说是 OCR的核心,用什么特征、怎么抽取,直接影响识别的好坏,也所以在OCR研究初期,特征抽取的研究报告特别的多。而特征可说是识别的筹码,简易的区分可分为两类:一为统计的特征,如文字区域内的黑/白点数比,当文字区分成好几个区域时,这一个个区域黑/白点数比之联合,就成了空间的一个数值向量,在比对时,基本的数学理论就足以应付了。而另一类特征为结构的特征,如文字影像细线化后,取得字的笔划端点、交叉点之数量及位置,或以笔划段为特征,配合特殊的比对方法,进行比对,市面上的线上手写输入软件的识别方法多以此种结构的方法为主。


对比数据库:当输入文字算完特征后,不管是用统计或结构的特征,都须有一比对数据库或特征数据库来进行比对,数据库的内容应包含所有欲识别的字集文字,根据与输入文字一样的特征抽取方法所得的特征群组。


对比识别

这是可充分发挥数学运算理论的一个模块,根据不同的特征特性,选用不同的数学距离函数,较有名的比对方法有,欧式空间的比对方法、松弛比对法(Relaxation)、动态程序比对法(Dynamic Programming,DP),以及类神经网络的数据库建立及比对、HMM(Hidden Markov Model)…等著名的方法,为了使识别的结果更稳定,也有所谓的专家系统(Experts System)被提出,利用各种特征比对方法的相异互补性,使识别出的结果,其信心度特别的高。


字词后处理:由于OCR的识别率并无法达到百分之百,或想加强比对的正确性及信心值,一些除错或甚至帮忙更正的功能,也成为OCR系统中必要的一个模块。字词后处理就是一例,利用比对后的识别文字与其可能的相似候选字群中,根据前后的识别文字找出最合乎逻辑的词,做更正的功能。


字词数据库:为字词后处理所建立的词库。


人工校正

OCR最后的关卡,在此之前,使用者可能只是拿支鼠标,跟着软件设计的节奏操作或仅是观看,而在此有可能须特别花使用者的精神及时间,去更正甚至找寻可能是OCR出错的地方。一个好的OCR软件,除了有一个稳定的影像处理及识别核心,以降低错误率外,人工校正的操作流程及其功能,亦影响OCR的处理效率,因此,文字影像与识别文字的对照,及其屏幕信息摆放的位置、还有每一识别文字的候选字功能、拒认字的功能、及字词后处理后特意标示出可能有问题的字词,都是为使用者设计尽量少使用键盘的一种功能,当然,不是说系统没显示出的文字就一定正确,就像完全由键盘输入的工作人员也会有出错的时候,这时要重新校正一次或能允许些许的错,就完全看使用单位的需求了。


结果输出

有人只要文本文件作部份文字的再使用之用,所以只要一般的文字文件、有人要漂漂亮亮的和输入文件一模一样,所以有原文重现的功能、有人注重表格内的文字,所以要和Excel等软件结合。无论怎么变化,都只是输出档案格式的变化而已。如果需要还原成原文一样格式,则在识别后,需要人工排版,耗时耗力。


文章来源:网络


机器视觉课堂
OpenCV、Halcon等机器视觉专业学习交流平台,服务于工业自动化、先进机器人技术、人工智能等相关专业技术人才。定期发布最新机器视觉相关新闻、应用案例、技术资料、展会信息等信息。
 最新文章