以编程方式读取地图

时间:2014-01-22 16:30:32

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

我正在尝试以编程方式阅读以Paint手绘的地图。地图如下所示:

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

我需要知道地图的每个像素属于哪个区域以及它们的名称是什么。

我想到了以下内容,但我想知道是否有更简单或更快(原始地图相当大)的方法:

  1. 检测区域:从每个像素填充并保存区域。这与文字不符。
  2. 检测文本/“噪音”:再次对每个像素进行泛光填充,但这次使用先前检测到的相邻像素区域作为边框。例如。当对“Abc”区域中的文本像素执行此操作时,不属于“Abc”周围区域的所有内容都将被淹没。然后丢弃具有特定数量的区域的区域,例如20个像素。这样做是为了匹配区域完全包含的字母(小区域)。
  3. 在图像文件中保存区域的像素(包括在 2 中检测到的像素),并将每个像素输入tesseract以获取该区域的名称。
  4. 我发现上面的方法相当复杂,而且似乎很慢(尽管我还没有完全实现)。它也不能处理缺少边框像素的完全闭合区域。有没有更简单/更好的解决方案呢?

1 个答案:

答案 0 :(得分:0)

如果你首先在每个像素上进行洪水填充,你可能也会在O,B,A等字母内部得到小区域。我想你可以尝试以下方法:

  1. 检测包含标签的区域并记住其周围矩形的坐标。
  2. 对于包含文本的每个区域,请使用tesseract或类似内容来阅读标签并记住它。
  3. 删除包含文字的矩形。之后,您可以尝试进行一些形态学操作来尝试关闭未完全关闭的区域。从找到文本的位置开始填充填充以获取区域。
  4. 这可能在理论上有效,但结果将取决于图像的外观,检测文本的效果如何。

    祝你好运!