Tuesday, December 11, 2012

Ball Tracking / Detection using OpenCV

   Ball detection is pretty easy on OpenCV. So to start with lets describe what steps we will go through.

                       LINK TO THE CODE




1.Load an image / start a video capture




2.Convert image from RGB space to HSV space . HSV(hue saturation value) space gives us better results while doing color based segmentation.

3.Seperate Image into its 3 component images(i.e H  S  V each of which is a one dimensional image or intensity image)
H component

S component

V component


4.Use a condition for intensity values in the image and get a Binary image.
  i.e let say we taken H intensity image .If our ball is red color .Then in this image we will find that the values of the pixel where the ball is present , lies in a specific range. so we define a condition for every pixel . if                                (pixel > threshold_min & pixel < threshold_max )= pixel of o/p image is 1 else it is zero.

NOTE:
FOR THE PURPOSE OF CALIBRATION WE HAVE 2 SLIDERS ON EACH COMPONENT IMAGE TO SET THE LOWER AND UPPER LIMIT OF PIXEL VALUES.

H component after condition


We do this for all components i.e for S and V.


S component after condition

V component after condition

5.Now we have three binary images( only black and only white) . Which has the region of ball as 1's and every thing else which has the intensity values greater(less) than threshold .The pixels that do not pass this conditions will be zero.


6.We then combine all the above three Binary images (i.e we AND them all). All the pixels that are white in the three images will be white in the output of this step.So there will be regions too which will have 1's but with lower areas and of random shapes.

Combined image

7.Now we use houghs transform on the output of last operation to find the regions which are circular in shape.

8.Then we draw the marker on the detected circles as well as display the center and radius of the circles





16 comments:

  1. Hi,
    Thanks for this tutorial what about white ball detection

    ReplyDelete
  2. Can I please see the python code for this tutorial

    ReplyDelete
    Replies
    1. Code link is mentioned at the very top of the page

      Delete
  3. Very nice idea ! thanks a lot !

    ReplyDelete
  4. Good job man ! Really useful and stable, Thanks

    ReplyDelete
  5. Can you provide android application code?

    ReplyDelete
  6. Hello please upload python code too.

    ReplyDelete
  7. I am facing problem when applying condition for s component could you please help me with that part.I mean to say could you please give some practical values for codition.

    ReplyDelete
  8. can i use this in the javascript for tracking ball speed and spin for table tennis

    ReplyDelete
  9. What is the smallest size this code can trace?

    ReplyDelete
  10. how can i detect multiple objects

    ReplyDelete
  11. This comment has been removed by the author.

    ReplyDelete
  12. great article
    very helpful for my project

    ReplyDelete
  13. So if I have two balls can it track unique objects, IE assign I'd 1 and 2 to each ball and show the ball moving with the same object id

    ReplyDelete
  14. Krishnafurniture offers

    https://krishnafurniture.com/mattresses
    https://krishnafurniture.com/study-chairs/study-chair
    https://krishnafurniture.com/sofa/sofa-sets

    ReplyDelete