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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在图像中查找拼字游戏板的角点相关的知识,希望对你有一定的参考价值。

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

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

答案

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

Trying to Plot OpenCV's MSER regions using matplotlib

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

enter image description here

enter image description here

你可以尝试一下。

另一答案

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

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

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

以上是关于在图像中查找拼字游戏板的角点的主要内容,如果未能解决你的问题,请参考以下文章

图像角点检测

图像角点检测

使用 OpenCV C++ 从黑白图像中提取四边形的角(极端角点)

图像处理Opencv Python中的角点检测

火炉炼AI机器学习048-Harris检测图像角点

各位高手,matlab实现了两幅图像的角点检测,怎样实现角点匹配