主要内容

自动检测并使用女士和OCR识别文本

这个例子展示了如何检测区域图像中包含文本通过最大限度地稳定极值区域特征检测器(女士)。这是一个常见的任务进行非结构化场景。非结构化场景图像包含待定或随机场景。例如,您可以检测和识别文本自动从捕获视频,提醒司机一个路标。这是不同于结构化场景,包含已知场景文本的位置是预先知道。

分段从非结构化文本场景大大有助于额外任务,比如光学字符识别(OCR)。自动文本检测算法在这个例子中检测到大量的文本区域候选人和逐步消除这些不太可能包含文本。

步骤1:使用ms检测候选文本区域

女士功能探测器适用于寻找文本区域[1]。它适用于文本,因为一致的颜色和高对比度的文本会导致稳定强度配置文件。

使用detectMSERFeatures函数来找到所有区域内的形象和情节这些结果。请注意,有许多非文本区域检测和文本。

colorImage = imread (“handicapSign.jpg”);I = im2gray (colorImage);%检测女士地区。[mserRegions, mserConnComp] = detectMSERFeatures(我“RegionAreaRange”(200 8000),“ThresholdDelta”4);图imshow(我)情节(mserRegions“showPixelList”,真的,“showEllipses”、假)标题(“女士”)举行

图包含一个坐标轴对象。坐标轴对象与标题女士地区包含1120个对象类型的形象,线。

步骤2:删除非文本区域基于基本的几何性质

尽管女士算法挑出大部分的文本,它还检测到其他图像不稳定地区的文本。您可以使用一个基于规则的方法来消除非文本区域。例如,几何性质的文本可以用来过滤掉非文本区域使用简单的阈值。或者,您可以使用机器学习的方法来训练文本和非文本分类器。通常情况下,这两种方法的结合会产生更好的结果[4]。这个例子使用一个简单的基于规则的方法来过滤非文本区域基于几何属性。

有几种几何属性有利于区分文本和非文本区域(2、3),包括:

  • 纵横比

  • 偏心

  • 欧拉数

  • 程度上

  • 可靠性

使用regionprops测量的这些属性,然后删除地区根据自己的属性值。

%使用regionprops测量女士属性mserStats = regionprops (mserConnComp,“边界框(“大小),“偏心”,“稳健”,“程度”,“欧拉”,“图像”);%计算使用边界框数据纵横比。bbox = vertcat (mserStats.BoundingBox);w = bbox (: 3);h = bbox (: 4);aspectRatio = w / h;%阈值的数据,以确定哪些区域去除。这些阈值%可能需要调整其他图像。filterIdx = aspectRatio ' > 3;(mserStats filterIdx = filterIdx |。偏心]> .995;(mserStats filterIdx = filterIdx |。可靠性)< 3;(mserStats filterIdx = filterIdx |。)< 0.2 | [mserStats程度。程度上]> 0.9;(mserStats filterIdx = filterIdx |。EulerNumber] < 4;%去除区域mserStats (filterIdx) = [];mserRegions (filterIdx) = [];%显示剩余的区域图imshow(我)情节(mserRegions“showPixelList”,真的,“showEllipses”、假)标题(“基于几何属性后删除非文本区域”)举行

图包含一个坐标轴对象。坐标轴对象与基于几何性质的标题后删除非文本区域包含1042个对象类型的形象,线。

步骤3:删除非文本区域基于笔划宽度变化

另一个常见的指标用于区分文本和非文本是笔划宽度。笔划宽度是一个测量的曲线和线条的宽度占一个字符。文本区域往往有小笔划宽度的变化,而非文本区域往往有较大的差异。

帮助了解笔划宽度可以用来删除非文本区域,估计的笔划宽度检测到女士的地区之一。你可以通过使用一个距离变换和二进制稀释操作[3]。

