Moved from here SO Link.

Hi I am new to image processing field. My project is to classify the objects in an image/Video. The input is an image/video from surveillance camera. I should classify the objects into three classes. 1) Humans 2) Animals 3) Others (cars). We can consider a fixed background.

Can any one suggest any proven algorithms or papers or opensource code for this purpose? offcourse googling is obvious solution but always an experienced eye is always helpful!

  • 10
    $\begingroup$ Your question entails an entire research field you could easily get your phd in. Probably on of the most common methods now is the so called 'bag of words' approach. See www.vlfeat.org for a demo. $\endgroup$
    – Maurits
    Oct 22 '12 at 17:49
  • 2
    $\begingroup$ Why so many questions of this form on dsp.se? "Hello, I'm new to the field of medicine and would like to cure cancer. Any tips?" $\endgroup$
    – endolith
    Nov 1 '12 at 6:36

Since you have a fixed camera, a typical approach to this problem is to use background subtraction to detect moving objects, and then track them across frames, and classify them.

A good starting point is this example in the Computer Vision System Toolbox for MATLAB. There is also an object that does people detection.

  • $\begingroup$ Thanks for your reply. I will give a try and and get back to you if I have any further queries. Hope you could help me out in this. Would like to upvote but low reputation stops me. Thanka a lot. $\endgroup$ Oct 27 '12 at 4:13

I agree with @Maurits on his comment

Assuming that you want to develop a simple system as a part of mini-project or something here is what you may do.

The basic concept is that the places where there is change (along time) is the places where there are objects. So what you need to do as 1st step is change detection. A simple algorithm to do change detection is frame-differencing. What is essentially done is to subtract consecutive frames. And the absolute value of this differencing is threshold. What you really will do with this is that if difference in value is high then it is a pixel where there is change. If difference is not too much then it is not a change.

At this stage you should get a binary image (containing 0s and 1s). This image shall contain several blobs. You can iterate through these blobs by using connect component labelling. Implementations of these are available with matlab and opencv.

After this you can have a simple rule like. If the ratio of width by height is more than 1 then it is a car else a human. This rule is applicable since cars are wide and humans are tall. (I hope you get what I am trying to say).

Now there could be a few noise like objects. These can be filtered out based on their area. For example if the blob size is less than a threshold you can ignore that blob.

I hope with this simple approach you can make a system which can detect a car and a human from fixed background video. Please be warned that this is a simple apprach and likely is not robust. But should work fine under a few more assumptions.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.