2012-07-29 48 views
9

我正在使用基於OpenCV/C++框架的程序來計算基本上可以重疊的橢圓形對象。如何在OpenCV中過濾由重疊圓形構成的輪廓

閾值圖像和所有對象的輪廓尋找後

我的下一步驟包括未製成重疊橢圓的排除對象(I段將其餘的後面)。

我最終了對象,如這些的:

enter image description here

在這個例子中的圖像,在右側的所有對象均爲負,而在左側的那些是有效的。

我目前的過濾器主要以isoperimetric quotient爲由排除對象。然而,由於我有不同尺寸和噪音的物體,我並不總是滿意這種方法。

理想情況下,我想有一個額外的度量來提高我當前的過濾器的效率。

因爲我必須在許多輪廓上重複這種分析,所以不應該花費很多。

我也想過辦法,如:基於輪廓的連續點的所有三胞胎之間的角度值的直方圖

  • 的東西嗎?
  • 數學擬合「多橢圓」(我不知道如何做到這一點)?
  • 匹配弗里曼連鎖?

但我相信我錯過了一些明顯更有效,更不麻煩的事情。 你有什麼建議, 謝謝:),

編輯: 作爲紅塔正確建議,任何形狀其實可以做出足夠數量的圓的。 因此,爲了使我的問題可以解決,我會添加以下假設:

  1. 不超過16個橢圓形/對象。
  2. 橢圓不能平坦:長軸/短軸< 3.
  3. 在一個對象內,最小橢圓區域內的最大橢圓面積必須小於10。

回答

2

一種可能是嘗試:在沿輪廓

  • 間距規則
  • 採樣點的對象

    1. 提取輪廓使用這些點來確定規則的間距方向(也可能最好用複數來表示這個方向,以避免環繞問題)
    2. 使用這些方向來計算規則間距處的曲率
    3. 基於該曲率的度量,例如,尋找在正確範圍內具有超過80%曲率樣本的對象。

    您期望看到曲率的圖形是一系列常數值(如果形狀是橢圓形而不是圓形,則會緩慢變化),並且突變不連續性會從一個圓圈變爲另一個圓圈。

    如果圖像嘈雜,您可能希望先低通濾波曲率值。

    由圓/橢圓製成的形狀大多在周邊周圍具有顯着的曲率,而由直線邊緣製成的形狀將具有低曲率的部分。

  • +0

    比你,我會盡量讓我的頭。你有沒有我可以開始的任何鏈接? – 2012-07-29 19:42:23

    0

    我懷疑任何形狀都可以從足夠大的一組重疊橢圓中創建,並且您的手上有一個不明確的問題。除非我誤解了你的問題陳述。

    +0

    謝謝,你是對的,足夠數量的小圓圈/橢圓確實可以定義任何形狀。我應該說明另外的假設(這對我的問題是公平的),例如: 1)很難觀察超過10個重疊的圓圈。 2)在同一形狀內,最小橢圓的面積不會小於最大橢圓面積的十分之一。 – 2012-07-30 13:01:36

    0

    你看過Hough-Transformations的圓圈和橢圓嗎?對於可用的圈子,甚至還有一個OpenCV implementation。這些轉換必須應用於對象的輪廓。

    +0

    謝謝,我確實嘗試過了,謝謝:D。 對我來說,它在夾緊的物體上效果很差...... 我現在正在研究以下方法: 1)製作一個正與負樣本庫。 2)從二值圖像計算特徵。 3)使用機器學習技術來訓練分類器... – 2013-03-11 10:02:50