Saturday, May 28, 2005

Tracking human motions in complex situations

Currently, i am working towards a machine vision project for tracking multiple humans in complex video sequences. I am using visual c++ and Intel's OpenCV library to develop the system that reads in video input sequences, and outputs the path traced by humans in the scene.

Its a complicated problem, owing to the different situations that could arise such as background subtraction from the scene (we only need the foreground, since humans locomote in the foreground) - which is easy if the background is static, but gets complicated if the background is dynamic, for e.g. the scene could have a background with moving leaves on a windy day, or heavy traffic moving in the background. Other situations such as human occluding one another from the camera's viewpoint, humans casting shadows and reflections, etc.

C++ seemed appropriate for this kind of an application since its good for for real-time applications, such as the human tracking problem. There are reasons for this: take for instance, in java when a function requests an object as a parameter, the virtual machine needs to first make an entire copy of the object and then pass it to the function. Making an entire copy can sometimes be a bottle-neck in a real-time application. Whereas, in c++, one can pass a reference to the object, hence not needing the interpreter to copy the entire object.

Machine vision and image processing applications can also be built using java, using the AWT package library.