【问题标题】:Efficiently detecting shapes in a large image有效检测大图像中的形状
【发布时间】:2014-03-25 18:21:09
【问题描述】:

我有一个巨大的电路图,其中包含二极管、电阻器、晶体管等符号。

我必须从此图像中选择符号(基于输入模板)并使用矩形边界框突出显示这些符号。符号可以旋转(和缩放) - 但现在让我们不考虑缩放/旋转。同一列/行中可能有多个符号和行。

图片尺寸为 5600x3600。它是灰度的,转换为黑白,然后整个事物可以被称为 0 和 1,其中 1 == 黑色像素。我认为白色像素可以被认为是“不关心”

什么是正确且更快的方法?

我有一个从较大图像中提取的模板图像 - 例如“diode.png”。假设至少有一个符号在没有缩放或旋转的情况下完全匹配。

蛮力模板/矩阵比较方法对我有用 - 但它非常慢.. 需要 45 分钟(在最新的 MBP-2.4ghz-Intel i5 / 8GB 上)检测一个完全匹配。我尽可能使用 numpy - 但可能我没有使用某些 numpy 迭代器。

不幸的是,我无法在 python 之外执行此操作,并且无法将图像尺寸减小到 5600x3600 以下而不使符号无法识别。

解决问题的另一种方法是:从一个大矩阵中找到所有匹配的子矩阵。

实现上述目标的正确和执行方法是什么? 我不太了解信号处理-但这在这里有帮助吗?此处的模板大小(子矩阵)最小为 50x50

编辑:OpenCV 不适合我 - skimage 可用。但是,请不要让这阻止您的输入。

我无法分享实际的图表,但这里有一个示例。例如二极管在这里被标记为 D1 和 D2。完整的图表与此一样清晰,但在 5600 x 3600 的画布上

http://www.controlcircuitdiagram.com/diagramcircuitelectronic.com/wp-content/uploads/2011/08/electronic-circuits.jpg

我还想添加 skimage 中的 match_template 与从较大图像中提取的较小图块完美配合

【问题讨论】:

  • 您可以提供一个示例图像,以便有人可能有更好的想法并在该图像上实现它。

标签: python image-processing numpy matrix scipy


【解决方案1】:

您要查找的术语是“template matching”。

通常假设由于图像噪声和其他因素,模板不会完全匹配。相反,您会寻找具有最小错误分数的图像区域。

您可以在 scikit-image 中找到使用 normalized cross-correlation 的实现:

如果您添加现有代码以及示例图像和模板会有所帮助。

【讨论】:

  • 谢谢,我之前用过这个——由于某种原因,它不适用于完整(大)图像。但它非常适合从大图像中提取的较小样本。我从未想过可能导致此问题的图像噪声因素: ij = np.unravel_index(np.argmax(result), result.shape) 。我将再次查看“匹配结果”以查看其中是否隐藏了某些内容。感谢提示
  • 不看代码就很难给出具体的建议。如果您发布您当前的方法,您将获得更好的答案:stackoverflow.com/help/mcve
  • 大图像需要大量时间来进行模板匹配(以及旋转)。缩放也是一个参数——我为此使用了图像金字塔。但是为了处理大量噪声并减少搜索空间,我使用了绝对差之和来为给定模板找到图像的最佳比例(结合我自己的一些参数来确定比例)。然后使用与概率匹配的模板来选择最佳结果。总体而言,它以零错误检测正确检测了 95% 的图像。时间没有 40 分钟那么大 - 但 1-2 分钟(仍然很大)。
【解决方案2】:

你试过Sum of Absolute Difference 吗?这是进行模板匹配的最简单方法之一,但它也是一种蛮力方法。

我将它应用于文档图像(A4,300 dpi,2500 * 3500 像素)中的徽标定位。它很慢,但不需要 45 分钟!为了加快速度,您可以分割图像(选择重叠区域以免错过您的符号)。

【讨论】:

    【解决方案3】:

    我建议你使用opencv,它也适用于python。 在那里您需要使用基本功能:

    findContours

    然后遍历每个轮廓

    对于每个(轮廓)

    获取由变量'contour'指向的一系列轮廓点

    approxPoly

    Here,你发现了一个有趣的例子

    【讨论】:

    • 谢谢,我忘了说 openCV 不适合我。 Skimage 没问题。我会用它来更新问题,并会在 skimage 中尝试这些选项
    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2015-12-24
    • 2018-01-20
    • 2011-12-24
    相关资源
    最近更新 更多