algorithm - 以编程方式读取 map

标签 algorithm language-agnostic computer-vision flood-fill

我正在尝试以编程方式读取在 Paint 中手绘的 map 。 map 看起来像这样:

http://i.stack.imgur.com/mxlXU.png

我需要知道 map 的每个像素属于哪个区域以及它们的名称。

我想到了以下方法,但我想知道是否有更简单或更快(原始 map 很大)的方法:

  1. 检测区域:对每个像素进行洪水填充并保存区域。这与文本不匹配。
  2. 检测文本/“噪声”:再次对每个像素进行洪水填充,但这次使用先前检测到的相邻像素区域作为边界。例如。当对“Abc”区域中的文本像素执行此操作时,不属于“Abc”周围区域的所有内容都会被淹没。然后丢弃面积超过特定数字(例如 20 像素)的区域。这样做是为了匹配完全包含在该区域中的字母(面积较小)。
  3. 将区域的像素(包括在 2 中检测到的像素)保存在图像文件中,并将每个像素输入到 tesseract 中。获取区域的名称。

我发现上面的方法很复杂而且似乎很慢(虽然我还没有完全实现它)。它也不能很好地处理缺少边界像素的完全封闭区域。有没有更简单/更好的解决方案来做到这一点?

最佳答案

如果您首先对每个像素进行洪水填充,您可能还会在 O、B、A 等字母内得到小区域。我认为您可以尝试以下方法:

  1. 检测包含标签的区域并记住其周围矩形的坐标。
  2. 对于每个包含文本的区域,请使用 tesseract 或类似工具阅读标签并记住它。
  3. 删除包含文本的矩形。之后你可以尝试做一些形态学操作来尝试关闭没有完全关闭的区域。从您找到文本的位置开始填充以获取区域。

这在理论上可行,但结果将取决于图像的外观、文本检测的好坏等等。

祝你好运!

关于algorithm - 以编程方式读取 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21288538/

相关文章:

language-agnostic - 我应该大写常量吗?

opencv - 如何从单摄像头生成立体图像?

opencv - 使用 Surf 进行目标检测

java - 非完美迷宫生成

php - 是否可以自动分类论坛或 BBS 中的帖子?

java - 在二维图中找到最接近给定点的坐标的算法

python - 如何将矩形拟合到 python 中的图像并获取它们的坐标

python - 平滑非二进制图像的边缘

algorithm - 配对数字的贪心算法使最大和最小化

perl - 在鸭子类型(duck typing)语言中模拟静态类型的各个方面