Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object Tracking in non static environment

I am working on a drone based video surveillance project. I am required to implement object tracking in the same. I have tried conventional approaches but these seem to fail due to non static environment.

This is an example of what i would want to achieve. But this uses background subtraction which is impossible to achieve with a non static camera.

I have also tried feature based tracking using SURF features, but it fails for smaller objects and is prone to false positives.

What would be the best way to achieve the objective in this scenario ?.

Edit : An object can be anything within a defined region of interest. The object will usually be a person or a vehicle. The idea is that the user will make a bounding box which will define the region of interest. The drone now has to start tracking whatever is within this region of interest.

like image 283
Harjatin Avatar asked Sep 27 '22 02:09

Harjatin


1 Answers

Tracking local features (like SURF) won't work in your case. Training a classifier (like Boosting with HAAR features) won't work either. Let me explain why.

Your object to track will be contained in a bounding box. Inside this bounding box there could be any object, not a person, a car, or something else that you used to train you classifier.

Also, near the object, in the bounding box there will be also background noise that will change as soon as your target object moves, even if the appearance of the object doesn't change. Moreover the appearance of you object changes (e.g. a person turns, or drop the jacket, a vehicle get a reflection of the sun, etc...), or the object gets (partially or totally) occluded for a while. So tracking local features is very likely to lose the tracked object very soon.

So the first problem is that you must deal with potentially a lot of different objects, possibly unknown a priori, to track and you cannot train a classifier for each one of these.

The second problem is that you must follow an object whose appearance may change, so you need to update your model.

The third problem is that you need some logic that tells you that you lost the tracked object, and you need to detect it again in the scene.


So what to do? Well, you need a good long term tracker.

One of the best (to my knowledge) is Tracking-Learning-Detection (TLD) by Kalal et. al.. You can see on the dedicated page a lot of example videos, and you can see that it works pretty good with moving cameras, objects that change appearance, etc...

Luckily for us, OpenCV 3.0.0 has an implementation for TLD, and you can find a sample code here (there is also a Matlab + C implementation in the aforementioned site).

The main drawback is that this method could be slow. You can test if it's an issue for you. If so, you can downsample the video stream, upgrade your hardware, or switch to a faster tracking method, but this depends on you requirements and needs.

Good luck!

like image 59
Miki Avatar answered Sep 29 '22 14:09

Miki