[英]Efficiently detecting shapes in a large image
我有一個巨大的電路圖,其中包含二極管,電阻器,晶體管等符號。
我必須從該圖像中選擇符號(基於輸入模板),並使用矩形邊框突出顯示那些符號。 這些符號可以旋轉(和縮放)-但現在我們不考慮縮放/旋轉。 同一列/行中可能有多個符號和行。
圖像尺寸為5600x3600。 它是灰度的,轉換為b / w,然后整個情況可以稱為0s和1s,其中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與從較大圖像提取的較小圖塊完美匹配
您要查找的術語是“ 模板匹配 ”。
通常假定由於圖像噪聲和其他因素,模板不會完全匹配。 相反,您會尋找錯誤分數最小的圖像區域。
您可以在scikit-image中找到使用歸一化互相關的實現:
如果您添加了現有代碼以及示例圖像和模板,將會有所幫助。
您是否嘗試過絕對差之和 ? 這是進行模板匹配的最簡單方法之一,但也是蠻力方法。
我將其應用於文檔圖像(A4、300 dpi,2500 * 3500像素)中的徽標斑點。 它很慢,但是不需要45分鍾! 為了加快速度,您可以分割圖像(選擇重疊區域以免丟失符號)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.