我有一个巨大的电路图,其中包含二极管,电阻器,晶体管等符号。高效检测大图像的形状
我必须从此图像中选择符号(基于输入模板),并使用矩形边界框突出显示这些符号。这些符号可能会旋转(和缩放) - 但现在我们不考虑缩放/旋转。在同一列/行中可能有多个符号和行。
图片尺寸为5600x3600。它是灰度,转换为b/w,然后整个事物可以被提及为0和1s,其中1 ==黑色像素。我认为白色像素可以视为“不在乎”
什么是正确和快速的方法来做到这一点?
我有从较大的图像中提取的模板图像 - 例如“diode.png”。假设至少有一个符号完全匹配,而无需缩放或旋转。
蛮力模板/矩阵比较方法适用于我 - 但它非常缓慢..需要45分钟(在最新的MBP-2.4ghz-英特尔i5/8GB上)来检测一个完全匹配。我正在使用numpy,只要我可以 - 但可能我没有使用某些numpy迭代器。
不幸的是,我不能在python外执行此操作,并且无法将图像尺寸减小到5600x3600以下,而不会使符号无法识别。
解决此问题的另一种方法是:从大矩阵中查找所有匹配的子矩阵。
什么是实现上述目标的正确和执行方法? 我不太了解信号处理 - 但这可以帮助吗?这里的模板大小(子矩阵)是最小的50x50
编辑:OpenCV不是我的选择 - skimage可用。但是,请不要让这些停止输入。
我不能分享实际图表,但示例在这里。例如,二极管在这里标记为D1和D2。完整的图是一样清楚这一点,但5600 X 3600在画布上
我还想补充一点,match_template从skimage从较大的图像
你可以提供一个示例图像,这样有人可能会有更好的想法,他会在该图像上实现它。 –