CLAHE Python bindings
[profile/ivi/opencv.git] / modules / objdetect / doc / cascade_classification.rst
1 Cascade Classification
2 ======================
3
4 .. highlight:: cpp
5
6 Haar Feature-based Cascade Classifier for Object Detection
7 ----------------------------------------------------------
8
9 The object detector described below has been initially proposed by Paul Viola [Viola01]_ and improved by Rainer Lienhart [Lienhart02]_.
10
11 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.
12
13 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.
14
15 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:
16
17
18 .. image:: pics/haarfeatures.png
19
20
21 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 :ocv:func:`integral` description).
22
23 To see the object detector at work, have a look at the facedetect demo:
24 http://code.opencv.org/projects/opencv/repository/revisions/master/entry/samples/cpp/dbt_face_detection.cpp
25
26 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.
27
28 .. note:: In the new C++ interface it is also possible to use LBP (local binary pattern) features in addition to Haar-like features.
29
30 .. [Viola01] Paul Viola and Michael J. Jones. Rapid Object Detection using a Boosted Cascade of Simple Features. IEEE CVPR, 2001. The paper is available online at http://research.microsoft.com/en-us/um/people/viola/Pubs/Detect/violaJones_CVPR2001.pdf
31
32 .. [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. This paper, as well as the extended technical report, can be retrieved at http://www.multimedia-computing.de/mediawiki//images/5/52/MRL-TR-May02-revised-Dec02.pdf
33
34
35 FeatureEvaluator
36 ----------------
37 .. ocv:class:: FeatureEvaluator
38
39 Base class for computing feature values in cascade classifiers. ::
40
41     class CV_EXPORTS FeatureEvaluator
42     {
43     public:
44         enum { HAAR = 0, LBP = 1 }; // supported feature types
45         virtual ~FeatureEvaluator(); // destructor
46         virtual bool read(const FileNode& node);
47         virtual Ptr<FeatureEvaluator> clone() const;
48         virtual int getFeatureType() const;
49
50         virtual bool setImage(const Mat& img, Size origWinSize);
51         virtual bool setWindow(Point p);
52
53         virtual double calcOrd(int featureIdx) const;
54         virtual int calcCat(int featureIdx) const;
55
56         static Ptr<FeatureEvaluator> create(int type);
57     };
58
59
60 FeatureEvaluator::read
61 --------------------------
62 Reads parameters of features from the ``FileStorage`` node.
63
64 .. ocv:function:: bool FeatureEvaluator::read(const FileNode& node)
65
66     :param node: File node from which the feature parameters are read.
67
68
69
70 FeatureEvaluator::clone
71 ---------------------------
72 Returns a full copy of the feature evaluator.
73
74 .. ocv:function:: Ptr<FeatureEvaluator> FeatureEvaluator::clone() const
75
76
77
78 FeatureEvaluator::getFeatureType
79 ------------------------------------
80 Returns the feature type (``HAAR`` or ``LBP`` for now).
81
82 .. ocv:function:: int FeatureEvaluator::getFeatureType() const
83
84
85 FeatureEvaluator::setImage
86 ------------------------------
87 Assigns an image to feature evaluator.
88
89 .. ocv:function:: bool FeatureEvaluator::setImage(const Mat& img, Size origWinSize)
90
91     :param img: Matrix of the type   ``CV_8UC1``  containing an image where the features are computed.
92
93     :param origWinSize: Size of training images.
94
95 The method assigns an image, where the features will be computed, to the feature evaluator.
96
97
98
99 FeatureEvaluator::setWindow
100 -------------------------------
101 Assigns a window in the current image where the features will be computed.
102
103 .. ocv:function:: bool FeatureEvaluator::setWindow(Point p)
104
105     :param p: Upper left point of the window where the features are computed. Size of the window is equal to the size of training images.
106
107 FeatureEvaluator::calcOrd
108 -----------------------------
109 Computes the value of an ordered (numerical) feature.
110
111 .. ocv:function:: double FeatureEvaluator::calcOrd(int featureIdx) const
112
113     :param featureIdx: Index of the feature whose value is computed.
114
115 The function returns the computed value of an ordered feature.
116
117
118
119 FeatureEvaluator::calcCat
120 -----------------------------
121 Computes the value of a categorical feature.
122
123 .. ocv:function:: int FeatureEvaluator::calcCat(int featureIdx) const
124
125     :param featureIdx: Index of the feature whose value is computed.
126
127 The function returns the computed label of a categorical feature, which is the value from [0,... (number of categories - 1)].
128
129
130 FeatureEvaluator::create
131 ----------------------------
132 Constructs the feature evaluator.
133
134 .. ocv:function:: Ptr<FeatureEvaluator> FeatureEvaluator::create(int type)
135
136     :param type: Type of features evaluated by cascade (``HAAR`` or ``LBP`` for now).
137
138
139 CascadeClassifier
140 -----------------
141 .. ocv:class:: CascadeClassifier
142
143 Cascade classifier class for object detection.
144
145 CascadeClassifier::CascadeClassifier
146 ----------------------------------------
147 Loads a classifier from a file.
148
149 .. ocv:function:: CascadeClassifier::CascadeClassifier(const string& filename)
150
151 .. ocv:pyfunction:: cv2.CascadeClassifier([filename]) -> <CascadeClassifier object>
152
153     :param filename: Name of the file from which the classifier is loaded.
154
155
156
157 CascadeClassifier::empty
158 ----------------------------
159 Checks whether the classifier has been loaded.
160
161 .. ocv:function:: bool CascadeClassifier::empty() const
162
163
164 .. ocv:pyfunction:: cv2.CascadeClassifier.empty() -> retval
165
166 CascadeClassifier::load
167 ---------------------------
168 Loads a classifier from a file.
169
170 .. ocv:function:: bool CascadeClassifier::load(const string& filename)
171
172 .. ocv:pyfunction:: cv2.CascadeClassifier.load(filename) -> retval
173
174     :param filename: Name of the file from which the classifier is loaded. The file may contain an old HAAR classifier trained by the haartraining application or a new cascade classifier trained by the traincascade application.
175
176
177
178 CascadeClassifier::read
179 ---------------------------
180 Reads a classifier from a FileStorage node.
181
182 .. ocv:function:: bool CascadeClassifier::read(const FileNode& node)
183
184 .. note:: The file may contain a new cascade classifier (trained traincascade application) only.
185
186
187 CascadeClassifier::detectMultiScale
188 ---------------------------------------
189 Detects objects of different sizes in the input image. The detected objects are returned as a list of rectangles.
190
191 .. ocv:function:: void CascadeClassifier::detectMultiScale( const Mat& image, vector<Rect>& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size())
192
193 .. ocv:pyfunction:: cv2.CascadeClassifier.detectMultiScale(image[, scaleFactor[, minNeighbors[, flags[, minSize[, maxSize]]]]]) -> objects
194 .. ocv:pyfunction:: cv2.CascadeClassifier.detectMultiScale(image, rejectLevels, levelWeights[, scaleFactor[, minNeighbors[, flags[, minSize[, maxSize[, outputRejectLevels]]]]]]) -> objects
195
196 .. ocv:cfunction:: CvSeq* cvHaarDetectObjects( const CvArr* image, CvHaarClassifierCascade* cascade, CvMemStorage* storage, double scale_factor=1.1, int min_neighbors=3, int flags=0, CvSize min_size=cvSize(0,0), CvSize max_size=cvSize(0,0) )
197
198 .. ocv:pyoldfunction:: cv.HaarDetectObjects(image, cascade, storage, scale_factor=1.1, min_neighbors=3, flags=0, min_size=(0, 0)) -> detectedObjects
199
200     :param cascade: Haar classifier cascade (OpenCV 1.x API only). It can be loaded from XML or YAML file using :ocv:cfunc:`Load`. When the cascade is not needed anymore, release it using ``cvReleaseHaarClassifierCascade(&cascade)``.
201
202     :param image: Matrix of the type   ``CV_8U``  containing an image where objects are detected.
203
204     :param objects: Vector of rectangles where each rectangle contains the detected object.
205
206     :param scaleFactor: Parameter specifying how much the image size is reduced at each image scale.
207
208     :param minNeighbors: Parameter specifying how many neighbors each candidate rectangle should have to retain it.
209
210     :param flags: Parameter with the same meaning for an old cascade as in the function ``cvHaarDetectObjects``. It is not used for a new cascade.
211
212     :param minSize: Minimum possible object size. Objects smaller than that are ignored.
213
214     :param maxSize: Maximum possible object size. Objects larger than that are ignored.
215
216 The function is parallelized with the TBB library.
217
218
219 CascadeClassifier::setImage
220 -------------------------------
221 Sets an image for detection.
222
223 .. ocv:function:: bool CascadeClassifier::setImage( Ptr<FeatureEvaluator>& feval, const Mat& image )
224
225 .. ocv:cfunction:: void cvSetImagesForHaarClassifierCascade( CvHaarClassifierCascade* cascade, const CvArr* sum, const CvArr* sqsum, const CvArr* tilted_sum, double scale )
226
227     :param cascade: Haar classifier cascade (OpenCV 1.x API only). See :ocv:func:`CascadeClassifier::detectMultiScale` for more information.
228
229     :param feval: Pointer to the feature evaluator used for computing features.
230
231     :param image: Matrix of the type   ``CV_8UC1``  containing an image where the features are computed.
232
233 The function is automatically called by :ocv:func:`CascadeClassifier::detectMultiScale` at every image scale. But if you want to test various locations manually using :ocv:func:`CascadeClassifier::runAt`, you need to call the function before, so that the integral images are computed.
234
235 .. note:: in the old API you need to supply integral images (that can be obtained using :ocv:cfunc:`Integral`) instead of the original image.
236
237
238 CascadeClassifier::runAt
239 ----------------------------
240 Runs the detector at the specified point.
241
242 .. ocv:function:: int CascadeClassifier::runAt( Ptr<FeatureEvaluator>& feval, Point pt, double& weight )
243
244 .. ocv:cfunction:: int cvRunHaarClassifierCascade( const CvHaarClassifierCascade* cascade, CvPoint pt, int start_stage=0 )
245
246     :param cascade: Haar classifier cascade (OpenCV 1.x API only). See :ocv:func:`CascadeClassifier::detectMultiScale` for more information.
247
248     :param feval: Feature evaluator used for computing features.
249
250     :param pt: Upper left point of the window where the features are computed. Size of the window is equal to the size of training images.
251
252 The function returns 1 if the cascade classifier detects an object in the given location.
253 Otherwise, it returns negated index of the stage at which the candidate has been rejected.
254
255 Use :ocv:func:`CascadeClassifier::setImage` to set the image for the detector to work with.
256
257 groupRectangles
258 -------------------
259 Groups the object candidate rectangles.
260
261 .. ocv:function:: void groupRectangles(vector<Rect>& rectList, int groupThreshold, double eps=0.2)
262 .. ocv:function:: void groupRectangles(vector<Rect>& rectList, vector<int>& weights, int groupThreshold, double eps=0.2)
263
264 .. ocv:pyfunction:: cv2.groupRectangles(rectList, groupThreshold[, eps]) -> rectList, weights
265
266
267     :param rectList: Input/output vector of rectangles. Output vector includes retained and grouped rectangles. (The Python list is not modified in place.)
268
269     :param groupThreshold: Minimum possible number of rectangles minus 1. The threshold is used in a group of rectangles to retain it.
270
271     :param eps: Relative difference between sides of the rectangles to merge them into a group.
272
273 The function is a wrapper for the generic function
274 :ocv:func:`partition` . It clusters all the input rectangles using the rectangle equivalence criteria that combines rectangles with similar sizes and similar locations. The similarity is defined by ``eps``. When ``eps=0`` , no clustering is done at all. If
275 :math:`\texttt{eps}\rightarrow +\inf` , all the rectangles are put in one cluster. Then, the small clusters containing less than or equal to ``groupThreshold`` rectangles are rejected. In each other cluster, the average rectangle is computed and put into the output rectangle list.