%的二进制图像区域,并垫避免边界效应%在笔划宽度计算。.Image regionImage = mserStats (6);regionImage = padarray (regionImage [1]);%计算笔划宽度的形象。distanceImage = bwdist (~ regionImage);skeletonImage = bwmorph (regionImage,“瘦”、正);strokeWidthImage = distanceImage;strokeWidthImage (~ skeletonImage) = 0;%显示该地区形象与笔划宽度的图像。图次要情节(1、2、1)显示亮度图像(regionImage)标题(“地区形象”次要情节(1、2、2)显示亮度图像(strokeWidthImage)标题(“笔划宽度形象”)

图包含2轴对象。坐标轴对象1标题区域图像包含一个类型的对象的形象。坐标轴对象2标题笔划宽度图像包含一个类型的对象的形象。

在上面的图片,注意笔划宽度的图像对的大部分地区几乎没有变化。这表明该地区更有可能是一个文本区域,因为直线和曲线组成的地区都有类似的宽度,这是一种常见的人类可读的文本特征。

为了使用笔划宽度变化使用阈值消除非文本区域,整个区域变化必须被量化成一个单一的指标如下:

%计算笔划宽度变化指标strokeWidthValues = distanceImage (skeletonImage);strokeWidthMetric =性病(strokeWidthValues) /意味着(strokeWidthValues);

然后,一个阈值可用于删除非文本区域。注意,这个阈值可能需要调优图像用不同的字体样式。

%阈值笔划宽度变化指标strokeWidthThreshold = 0.4;strokeWidthFilterIdx = strokeWidthMetric > strokeWidthThreshold;

上面所示的程序必须单独应用到每个检测到的女士。下面的循环过程的所有区域,然后显示结果删除非文本区域使用笔划宽度变化。

%过程剩下的地区j = 1:元素个数(mserStats) regionImage = mserStats (j) .Image;regionImage = padarray (regionImage, [1], 0);distanceImage = bwdist (~ regionImage);skeletonImage = bwmorph (regionImage,“瘦”、正);strokeWidthValues = distanceImage (skeletonImage);strokeWidthMetric =性病(strokeWidthValues) /意味着(strokeWidthValues);strokeWidthFilterIdx (j) = strokeWidthMetric > strokeWidthThreshold;结束%去除地区基于笔划宽度变化mserRegions (strokeWidthFilterIdx) = [];mserStats (strokeWidthFilterIdx) = [];%显示剩余的区域图imshow(我)情节(mserRegions“showPixelList”,真的,“showEllipses”、假)标题(后删除非文本区域基于笔划宽度变化”)举行

图包含一个坐标轴对象。坐标轴对象与标题后删除非文本区域基于笔划宽度变化包含1032个对象类型的形象,线。

步骤4:合并文本区域最终检测结果

在这一点上,所有的检测结果都由单独的文本字符。将这些结果用于识别任务,比如OCR,单个文本字符必须合并成文字或文本行。这使得实际文字的识别一个图像,进行更有意义的信息只是单个字符的问题。例如,识别字符串“退出”和单个字符的集合{“X”、“E”、“T”,“我”},这个词的意思在哪里失去了不正确的排序。

一种方法为合并单独的文本区域成文字或文本行是首先找到相邻的文本区域,然后形成一个边界框在这些地区。找到邻近地区,扩大边界框计算与早些时候regionprops。这使得相邻的文本区域的边界框重叠,这样文本区域的一部分,同一个词或文本行形成一个连锁重叠边界框。

%得到边框的所有地区bboxes = vertcat (mserStats.BoundingBox);从[x y宽度高度]%转换边界框格式(xmin ymin为了方便% xmax ymax)格式。xmin = bboxes (: 1);ymin = bboxes (:, 2);xmax = xmin + bboxes (:, 3) - 1;ymax = ymin + bboxes (:, 4) - 1;%增加少量的边界框。expansionAmount = 0.02;xmin = (1-expansionAmount) * xmin;ymin = (1-expansionAmount) * ymin;xmax = (1 + expansionAmount) * xmax;ymax = (1 + expansionAmount) * ymax;%剪辑边界框是在图像的范围内xmin = max (xmin, 1);ymin = max (ymin, 1);xmax = min (xmax、尺寸(我,2));ymax = min (ymax、尺寸(我,1));%显示扩展边界框expandedBBoxes = [xmin ymin xmax-xmin + 1 ymax-ymin + 1);IExpandedBBoxes = insertShape (colorImage,“矩形”expandedBBoxes,“线宽”3);图imshow (IExpandedBBoxes)标题(“扩大边界框文本”)

图包含一个坐标轴对象。坐标轴对象与标题扩展边界框文本包含一个类型的对象的形象。

现在,重叠边界框可以合并在一起形成一个边界框在单词或文本行。要做到这一点,计算所有边界框之间的重叠率对。这个量化所有成对的文本区域之间的距离,这样可以找出相邻的文本区域的组织通过寻找零重叠比率。一旦两两重叠比率计算,使用找到所有的文本区域“连接”,一个非零重叠比率。

使用bboxOverlapRatio函数计算两两重叠比率扩大边界框,然后使用找到所有的连接区域。

%计算重叠比率overlapRatio = bboxOverlapRatio (expandedBBoxes expandedBBoxes);%设置一个边界框之间的重叠率和本身为零%简化图表示。n =大小(overlapRatio, 1);overlapRatio (1: n + 1: n ^ 2) = 0;%创建图图g = (overlapRatio);%找到连接图像中的文本区域componentIndices = conncomp (g);

的输出conncomp是指数连接每一个边界框所属文本区域。使用这些指标来合并多个相邻的边界盒为一个边界框通过计算个人的最小和最大边界框构成每个连接组件。

%合并基于最小和最大的箱子尺寸。xmin = accumarray (componentIndices”, [] xmin @min);ymin = accumarray (componentIndices”, [] ymin @min);xmax = accumarray (componentIndices”, [] xmax @max);ymax = accumarray (componentIndices”, [] ymax @max);%组成合并后的边界框使用[x y宽度高度]格式。textBBoxes = [xmin ymin xmax-xmin + 1 ymax-ymin + 1);

最后,之前显示最终的检测结果,抑制虚假的文本检测通过消除边界框组成的一个文本区域。这消除孤立的地区不太可能实际文本,文本通常是团体(单词和句子)中找到。

%去除边框只包含一个文本区域numRegionsInGroup = histcounts (componentIndices);textBBoxes (numRegionsInGroup = = 1:) = [];%显示最终的文本检测的结果。ITextRegion = insertShape (colorImage,“矩形”textBBoxes,“线宽”3);图imshow (ITextRegion)标题(“发现文本”)

图包含一个坐标轴对象。坐标轴对象标题发现文本包含一个类型的对象的形象。

第五步:使用OCR识别检测文本

检测后的文本区域,使用光学字符识别函数来识别每个边界框中的文本。注意,如果不首先找到的文本区域,输出的光学字符识别函数会更吵了。

ocrtxt = ocr(我textBBoxes);(ocrtxt.Text)
ans = '残疾人停车所需特殊板未经授权的车辆可能会拖所有者代价即os我uu”

这个例子向您展示了如何使用ms检测图像中的文本特征检测器首先找到候选文本区域,然后描述了如何使用几何测量来删除所有非文本区域。这个示例代码是一个好的起点发展更强大的文本检测算法。注意,没有进一步增强这个例子可以产生合理的结果对于各种其他的图像,例如,posters.jpg或licensePlates.jpg。

引用

[1],汇众,et al。“强大的文本检测与Edge-Enhanced自然图像最大限度稳定极值区域。”Image Processing (ICIP), 2011 18th IEEE International Conference on. IEEE, 2011.

[2]冈萨雷斯,阿尔瓦罗,et al。“文本位置在复杂的图像。”Pattern Recognition (ICPR), 2012 21st International Conference on. IEEE, 2012.

[3],姚明,和陆Huchuan。“场景文字检测通过笔划宽度。”Pattern Recognition (ICPR), 2012 21st International Conference on. IEEE, 2012.

[4]诺伊曼、卢卡斯和雅罗西克马特斯。“实时场景文本定位和识别。”Computer Vision and Pattern Recognition (CVPR), 2012 IEEE Conference on. IEEE, 2012.

引用

[1],汇众,et al。“强大的文本检测与Edge-Enhanced自然图像最大限度稳定极值区域。”Image Processing (ICIP), 2011 18th IEEE International Conference on. IEEE, 2011.

[2]冈萨雷斯,阿尔瓦罗,et al。“文本位置在复杂的图像。”Pattern Recognition (ICPR), 2012 21st International Conference on. IEEE, 2012.

[3],姚明,和陆Huchuan。“场景文字检测通过笔划宽度。”Pattern Recognition (ICPR), 2012 21st International Conference on. IEEE, 2012.

[4]诺伊曼、卢卡斯和雅罗西克马特斯。“实时场景文本定位和识别。”Computer Vision and Pattern Recognition (CVPR), 2012 IEEE Conference on. IEEE, 2012.

相关的话题