在没有文本和图像重叠的文档上找到最佳印记位置

时间:2012-12-08 11:58:07

标签: image algorithm image-processing document

我想算法应该由followig stemps组成(例子位于底部):

  1. 信息区域检测(文字,图像)。
  2. 找到最接近顶部位置的邮票过帐最佳位置,不会与第一步检测到的元素区域重叠(此步骤可以使用蒙特卡罗方法实现)。
  3. 我也有以下关于文本和图像区域检测的想法:

    1. 使用tesseract或其他OCR。这种方法的缺点是某些页面元素无法被检测到(行,图片等)。此外,文本识别也是此任务的开销。
    2. 使用OpenCV或其他计算机视觉库(但我不知道究竟如何)。
    3. 是否有人可以建议更好的方法,算法或图书馆,以便在文件上找到最佳印章位置。

      Stamp posting sample

2 个答案:

答案 0 :(得分:2)

假设您知道邮票的大小,我会继续使用天真但强大的解决方案。

假设文档为1000 * 1000像素,图章为200 * 100。 为文档创建金字塔(例如,对于4个金字塔,将其采样为500 * 500,250 * 250,125 * 125,67 * 67)。 对于最小的金字塔(比原始图像小16倍),当找到这样的位置时,搜索一个大小为12 * 6的空矩形,在金字塔中上升并检查它是否正常。

这不是最有效的解决方案,但由于金字塔,它的工作速度非常快。

我认为OCR对这种问题来说太过分了。

答案 1 :(得分:1)

您不需要或想要OCR。

假设原始图像中的白色像素值为0且黑色具有值1,灰色阴影具有中间值(如果不是这种情况则只是根据需要重新缩放和/或否定图像),“理想”解决方案是:

  • 设置best = infinity
  • 对于图章图像的每个可能的左上角位置(x,y):
    • 设置s = 0
    • 对于图章中的每个非白色(或“非透明”)像素(i,j):
      • s + = PagePixel(x + i,y + j)(或像素值的其他一些功能,见下文)
    • 如果s低于最佳值,我们找到了更好的展示位置:
      • 设置为s,bestX为x,bestY为y

之后,(bestX,bestY)将成为覆盖暗像素的最低“总重量”的图章的位置。您可能更喜欢使用平方像素值或其他一些函数来更加重视避免非常暗的像素。

因为上面的过程需要与页面中像素数量成比例的时间乘以图章中非白色像素的数量,所以它可能很慢(在任何现代CPU上它仍然只需要几分之一秒)。在这种情况下,按照OopsUser的建议,对两个图像进行二次采样是有意义的。