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

时间:2017-12-25 08:42:31

标签: python opencv image-processing computer-vision

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

示例图片 - Scrabble board

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

透视变换后 - Scrabble board after transform

我使用的算法如下 -

  1. 将自适应阈值处理应用于拼字游戏板的灰度图像。 Binary Image

  2. 扩张/关闭图像,找到给定图像中最大的轮廓,然后找到凸包,并完全填充凸包所包围的区域。 Mask Image

  3. 找到合成图像的边界点(轮廓),然后应用Contour approximation获取角点,然后应用透视变换

  4. 找到角点 - Corner points

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

    董事会与循环基地:

    Board

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

    Corners

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

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

    我想说明的一些观点 -

    1. 我尝试使用霍夫线来检测图像中的线条,找到最大的垂直线,然后找到它们的交叉点以检测角点。不幸的是,由于瓷砖,所有线条似乎都被扭曲/断开,因此我的尝试失败了。

    2. 我还尝试将轮廓近似应用于图像中的所有轮廓(我假设大矩形也是轮廓),但这种方法也失败了。

    3. 我已经在openCV-python中实现了解决方案。由于这种方法在这里很重要,问题变得有点太长,我没有发布相关的代码。

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

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

2 个答案:

答案 0 :(得分:1)

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

Trying to Plot OpenCV's MSER regions using matplotlib

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

enter image description here

enter image description here

你可以尝试一下。

答案 1 :(得分:0)

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

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

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