I recently worked on a solution to the problem of tracking objects. I need to identify and track 3D objects that can move around a 2D plane, i.e. Translation by x and y, and rotation around z. The object to be tracked is known in advance, and any desired information can be extracted from it. It is also assumed that the lighting conditions will not undergo major changes and that the background will remain relatively stationary. Tracked objects will usually not have the same color, so color tracking is not an option.
I have successfully implemented a prototype to track multiple 2D objects using background subtraction and dynamic pattern matching. Now I want to expand to track 3D objects, but so far I have been disappointed with what I found / reached. I will list some of the attempts that I made in the hope that someone could shed light.
1.) Dynamic Pattern Matching : I would select an object in the video clip, and then the search area would be defined around the object. Then the object will search inside this area. This clip gave me an idea initially. Unfortunately, this really did not work for me, because the object is lost when it undergoes rotation (turns back to the camera). I also tried to constantly update the template when an object is detected, but this causes the template to become another (external) object whenever the intended object becomes occluded .
2.) Lucas-Kanade Optical Stream: I used OpenCV goodFeaturesToTrack to find me good points for tracking and tried to track these points through multiple frames using calcOpticalFlowPyrLK. However, the performance of this algorithm was a bit disappointing. I applied it to the Oxford Corridor dataset, but the points that I initially discovered would be lost soon.
3.) SURF : I tried to detect functions using SURF, but the problem was that it was very difficult to apply this to 3D objects, which can differ significantly from different viewing angles. I was hoping to find cv2 SURF documentation, as it seemed to provide functionality for delivering a SURF function extractor with key points (possibly from goodFeaturesToTrack). Unfortunately, I have not yet been able to find a way to do this. My question is about SO: OpenCV: Extract SURF features from custom keypoints
Background: I have one stationary webcam, all my processing is done on a desktop computer. I use the Python shell for OpenCV and the PyDev plugin for Eclipse on Windows 7.
If anyone could suggest any additional methods to try, or even some pointers to improving the performance of the already mentioned techniques, I would really appreciate it.
casper
source share