2012-11-09 31 views
7

我有一套二進制圖像,我需要找到交叉(附加示例)。我使用findcontours從二進制圖像中提取邊框。但我不明白我怎麼能確定是這個形狀(邊界)交叉或不是?也許opencv有一些內置的方法,可以幫助解決這個問題。我想使用機器學習解決這個問題,但我認爲有一個更簡單的方法來做到這一點。謝謝!在圖像上找到交叉

Cross on binary image

cross on binary image 2

回答

2

Viola-Jones object detection可能是一個良好的開端。雖然算法(AFAIK)的主要用途是人臉檢測,但它實際上是爲任何物體檢測而設計的,例如您的十字架。該算法是基於機器學習的算法(因此,您將需要一組分類的「十字」和一組分類的「不是十字」),並且您需要確定重要的「特徵」(模式)這將有助於算法識別十字。

該算法在OpenCV中實現爲cvHaarDetectObjects()

0

根據您的要求,您可以嘗試像SIFTSURF一些局部特徵檢測器。檢查OpenSURF這是後者的一個有趣的實現。

+0

這是行不通的,因爲位於交叉線邊界上的不同點將具有相同的SIFT描述符。 –

+0

哦,我看到了...所以十字架周圍的圓並不總是存在? (兩個例子都顯示了一個圓圈內的十字) –

0

經過一段日子的努力,我得出了一個結論:這裏唯一可靠的方法是使用SVM + HOG。就這樣。

2

從原始圖像,可以說你已經提取了可能是你的十字架的多邊形集合。假設所有的十字都是可見的,所有的邊都可以區分爲長度,你可以嘗試下面的方法。

  • 拒絕沒有要求 正好12個頂點形成多邊形的所有多邊形。

  • 對頂點進行重新排序,以使最短邊長爲第一。

  • 創建您的頂點映射到大小均勻的橫最佳擬合perspective transformation

  • 檢查使用該改造項目你的十字架背到均勻交叉,其中殘留的任何給定的點產生的殘差是投影點與相應的統一點之間的距離。

  • 如果所有的殘差都在您定義的容差範圍內,您找到了一個十字。

請注意,這主要是由於您搜索的幾何形狀很簡單。您的輪廓還需要消除噪音才能起作用,例如,十字架內的每條線都需要轉換爲一條簡單的線。

0

你可能會侵蝕每個斑點並分析它們的像素數量正在下降。無論是十字架的旋轉縮放比例,他們總是應該以相同的比例下降,除非您關閉剩餘的中心。再次,當斑點足夠小時,您應該期望它位於原始斑點的中心。你不需要任何機器學習算法或訓練數據來解決這個問題。