在图像中查找拼字游戏板的角点

问题描述 投票:2回答:2

我正在尝试提取放在拼字游戏板上的瓷砖(字母)。目标是识别/读取板上存在的所有可能的单词。

一个示例图像 - Scrabble board

理想情况下,我想找到拼字游戏板的四个角,并应用透视变换,以便进一步处理。

透视变换后 - Scrabble board after transform

我使用的算法如下 -

  1. 将自适应阈值应用于拼字游戏板的灰度图像。 Binary Image
  2. 扩张/关闭图像,找到给定图像中的最大轮廓,然后找到凸包,并完全填充凸包围的区域。 Mask Image
  3. 找到合成图像的边界点(轮廓),然后应用Contour approximation获取角点,然后应用透视变换

找到角点 - Corner points

这种方法适用于这些图像。但是,正如您所看到的,许多方板都有一个底座,它在顶部和底部弯曲。有时,基地是一个大圆形板。有了这些图像,我的方法就失败了。示例图像和输出 -

董事会与圆形基地:

Board

使用上述方法找到的积分:

Corners

我可以发布更多这样有问题的图像,但是这个图像可以让你了解我正在处理的问题。我的问题是 -

当图像中还有圆形板时,如何找到矩形板?

我想说的一些观点 -

  1. 我尝试使用霍夫线来检测图像中的线条,找到最大的垂直线,然后找到它们的交叉点来检测角点。不幸的是,由于瓷砖,所有线条似乎都被扭曲/断开,因此我的尝试失败了。
  2. 我还尝试将轮廓近似应用于图像中的所有轮廓(我假设大矩形也是轮廓),但这种方法也失败了。
  3. 我已经在openCV-python中实现了解决方案。由于这种方法在这里很重要,问题变得有点太长,我没有发布相关代码。

如果需要,我愿意分享更多这样有问题的图像。谢谢!

EDIT1 @Silencer的答案对我识别图像中的字母非常有帮助,但我想准确地找到图像中单词的位置。因此,我觉得识别行和列是必要的,只有当透视变换应用于电路板时,我才能做到这一点。

python opencv image-processing computer-vision
2个回答
1
投票

我写了一篇关于MSER文本检测的答案:

Trying to Plot OpenCV's MSER regions using matplotlib

该代码会在您的图像上生成以下结果。

enter image description here

enter image description here

你可以尝试一下。


0
投票

我认为@silencer已经提供了非常有前景的解决方案。

但是要执行透视变换,正如您所提到的那样,您已经尝试使用霍夫线来查找最大的矩形,但它失败了,因为存在瓷砖。

如果你有大图像数据集可能超过1000个图像,你也可以给基于深度学习的方法一个镜头,你可以训练一个模型与图像作为输入和相应的矩形边界点坐标作为输出。

© www.soinside.com 2019 - 2024. All rights reserved.