Let me add my remark and other answers as a possible solution.
Rotation invariance can be quickly solved by performing it over multiple rotations. I did it with an LBP classifier and could do a rotation invariant car detection on a 4000x8000 window considering you know a scale range (height of the camera - plane in my case) in about 2 mins. If it can be one in postprocessing, then haar/lbp classifiers could find you the solution. The trick lies in finding enough decent training data and enough negatives to train a robust classifier. Using the approach of bootstrapping can increase the performance of your classifier a lot.
And skip color info, to many variance over different car types. Also, in object models you are looking for general features, like windows, wheels, front back, ... that can only be retrieved if you remove car specific info like color and move to a histogram equalized grayscale image.
As to the other questions:
- I experienced that LBP/HAAR models have about +- 10 degrees of freedom in still robustly detecting an object and still providing enough overlap with the following angle.
- Therefore I seperated the 360 degrees into 20 degree bins.
- Once an object is found over multiple angles I always choose the most centered angle, which had of course the best score on that object. You could filter out the average, but that gave worse results for me. Picking the median was the best approach.
- So basically rotating 36 times, limiting your scale range and merging detections afterwards can get you pretty far.
furthermore, a haar classifier will be susceptible to rotation (it will only find cars in about the same orientation as it was trained on)
Whenever you have a collection of temporal images (multiple images covering the same or overlapping areas, taking at different times, which implies that the positions of cars would have changed), you can use various temporal image object detection techniques. There are many of them, even with sub-classifications.
@berak, that is quickly solved by performing it over multiple rotations. I did it with an LBP classifier and could do a rotation invariant car detection on a 4000x8000 window considering you know a scale range (height of the camera - plane in my case) in about 2 mins. If it can be one in postprocessing, then haar/lbp classifiers could find you the solution.
And skip color info, to many variance over different car types. Also, in object models you are looking for general features, like windows, wheels, front back, ... that can only be retrieved if you remove car specific info like color and move to a histogram equalized grayscale image.
@StevenPuttermans, follow up question - once a car was recognized, how did you "mark" it to denote it had already been detected? I would assume with the small rotations you would want to do to make sure no cars were missed that it would detect the same car in multiple orientations. If you don't mind sharing a little, could you maybe give some insight on how you accounted for that?