我正在嘗試檢測交通標誌的區域。使用OpenCV的,我的做法如下:從圖像中檢測三角形,橢圓和矩形
彩色圖像:
使用TanTriggs Preprocessing擺脫照明的方差:
均化直方圖:
而雙穩態(Cv2.Threshold(blobs, blobs, 127, 255, ThresholdTypes.BinaryInv)
:
迭代每個斑使用blob作爲掩模使用ConnectedComponents和get the mean color value。如果它是紅色,那麼它可能是一個紅色標誌。
然後使用FindContours獲得此Blob的輪廓。
簡化使用ApproxPolyDP輪廓,並檢查每個輪廓的點:然後
- 如果3點的三角形形狀是可接受的 - >候選三角徵
- 如果4個點然後形狀是可接受的 - >候選
- 如果超過4分,BBOX尺寸是可接受的,並且大部分點都在裝配在橢圓(FitEllipse) - >候選
這種方法適用於二進制圖像中的分離斑點,如我的示例中的圓形100km符號。但是,如果存在與外部對象的連接,如二進制圖像中的三角形左下部分,則會失敗。
因爲,這種斑點的平均值是遠遠紅!
在某些情況下使用Erosion會有所幫助,但會使其在許多其他圖像中變得更糟。
對二值化使用不同的閾值也適用於某些,但在許多方面失敗;像侵蝕。
使用HoughCircle只是非常慢,我不能設法得到好的結果玩參數。
我嘗試過使用matchShapes
,但無法獲得好的結果。
任何人都可以告訴我另一種方式實現我想要的(具有合理的計算時間)嗎?
任何信息或任何語言的代碼都是很好的。
編輯: 使用circularity measure(C=P^2/4πA)或方法我已如上所述,三角形和橢圓。形狀可它們被分離時被發現。然而,當輪廓是這樣的例如:
我找不到一個可靠的方式來提取三角形片。如果可以,我會檢查平均顏色,並決定它是否是紅色標誌候選者。
您是否嘗試過形態學開放(侵蝕+擴張)而不是侵蝕?它可以幫助消除嘈雜的連接,同時保留最初固體連接的組件。 – kazarey
是的,我嘗試了不同的內核類型和大小。侵蝕 - 擴張,擴張 - 侵蝕等一般成功總是減少。也嘗試了一些模糊(高斯,pyrdown等),這也減少了成功。 – Koray
是否可以讓機器學習適用於該任務?如果你擁有一些交通標誌學習基地,你可以訓練哈爾級聯或神經網絡爲你做標誌檢測。 – kazarey