MATLAB File Help: cv.CascadeClassifier Index
cv.CascadeClassifier

Haar Feature-based Cascade Classifier for Object Detection

The object detector described below has been initially proposed by Paul Viola [Viola01] and improved by Rainer Lienhart [Lienhart02].

First, a classifier (namely a cascade of boosted classifiers working with haar-like features) is trained with a few hundred sample views of a particular object (i.e., a face or a car), called positive examples, that are scaled to the same size (say, 20x20), and negative examples - arbitrary images of the same size.

After a classifier is trained, it can be applied to a region of interest (of the same size as used during the training) in an input image. The classifier outputs a "1" if the region is likely to show the object (i.e., face/car), and "0" otherwise. To search for the object in the whole image one can move the search window across the image and check every location using the classifier. The classifier is designed so that it can be easily "resized" in order to be able to find the objects of interest at different sizes, which is more efficient than resizing the image itself. So, to find an object of an unknown size in the image the scan procedure should be done several times at different scales.

The word "cascade" in the classifier name means that the resultant classifier consists of several simpler classifiers (stages) that are applied subsequently to a region of interest until at some stage the candidate is rejected or all the stages are passed. The word "boosted" means that the classifiers at every stage of the cascade are complex themselves and they are built out of basic classifiers using one of four different boosting techniques (weighted voting). Currently Discrete Adaboost, Real Adaboost, Gentle Adaboost and Logitboost are supported. The basic classifiers are decision-tree classifiers with at least 2 leaves. Haar-like features are the input to the basic classifiers, and are calculated as described below. The current algorithm uses the following Haar-like features:

  1. Edge features
  2. Line features
  3. Center-surround features

See image: <http://docs.opencv.org/3.0.0/haarfeatures.png>

The feature used in a particular classifier is specified by its shape (1a, 2b etc.), position within the region of interest and the scale (this scale is not the same as the scale used at the detection stage, though these two scales are multiplied). For example, in the case of the third line feature (2c) the response is calculated as the difference between the sum of image pixels under the rectangle covering the whole feature (including the two white stripes and the black stripe in the middle) and the sum of the image pixels under the black stripe multiplied by 3 in order to compensate for the differences in the size of areas. The sums of pixel values over a rectangular regions are calculated rapidly using integral images (see below and the integral description).

The following reference is for the detection part only. There is a separate application called opencv_traincascade that can train a cascade of boosted classifiers from a set of samples. This is not included in mexopencv.

Note

In the new interface it is also possible to use LBP (local binary pattern) features in addition to Haar-like features.

Example

The usage example is shown in the following:

xmlfile = fullfile(mexopencv.root(),'test','haarcascade_frontalface_alt2.xml');
cc = cv.CascadeClassifier(xmlfile);
im = imread(fullfile(mexopencv.root(),'test','lena.jpg'));
boxes = cc.detect(im);
for i=1:numel(boxes)
    im = cv.rectangle(im, boxes{i}, 'Color',[0 255 0], 'Thickness',2);
end
imshow(im)

References

[Viola01]:

Paul Viola and Michael Jones. "Rapid Object Detection using a Boosted Cascade of Simple Features". IEEE CVPR, 2001, Vol 1, pages I-511. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.10.6807

[Lienhart02]:

Rainer Lienhart and Jochen Maydt. "An Extended Set of Haar-like Features for Rapid Object Detection". IEEE ICIP 2002, Vol. 1, pp. 900-903, Sep. 2002.

See also
Class Details
Superclasses handle
Sealed false
Construct on load false
Constructor Summary
CascadeClassifier Creates a new cascade classifier object 
Property Summary
id Object ID 
Method Summary
  addlistener Add listener for event. 
Static   convert Convert classifier file from the old format to the new format 
  delete Destructor 
  detect Detects objects of different sizes in the input image. 
  empty Checks whether the classifier has been loaded 
  eq == (EQ) Test handle equality. 
  findobj Find objects matching specified conditions. 
  findprop Find property of MATLAB handle object. 
  ge >= (GE) Greater than or equal relation for handles. 
  getFeatureType Get features type 
  getMaskGenerator Get the current mask generator function 
  getOriginalWindowSize Get original window size 
  gt > (GT) Greater than relation for handles. 
  isOldFormatCascade Check if loaded classifer is from the old format 
Sealed   isvalid Test handle validity. 
  le <= (LE) Less than or equal relation for handles. 
  load Loads a classifier from a file 
  lt < (LT) Less than relation for handles. 
  ne ~= (NE) Not equal relation for handles. 
  notify Notify listeners of event. 
  setMaskGenerator Set the current mask generator function