检测斯诺克台球

时间:2012-12-24 19:48:51

标签: opencv

我正在使用OpenCV开始一个项目,以准确地检测斯诺克球(台球)的位置和轮廓。

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

我已经尝试了一些算法无济于事。这是我到目前为止所做的:

- HoughCircles :这几乎无效。即使将参数调整到毫米分辨率,也只会检测到几个球,并且不能准确检测到球的中心。

- Canny :如果球彼此不接近,我只能检索球的轮廓。

- 颜色阈值HSV :因为球不是一种颜色,所以这不起作用。

我想尝试其他算法,如HaarCascadeDetection或SURF。

你们的想法是什么?

3 个答案:

答案 0 :(得分:0)

我不是百分之百,它会起作用,但试一试。我认为如果相机不移动,你可以通过快速傅里叶变换来实现这一点。请看http://en.wikipedia.org/wiki/Convolution_theorem。你应该做什么:

  1. 我认为相机不动
  2. 使用与pic相同大小的圆圈创建图案图像
  3. 进行图像和图像的二维傅立叶变换
  4. 乘法变换harmonix-by-harmonix
  5. 进行逆变换
  6. 找到具有最高intency的点

答案 1 :(得分:0)

我认为最好的选择是检查像素颜色是否在同一范围内 - 使用inrange功能(注意它需要HSV图像)。在这种情况下球的中心可能只是一个光反射点(或非常接近这一点的某个地方),这通常是球的最亮点。

您也可以尝试丢弃表格(阈值或范围),然后分析剩下的所有内容。

答案 2 :(得分:0)

我使用霍夫圆转换(在使用参数一段时间后)获得了一些好的结果。我想这个技巧是使用足够小的param2(允许更多检测)和限制搜索半径(过滤掉误报)的组合。

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