从图像中识别Boggle/Scrabble字母

5

我对使用openCV识别Boggle棋盘上的字母很感兴趣。这些字母都是同一种字体,但可能会旋转,因此使用标准文本识别库有点困难。此外,M和W之间有下划线以区分它们,而Q实际上是Qu。我相当自信我可以在图像中分离出单独的字母,只是不知道如何进行识别部分。

3个回答

6
这取决于您需要多快。 如果您可以隔离字母的正方形并将其旋转,使包含字母的正方形的边缘是水平和垂直的,那么我建议您:
  • 将图像转换为黑/白(其中字母是一种颜色,其余骰子是另一种颜色)
  • 制作所有四个可能方向上所有字母的参考图像数据集(即直立和旋转90度,180度和270度)
  • 使用模板匹配函数,例如cvMatchTemplate,为每个新图像查找最佳匹配图像。

这需要一些时间,因此可能存在优化,但我认为它会给您带来合理的结果。 如果将它们放在正确的方向上很困难,您还可以动态生成旋转版本的新输入,并将其与参考数据集匹配。

如果字母具有不同的比例,则我可以想到两个选项:

  • 如果方向不是问题(即您的Boggle块检测也可以将块放置在适当的方向),则可以使用具有字母颜色的区域的边界框作为入射图片规模的粗略指示器,并将其缩放为与参考图像上的边界框大小相同(这对于每个参考图像可能不同)
  • 如果方向是问题,则将缩放作为搜索空间的参数添加。因此,您可以搜索所有旋转(0-360度)和所有合理的尺寸(您应该能够从您拥有的图像中猜测一个合理的范围)。

这对不同尺寸/缩放比例的图像有效吗?例如,如果相机离瓷砖更近或更远? - eggbert
我更新了你的问题的答案。 - jilles de wit

4
你可以使用像Tesseract这样的简单OCR。它易于使用且速度相当快。但是你需要进行4次旋转(如@jilles de wit的回答中所述)。

2
我制作了一个基于OpenCV的iOS应用,可以做到这一点。它叫做SnapSolve。我写了一篇博客,介绍了检测的工作原理。 基本上,我在每个形状上叠加了所有26x4个可能的字母和旋转,并查看哪个字母重叠最多。对此进行一些微调是平滑覆盖图像,以去除几乎重叠但不完全重叠的字母残留。

我已經好幾年沒有看過我的項目,但這是一篇非常有趣的文章,謝謝。有關使用Javascript完成這個項目的博客鏈接也很有趣。 - eggbert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接