主要内容

识别文本使用光学字符识别(OCR)

这个例子展示了如何使用光学字符识别从计算机视觉功能工具箱™进行光学字符识别。

文字识别使用光学字符识别函数

识别文本图像是有用的在许多计算机视觉应用,如图像搜索、文档分析,机器人导航。的光学字符识别函数提供了一种简便的方法将文字识别功能添加到广泛的应用。

%加载一个图像。我= imread (“businessCard.png”);% OCR执行。结果= ocr (I);%显示的一个公认的单词。词= results.Words {2}
词= ' MathWorks:“
%这个词在我的位置:wordBBox = results.WordBoundingBoxes (2)
wordBBox =1×4173 66 376 82
%显示原始图像的词的位置。图Iname = insertObjectAnnotation(我“矩形”、wordBBox词);imshow (Iname)

返回的信息光学字符识别函数

光学字符识别函数返回确认文本,识别自信,原始图像中的文本的位置。您可以使用这些信息来识别文本中的图像分类错误的位置。

%找到5字符与信心。[~,idx] = (results.CharacterConfidences)进行排序;lowConfidenceIdx = idx (1:5);%的边界框的位置低信心字符。lowConfBBoxes = results.CharacterBoundingBoxes (lowConfidenceIdx:);%得到公认的字符。lowConfChars = results.Text (lowConfidenceIdx)”;%注释信心较低的人物形象。str =“性格= '”+ lowConfChars +“”;Ilowconf = insertObjectAnnotation(我“矩形”lowConfBBoxes, str);图imshow (Ilowconf)标题(“品德认识最少的信心”)

名片的标志是不正确地归类为一个文本字符。这些类型的OCR错误使用的信心值可以确定任何进一步的处理之前。

挑战获得准确的结果

光学字符识别执行文本时最好坐落在一个统一的背景和格式化文档与光背景黑色文字。当文本出现在暗背景不均匀,需要额外的预处理步骤来得到最好的光学字符识别结果。在这部分的示例中,您会尝试找到键盘上的数字。虽然,键盘OCR图像看起来容易,实际上它是一大挑战,因为在非均匀黑色背景的文本。

我= imread (“keypad.jpg”);I = im2gray(我);图imshow(我)

% OCR图像上运行结果= ocr (I);results.Text
ans = ' '

results.Text表明没有公认的文本。在键盘图片,文本是稀疏的,位于一个不规则的背景。在这种情况下,启发式用于文档布局分析光学字符识别可能是没有找到块内的文本图像,和,因此,文字识别失败。在这种情况下,禁用自动布局分析,使用LayoutAnalysis参数,可以帮助改善结果。

% LayoutAnalysis设置为“块”指示ocr图像%只包含一个文本块。结果= ocr(我LayoutAnalysis =“块”);results.Text
ans = 0×0空字符数组

到底是哪里出了错?

调整LayoutAnalysis参数没有帮助。要理解为什么OCR继续失败,你必须调查最初的二值化步骤中执行光学字符识别。您可以使用imbinarize因为检查这个最初的二值化步骤光学字符识别和默认的“全球”的方法imbinarize使用首先进行图像二值化的方法。

BW = imbinarize(我);图imshowpair (BW,我“蒙太奇”)

阈值后,二进制图像不包含文本。这就是为什么光学字符识别未能认识到原始图像中的任何文本。你可以帮助改善结果通过预处理图像改善文本分类。下一部分的例子探讨了两个有用的预处理技术。

图像预处理技术改进的结果

穷人文本分割上图所示是由非均匀背景的图像,即浅灰色钥匙深灰色的包围。您可以使用以下预处理技术去除背景变化和改善文本分类。更多细节关于这个技术给出了示例正确的非均匀照明和分析前景对象

%去除键盘背景。浏览icorrect = imtophat(我,strel (“磁盘”、15));BW1 = imbinarize(浏览icorrect);图imshowpair (BW1,我“蒙太奇”)

删除背景变化后,数字现在可见的二进制图像。然而,有几个工件的边缘键和旁边的小文本数字可能继续阻碍准确OCR的整体形象。额外的预处理使用形态学重建有助于消除这些构件和生产清洁OCR图像。

%进行形态学重建和显示图像的关键。标志= imerode(浏览icorrect strel (“行”10 0));Iclean = imreconstruct(标记、浏览icorrect);Ibinary = imbinarize (Iclean);图imshowpair (Iclean Ibinary,“蒙太奇”)

现在反清洁的关键图像产生图像包含黑色文字OCR的背景光。

