一、前言
使用最大稳定极值区域 (MSER) 特征检测器检测图像中包含文本的区域。
这是在非结构化场景中执行的常见任务。非结构化场景是包含未确定或随机场景的图像。例如,您可以自动检测和识别捕获的视频中的文本,以提醒驾驶员注意路标。这与结构化场景不同,结构化场景包含预先知道文本位置的已知方案。
从非结构化场景中分割文本极大地有助于完成其他任务,例如光学字符识别 (OCR)。此示例中的自动文本检测算法检测大量候选文本区域,并逐步删除不太可能包含文本的文本区域。
二、步骤
步骤 1:使用 MSER 检测候选文本区域
MSER 特征检测器非常适合查找文本区域 。它适用于文本,因为文本的一致颜色和高对比度导致稳定的强度配置文件。使用该函数查找图像中的所有区域并绘制这些结果。请注意,在文本旁边检测到许多非文本区域。
步骤 2:根据基本几何属性删除非文本区域
尽管 MSER 算法会挑选出大部分文本,但它也会检测图像中许多其他非文本的稳定区域。您可以使用基于规则的方法删除非文本区域。例如,文本的几何属性可用于使用简单阈值过滤掉非文本区域。或者,可以使用机器学习方法来训练文本分类器与非文本分类器。通常,两种方法的组合会产生更好的结果。此示例使用基于规则的简单方法基于几何属性筛选非文本区域。
有几个几何属性可以很好地区分文本和非文本区域,包括用于测量其中一些属性,然后根据其属性值删除区域。
步骤3:根据笔触宽度变化删除非文本区域
用于区分文本和非文本的另一个常用指标是描边宽度。描边宽度是构成字符的曲线和直线宽度的度量。文本区域往往具有较小的描边宽度变化,而非文本区域往往具有较大的变化。
为了帮助了解如何使用笔划宽度删除非文本区域,请估计检测到的 MSER 区域之一的笔触宽度。您可以通过使用距离变换和二进制细化操作来执行此操作。
在上面显示的图像中,请注意描边宽度图像在大部分区域的变化很小。这表明该区域更有可能是文本区域,因为构成该区域的直线和曲线都具有相似的宽度,这是人类可读文本的共同特征。
为了使用笔划宽度变化来使用阈值删除非文本区域,必须将整个区域的变化量化为单个指标,然后,可以应用阈值来删除非文本区域。请注意,此阈值可能需要针对具有不同字体样式的图像进行调整。上面显示的过程必须分别应用于每个检测到的 MSER 区域。以下 for 循环处理所有区域,然后显示使用笔触宽度变化删除非文本区域的结果。
步骤 4:合并文本区域以获得最终检测结果
此时,所有检测结果都由单个文本字符组成。若要将这些结果用于识别任务(如 OCR),必须将各个文本字符合并为单词或文本行。这样可以识别图像中的实际单词,这些单词携带的信息比单个字符更有意义。例如,识别字符串“EXIT”与单个字符集{“X”,“E”,“T”,“I”},其中单词的含义在没有正确排序的情况下丢失。
将单个文本区域合并为单词或文本行的一种方法是首先查找相邻的文本区域,然后在这些区域周围形成一个边界框。要查找相邻区域,请展开之前使用 计算的边界框。这使得相邻文本区域的边界框重叠,以便属于同一单词或文本行的文本区域形成重叠边界框链。
现在,重叠的边界框可以合并在一起,以围绕单个单词或文本行形成单个边界框。为此,请计算所有边界框对之间的重叠比率。这将量化所有文本区域对之间的距离,以便可以通过查找非零重叠比率来查找相邻文本区域的组。计算成对重叠比率后,使用 a 查找由非零重叠比率“连接”的所有文本区域。使用该函数计算所有扩展边界框的成对重叠比率,然后用于查找所有连接的区域。
输出是每个边界框所属的连接文本区域的索引。使用这些索引通过计算组成每个连接组件的各个边界框的最小值和最大值,将多个相邻边界框合并到单个边界框中。最后,在显示最终检测结果之前,通过删除仅由一个文本区域组成的边界框来抑制错误文本检测。这将删除不太可能是实际文本的孤立区域,因为文本通常以组(单词和句子)的形式找到。
步骤 5:使用 OCR 识别检测到的文本
检测到文本区域后,使用该函数识别每个边界框中的文本。请注意,如果不首先找到文本区域,函数的输出会更加嘈杂。