簡體   English   中英

有效檢測大圖像中的形狀

[英]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的畫布上

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

我還想補充一點,來自skimage的match_template與從較大圖像提取的較小圖塊完美匹配

您要查找的術語是“ 模板匹配 ”。

通常假定由於圖像噪聲和其他因素,模板不會完全匹配。 相反,您會尋找錯誤分數最小的圖像區域。

您可以在scikit-image中找到使用歸一化互相關的實現:

如果您添加了現有代碼以及示例圖像和模板,將會有所幫助。

您是否嘗試過絕對差之和 這是進行模板匹配的最簡單方法之一,但也是蠻力方法。

我將其應用於文檔圖像(A4、300 dpi,2500 * 3500像素)中的徽標斑點。 它很慢,但是不需要45分鍾! 為了加快速度,您可以分割圖像(選擇重疊區域以免丟失符號)。

我建議您使用opencv,它也適用於python。 在那里,您需要使用基本功能:

findContours

然后遍歷每個輪廓

每個(輪廓)

獲得由變量“輪廓”指向的輪廓點序列

approxPoly

在這里 ,您會找到一個有趣的例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM