【发布时间】: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 的画布上
我还想添加 skimage 中的 match_template 与从较大图像中提取的较小图块完美配合
【问题讨论】:
-
您可以提供一个示例图像,以便有人可能有更好的想法并在该图像上实现它。
标签: python image-processing numpy matrix scipy