2013-06-22 103 views

回答

1

總的來說,你問的事情是一個大問題。在真實世界的圖像中,您需要找到每個橢圓形狀,區分哪一個具有頂部(直到您容忍並考慮了哪個角度?)。然後你需要很好地分割這些形狀,以便找到頂部橢圓形物體的區域。

但是,如果你需要找到更簡單的相似圖片的例子,但仍然是一個更通用的方法,你可能首先通過使用任何邊緣檢測(例如坎尼)得到的邊緣。然後,對曲線和橢圓使用Hough變換。但我不認爲有這方面的功能或圖書館。所以你可能需要實現你自己的Hough變換。爲此,你必須決定你是什麼意思的橢圓形頂部。對於你的兩幅圖像,如果你成功找到橢圓形的頂部,就把它放在它下面。但是爲了獲得更多的一般性,你可能想要用更復雜的方法來細分它。

對於Hough變換; http://en.wikipedia.org/wiki/Hough_transform#Circle_Detection_Process 和橢圓使用它http://en.wikipedia.org/wiki/Randomized_Hough_transform

0

實際上有一個函數來檢測opencv的圓圈。

使用hough transform低參數2 -cause你應該檢測與僅給予其頂部的圓。

另一種方式應該是這樣的;

1低通濾波器(高斯模糊,OpenCV的文檔裏面搜索)

2 - 彩色濾光片 - 可選(使用對象的顏色,如果你知道它,否則會嘗試從像素的顏色(image.width/2,0)

3- Canny邊緣檢測(再次,參照該文檔)

4-找到輪廓(再次,參照該文檔)

5-如果有具有輪廓最好是大面積和包含像素(image.width/2,0) - 你會使用pointPolygonTest在這裏 - 然後你在底部有一個blob。

6至檢測此斑點是「橢圓形」是個大問題;但你可以使用「橢圓」屬性進行一些過濾;

  • 橢圓曲線有1個且只有1個峯值點。應該只有1個具有最大高度的輪廓像素。
  • 任何一個橢圓曲線的3點都不能代表一條線。這並不難實現,但對於算法來說很複雜。
+0

據我所知在opencv中的圓檢測器無法檢測到橢圓形狀。由於他們的數學定義會不同?對不起,我不喜歡OpenCV –

+0

是的,當然,它只能用於純粹的圈子。 – baci

0

我會建議一個比霍夫簡單的方法變換圈。 從上面的圖片中,我看到橢圓形的顏色是均勻的,而其餘的圖像沒有。

  1. 選擇合適的色彩空間(可能HSV)
  2. 採取灰度作爲色調或飽和度 - 這些將描述圖像(未中的像素的強度)
  3. 計算中的顏色的梯度(2)
  4. 像素與梯度= 0屬於橢圓
+0

雖然這種方法可以幫助這兩個圖像,但問題不在於「我想在這些照片中找到具有非均勻顏色背景的這兩個統一顏色的物體」,它會在數據庫中取得成功,並且如果您只是更改顏色那麼會發生什麼? –

+0

那麼,如果解決方案患有過度擬合訓練集並且不能推廣到整個數據集,那只是「欺騙」。改變顏色會改變色調和飽和度,但不應該對色相/飽和度的梯度產生不利影響。 – Leeor

+0

通過改變顏色,我的意思是改變顏色和背景的顏色,如不透明的灰色 –

0
對於

橢圓檢測,可以參考this post。這兩種方法基於霍夫變換,如果需要可以很容易地調整。