BW2 = imcomplement (Ibinary);图imshowpair (Ibinary BW2,“蒙太奇”)

现在这些预处理步骤后,数字,从背景中分割出来光学字符识别产生了一些结果。

结果= ocr (BW2 LayoutAnalysis =“块”);results.Text
ans = ' ww] 2 x 3 md ud wb /世行wm吗?- *。0 #)”

结果看起来很大程度上是不准确的,除了几个字符。这是由于不同大小的字符键盘中导致自动布局分析失败。

改善结果的一种方法是利用先验知识中的文本图像。在本例中,只包含数字数字和文本你感兴趣*,# '字符。你可以通过约束改善结果光学字符识别只选择最适合的“0123456789 * #”。

%使用“CharacterSet”参数限制OCR结果= ocr (BW2 CharacterSet =“0123456789 * #”);results.Text
ans = ' 2 3 4 78 * 0 '

结果现在更好,只包含字符从给定的字符集。然而,还有几个字符图像中感兴趣的失踪的识别结果。

ROI-based处理改善结果

进一步提高识别结果在这种情况下,图像中识别特定区域光学字符识别应的过程。在键盘的例子形象,这些区域将是那些只包含数字,*,#字符。您可以选择使用手动区域imrect,或者你可以自动化这个过程。如何自动检测文本区域的信息,明白了自动检测并使用女士和OCR识别文本自动检测并使用Pretrained工艺网络和OCR识别文本。在这个例子中,您将使用regionprops找到感兴趣的人物在键盘上。

%利用regionprops找到边界框周围文本区域和测量。cc = bwconncomp (Ibinary);统计= regionprops (cc, (“边界框(“大小),“区域”]);%从输出中提取边界框和面积统计。投资回报率= vertcat(统计(:).BoundingBox);面积= vertcat(统计(:).Area);%显示所有连接的地区。img = insertObjectAnnotation(我“矩形”roi区域,“线宽”3);图;imshow (img);

感兴趣的最小字符在这个例子中是数字“1”。使用它的面积来过滤任何异常值。

%定义区域约束基础上的面积最小的字符。areaConstraint = > 347;%保持区域满足面积约束。投资回报率=双(roi (areaConstraint:));%显示应用领域约束后剩余的边界框。img = insertShape(我“矩形”roi);图;imshow (img);

进一步处理基于地区的长宽比是用于识别区域可能包含一个字符。这有助于消除较小的文本字符,旁边的数字混在一起。一般来说,文本越大就越容易光学字符识别认识到。

%计算纵横比。宽度= roi (:, 3);身高= roi (:, 4);aspectRatio =宽度。/高;%的比例在0.25和1.25之间是典型的单个字符%,因为他们通常不很短和宽或很高和瘦。roi = roi (aspectRatio & aspectRatio < 0.25 > 1.25,:);%显示区域在应用区域和长宽比的限制。img = insertShape(我“矩形”roi);图;imshow (img);

可以传递到剩下的地区光学字符识别函数,它接受矩形区域的利益作为输入。区域的大小略有增加,包括额外的背景像素周围的文本字符。这有助于提高内部启发式用于确定文本的极性的背景(如光文本在一个黑暗的背景与光背景黑色文字)。

numAdditionalPixels = 5;roi (: 1:2) = roi (: 1:2) - numAdditionalPixels;roi (:, 3:4) = roi (:, 3:4) + 2 * numAdditionalPixels;

通过设置禁用自动布局分析LayoutAnalysis“没有”。当手动ROI提供输入,设置LayoutAnalysis“块”,“词”、“textline”,“性格”或“没有”可能有助于改善结果。实证分析需要确定最优布局分析的价值。

结果= ocr (BW2 roi, CharacterSet =“0123456789 * #”LayoutAnalysis =“没有”);

识别文本可以显示在原始图像上使用insertObjectAnnotation。的deblank函数是用来消除拖尾字符,如空白或新行。

文本= deblank ({results.Text});img = insertObjectAnnotation(我“矩形”、roi、文本);图;imshow (img)

虽然regionprops使你找到键盘的数字图像,它可能不工作自然场景图像有许多对象除了文本。这些类型的图像,在示例中所示的技术自动检测并使用Pretrained工艺网络和OCR识别文本可以提供更好的文本检测结果。

总结

这个例子显示了光学字符识别函数可以用来识别文本图像,以及一个看似简单的图像OCR要求额外的预处理步骤产生好结果。

引用

[1]史密斯射线。通过Tab-Stop检测混合页面布局分析。学报第十届国际会议文档分析和识别。2009年。

相关的话题