2011-02-22 21:43:26 +01:00
Cascade Classification
======================
.. highlight :: cpp
.. index :: FeatureEvaluator
FeatureEvaluator
----------------
2011-02-28 22:26:43 +01:00
.. c:type :: FeatureEvaluator
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
Base class for computing feature values in cascade classifiers ::
2011-02-22 21:43:26 +01:00
class CV_EXPORTS FeatureEvaluator
{
2011-02-26 12:05:10 +01:00
public:
enum { HAAR = 0, LBP = 1 }; // supported feature types
2011-02-22 21:43:26 +01:00
virtual ~FeatureEvaluator(); // destructor
virtual bool read(const FileNode& node);
virtual Ptr<FeatureEvaluator> clone() const;
virtual int getFeatureType() const;
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
virtual bool setImage(const Mat& img, Size origWinSize);
virtual bool setWindow(Point p);
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
virtual double calcOrd(int featureIdx) const;
virtual int calcCat(int featureIdx) const;
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
static Ptr<FeatureEvaluator> create(int type);
};
2011-03-03 08:29:55 +01:00
2011-02-22 21:43:26 +01:00
.. index :: FeatureEvaluator::read
2011-02-28 22:26:43 +01:00
FeatureEvaluator::read
2011-02-22 21:43:26 +01:00
--------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: bool FeatureEvaluator::read(const FileNode\& node)
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
Reads parameters of features from the `` FileStorage `` node.
2011-02-22 21:43:26 +01:00
2011-02-26 12:05:10 +01:00
:param node: File node from which the feature parameters are read.
2011-02-22 21:43:26 +01:00
.. index :: FeatureEvaluator::clone
2011-02-28 22:26:43 +01:00
FeatureEvaluator::clone
2011-02-22 21:43:26 +01:00
---------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: Ptr<FeatureEvaluator> FeatureEvaluator::clone() const
2011-02-22 21:43:26 +01:00
Returns a full copy of the feature evaluator.
.. index :: FeatureEvaluator::getFeatureType
2011-02-28 22:26:43 +01:00
FeatureEvaluator::getFeatureType
2011-02-22 21:43:26 +01:00
------------------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: int FeatureEvaluator::getFeatureType() const
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
Returns the feature type (`` HAAR `` or `` LBP `` for now).
2011-02-22 21:43:26 +01:00
.. index :: FeatureEvaluator::setImage
2011-02-28 22:26:43 +01:00
FeatureEvaluator::setImage
2011-02-22 21:43:26 +01:00
------------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: bool FeatureEvaluator::setImage(const Mat\& img, Size origWinSize)
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
Sets an image where the features are computed??.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param img: Matrix of the type ``CV_8UC1`` containing an image where the features are computed.
2011-02-22 21:43:26 +01:00
2011-02-26 12:05:10 +01:00
:param origWinSize: Size of training images.
2011-02-22 21:43:26 +01:00
.. index :: FeatureEvaluator::setWindow
2011-02-28 22:26:43 +01:00
FeatureEvaluator::setWindow
2011-02-22 21:43:26 +01:00
-------------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: bool FeatureEvaluator::setWindow(Point p)
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
Sets a window in the current image where the features are computed (called by ??).
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
: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.
2011-02-22 21:43:26 +01:00
.. index :: FeatureEvaluator::calcOrd
2011-02-28 22:26:43 +01:00
FeatureEvaluator::calcOrd
2011-02-22 21:43:26 +01:00
-----------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: double FeatureEvaluator::calcOrd(int featureIdx) const
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
Computes the value of an ordered (numerical) feature.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param featureIdx: Index of the feature whose value is computed.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
The function returns the computed value of an ordered feature.
2011-02-22 21:43:26 +01:00
.. index :: FeatureEvaluator::calcCat
2011-02-28 22:26:43 +01:00
FeatureEvaluator::calcCat
2011-02-22 21:43:26 +01:00
-----------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: int FeatureEvaluator::calcCat(int featureIdx) const
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
Computes the value of a categorical feature.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param featureIdx: Index of the feature whose value is computed.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
The function returns the computed label of a categorical feature, that is, the value from [0,... (number of categories - 1)].
2011-02-22 21:43:26 +01:00
.. index :: FeatureEvaluator::create
2011-02-28 22:26:43 +01:00
FeatureEvaluator::create
2011-02-22 21:43:26 +01:00
----------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: static Ptr<FeatureEvaluator> FeatureEvaluator::create(int type)
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
Constructs the feature evaluator.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param type: Type of features evaluated by cascade (``HAAR`` or ``LBP`` for now).
2011-02-22 21:43:26 +01:00
.. index :: CascadeClassifier
.. _CascadeClassifier:
CascadeClassifier
-----------------
2011-02-28 22:26:43 +01:00
.. c:type :: CascadeClassifier
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
The cascade classifier class for object detection ::
2011-02-22 21:43:26 +01:00
class CascadeClassifier
{
public:
2011-05-15 21:16:27 +02:00
// structure for storing a tree node
2011-02-26 12:05:10 +01:00
struct CV_EXPORTS DTreeNode
2011-02-22 21:43:26 +01:00
{
2011-05-15 21:16:27 +02:00
int featureIdx; // feature index on which is a split??
2011-02-22 21:43:26 +01:00
float threshold; // split threshold of ordered features only
int left; // left child index in the tree nodes array
int right; // right child index in the tree nodes array
};
2011-02-26 12:05:10 +01:00
2011-05-15 21:16:27 +02:00
// structure for storing a decision tree
2011-02-26 12:05:10 +01:00
struct CV_EXPORTS DTree
2011-02-22 21:43:26 +01:00
{
int nodeCount; // nodes count
};
2011-02-26 12:05:10 +01:00
2011-05-15 21:16:27 +02:00
// structure for storing a cascade stage (BOOST only for now)
2011-02-22 21:43:26 +01:00
struct CV_EXPORTS Stage
{
int first; // first tree index in tree array
int ntrees; // number of trees
2011-05-15 21:16:27 +02:00
float threshold; // threshold of stage sum
2011-02-22 21:43:26 +01:00
};
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
enum { BOOST = 0 }; // supported stage types
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
// mode of detection (see parameter flags in function HaarDetectObjects)
enum { DO_CANNY_PRUNING = CV_HAAR_DO_CANNY_PRUNING,
SCALE_IMAGE = CV_HAAR_SCALE_IMAGE,
FIND_BIGGEST_OBJECT = CV_HAAR_FIND_BIGGEST_OBJECT,
2011-02-26 12:05:10 +01:00
DO_ROUGH_SEARCH = CV_HAAR_DO_ROUGH_SEARCH };
2011-02-22 21:43:26 +01:00
CascadeClassifier(); // default constructor
CascadeClassifier(const string& filename);
~CascadeClassifier(); // destructor
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
bool empty() const;
bool load(const string& filename);
bool read(const FileNode& node);
2011-02-26 12:05:10 +01:00
void detectMultiScale( const Mat& image, vector<Rect>& objects,
double scaleFactor=1.1, int minNeighbors=3,
2011-02-22 21:43:26 +01:00
int flags=0, Size minSize=Size());
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
bool setImage( Ptr<FeatureEvaluator>&, const Mat& );
int runAt( Ptr<FeatureEvaluator>&, Point );
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
bool is_stump_based; // true, if the trees are stumps
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
int stageType; // stage type (BOOST only for now)
int featureType; // feature type (HAAR or LBP for now)
2011-02-26 12:05:10 +01:00
int ncategories; // number of categories (for categorical features only)
2011-02-22 21:43:26 +01:00
Size origWinSize; // size of training images
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
vector<Stage> stages; // vector of stages (BOOST for now)
vector<DTree> classifiers; // vector of decision trees
vector<DTreeNode> nodes; // vector of tree nodes
vector<float> leaves; // vector of leaf values
vector<int> subsets; // subsets of split by categorical feature
2011-02-26 12:05:10 +01:00
2011-02-22 21:43:26 +01:00
Ptr<FeatureEvaluator> feval; // pointer to feature evaluator
Ptr<CvHaarClassifierCascade> oldCascade; // pointer to old cascade
};
2011-03-03 08:29:55 +01:00
2011-02-22 21:43:26 +01:00
.. index :: CascadeClassifier::CascadeClassifier
2011-02-28 22:26:43 +01:00
CascadeClassifier::CascadeClassifier
2011-02-22 21:43:26 +01:00
----------------------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: CascadeClassifier::CascadeClassifier(const string\& filename)
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
Loads a classifier from a file.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param filename: Name of the file from which the classifier is loaded.
2011-02-22 21:43:26 +01:00
.. index :: CascadeClassifier::empty
2011-02-28 22:26:43 +01:00
CascadeClassifier::empty
2011-02-22 21:43:26 +01:00
----------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: bool CascadeClassifier::empty() const
2011-02-22 21:43:26 +01:00
Checks if the classifier has been loaded or not.
.. index :: CascadeClassifier::load
2011-02-28 22:26:43 +01:00
CascadeClassifier::load
2011-02-22 21:43:26 +01:00
---------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: bool CascadeClassifier::load(const string\& filename)
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
Loads a classifier from a file. The previous content is destroyed.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
: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 new cascade classifier trained traincascade application.
2011-02-22 21:43:26 +01:00
.. index :: CascadeClassifier::read
2011-02-28 22:26:43 +01:00
CascadeClassifier::read
2011-02-22 21:43:26 +01:00
---------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: bool CascadeClassifier::read(const FileNode\& node)
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
Reads a classifier from a FileStorage node. The file may contain a new cascade classifier (trained traincascade application) only.
2011-02-22 21:43:26 +01:00
.. index :: CascadeClassifier::detectMultiScale
2011-02-28 22:26:43 +01:00
CascadeClassifier::detectMultiScale
2011-02-22 21:43:26 +01:00
---------------------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: void CascadeClassifier::detectMultiScale( const Mat\& image, vector<Rect>\& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size())
2011-02-22 21:43:26 +01:00
Detects objects of different sizes in the input image. The detected objects are returned as a list of rectangles.
2011-05-15 21:16:27 +02:00
:param image: Matrix of the type ``CV_8U`` containing an image where objects are detected.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param objects: Vector of rectangles where each rectangle contains the detected object.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param scaleFactor: Parameter specifying how much the image size is reduced at each image scale.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param minNeighbors: Parameter specifying how many neighbors each candiate rectangle should have to retain it.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param flags: Parameter with the same meaning for an old cascade as in the function ``cvHaarDetectObjects``. It is not used for a new cascade.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param minSize: Minimum possible object size. Objects smaller than that are ignored.
2011-02-22 21:43:26 +01:00
2011-02-26 12:05:10 +01:00
.. index :: CascadeClassifier::setImage
2011-02-22 21:43:26 +01:00
2011-02-28 22:26:43 +01:00
CascadeClassifier::setImage
2011-02-22 21:43:26 +01:00
-------------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: bool CascadeClassifier::setImage( Ptr<FeatureEvaluator>\& feval, const Mat\& image )
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
Sets an image for detection, which is called by `` detectMultiScale `` at each image level.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param feval: Pointer to the feature evaluator that is used for computing features.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param image: Matrix of the type ``CV_8UC1`` containing an image where the features are computed.
2011-02-22 21:43:26 +01:00
.. index :: CascadeClassifier::runAt
2011-02-28 22:26:43 +01:00
CascadeClassifier::runAt
2011-02-22 21:43:26 +01:00
----------------------------
2011-02-28 22:26:43 +01:00
.. c:function :: int CascadeClassifier::runAt( Ptr<FeatureEvaluator>\& feval, Point pt )
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
Runs the detector at the specified point. Use `` setImage `` to set the image that the detector is working with.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param feval: Feature evaluator that is used for computing features.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
: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.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
The function returns 1 if the cascade classifier detects an object in the given location.
Otherwise, it returns `` si `` , which is an index of the stage that first predicted that the given window is a background image.??
2011-02-22 21:43:26 +01:00
.. index :: groupRectangles
2011-02-28 22:26:43 +01:00
groupRectangles
2011-02-22 21:43:26 +01:00
-------------------
2011-02-28 22:26:43 +01:00
.. c:function :: void groupRectangles(vector<Rect>\& rectList, int groupThreshold, double eps=0.2)
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
Groups the object candidate rectangles.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param rectList: Input/output vector of rectangles. Output vector includes retained and grouped rectangles.??
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param groupThreshold: Minimum possible number of rectangles minus 1. The threshold is used in a group of rectangles to retain it.??
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
:param eps: Relative difference between sides of the rectangles to merge them into a group.
2011-02-22 21:43:26 +01:00
2011-05-15 21:16:27 +02:00
The function is a wrapper for the generic function
:ref: `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
: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.