0

我正在尝试通过使用 openCV 创建一个更简单的 OCR 引擎。我有这张图片:https ://dl.dropbox.com/u/63179/opencv/test-image.png

我已将所有可能的字符保存为图像并尝试在输入图像中检测这些图像。

从这里我需要识别代码。我一直在尝试 matchTemplate 和 FAST 检测。两者似乎都失败了(或者更有可能:我做错了什么)。

当我使用 matchTemplate 方法时,我使用 Sobel 找到了输入图像和参考图像的边缘。这提供了一个工作结果,但准确性不够好。

使用 FAST 方法时,我似乎无法从 cvExtractSURF 方法中获得任何有趣的描述。

关于能够阅读此类代码的最佳方式的任何建议?

更新 1 (2012-03-20)

我已经取得了一些进展。我试图找到字符的边界矩形,但矩阵字体正在杀死我。请参阅以下示例:

我的字体:https ://dl.dropbox.com/u/63179/opencv/IMG_0873.PNG

我的字体填写:https ://dl.dropbox.com/u/63179/opencv/IMG_0875.PNG

其他字体:https ://dl.dropbox.com/u/63179/opencv/IMG_0874.PNG

正如在示例中看到的,我发现了一种不太复杂的字体的边界矩形,如果我可以填充字体中点之间的空间,它也可以工作。有没有办法用opencv实现这一点?如果我能找到每个字符的边界框,那么识别字符会容易得多。

有任何想法吗?

更新 2 (2013-03-21)

好的,我很幸运找到了边界框。见图片: https ://dl.dropbox.com/u/63179/opencv/IMG_0891.PNG

我不知道从这里去哪里。我尝试使用 matchTemplate 模板,但我想在这种情况下这不是一个好的选择?我想在更大的图片中搜索完全匹配时会更好?

我尝试使用 surf 但是当我尝试使用 cvExtractSURF 为每个边界框提取描述符时,我得到 0 个描述符......有什么想法吗?

哪种方法最适合用于将边界框与参考图像进行匹配?

4

1 回答 1

4

使用 FASt+SURF 会很辛苦,因为它们不是为这项任务而设计的。特别是,FAST 检测到在运动结构中普遍存在的角状特征,但在 OCR 中则少得多。

两个建议:

  1. 也许从 FAST 关键点的数量和位置构建一个特征向量,我认为 oyu 可以快速检查这些特征是否足够精确,如果是,则从中训练分类器
  2. (我自己会选择的那个)将您的图像样本划分为较小的正方形。仅计算每个正方形的 SURF 描述符,并将它们全部连接起来以形成给定样本的特征向量。然后用这些特征向量训练一个分类器。

请注意,选项 2 适用于您可以在 OpenCV 中找到的任何描述符(SIFT、SURF、FREAK...)。

回答更新 1

这是我开始时前辈教我的一个小技巧。在带有点的图像上,您可以将二值化数据投影到水平轴和垂直轴。通过在投影模式中搜索漏洞(断开),您可能会恢复示例中的几乎所有 boudnig 框。

回答更新2

在这一点上,你又回到了我最初的答案:SURF 在这里没有用。相反,一种标准的方法是对每个边界框进行二值化(根据背景/字母将边界框归一化为 0 - 1),将边界框标准化为标准大小,然后从这里训练分类器。

网上有几篇关于如何使用神经网络或 SVM 进行数字识别的教程和博客文章,您只需用字母替换数字即可。

你的工作快完成了!训练和使用分类器很乏味但很简单。

于 2013-03-19T13:44:06.493 回答