2012-12-24 53 views
0

我開始與OpenCV的項目,以準確檢測斯諾克球(檯球)的位置和輪廓。檢測斯諾克檯球

這些球:green billiard table with 15 billiard balls in a triangle, plus one white cue ball

我與幾個算法無濟於事實驗。這是我迄今爲止所做的:

- HoughCircles:這幾乎不起作用。即使將參數調整爲毫米分辨率,也只會導致檢測到幾個球,並且不能準確檢測球的中心。

- 坎尼:在這裏,我只能取回球的輪廓,如果球不是彼此接近。

- 顏色閾值HSV:因爲球不是一種顏色,這是行不通的。

我想試驗其他算法,如HaarCascadeDetection或SURF。

你們想什麼?

+0

的圖像不顯示斯諾克設置。斯諾克球通常具有純色。你是否要求另外設置泳池檯球? – IInspectable

回答

0

我不是100%,它會工作,但試試看。我認爲如果相機不移動,您可以通過快速傅立葉變換來減輕這一點。請看看http://en.wikipedia.org/wiki/Convolution_theorem。你應該做的:

  1. 我以爲相機不動
  2. 創建一個圖形圖象與同樣大小的圓圈作爲PIC
  3. 使圖像的二維傅里葉變換和PIC
  4. 乘法轉變的Harmonix -by-Harmonix的
  5. 使逆變換具有最高intency
  6. 找點
+1

是的,相機不動。但是當一名球員出現在圖像中時會發生什麼?或者燈光強度變化? –

+0

呵呵,在這種情況下可能這不是很好的解決方案。那麼你應該給更多的照片,是不是?我認爲你可以通過首先從圖像中提取漸變來改進我的算法(所以球的斑點會變成圓形,並且不應該使用斑點圖案,而應該使用圓形圖案,我相信這個問題可以通過這種方式解決) –

0

我認爲最好的選擇是檢查像素顏色是否在同一範圍內 - 使用inrange函數(注意它需要HSV圖像)。在這種情況下,球的中心可能只是一個光反射點(或者非常接近此點的某個位置),通常是球的最亮點。

您也可以嘗試拋出表格(閾值或範圍),然後分析所有剩下的內容。

+0

我不認爲這樣做球的顏色不止一種如果球沒有超過一種顏色,光線反射是一種解決方案 我已經測試過最後的解決方案,但有些球像桌子一樣是綠色的。 –

0

我用Hough circle變換得到了一些好的結果(在玩了一段時間的參數之後)。我猜訣竅是使用足夠小的參數2(以允許更多檢測)和限制搜索半徑(以過濾出誤報)的組合。

circles = cv2.HoughCircles(img,cv2.cv.CV_HOUGH_GRADIENT,1,5, 
      param1=100,param2=10,minRadius=6,maxRadius=10) 

此外我刪除了陰影,但我不確定是否需要在您的情況。 以下是一些測試結果。

enter image description here

enter image description here