Cascade Classification ====================== .. highlight:: cpp .. index:: FeatureEvaluator .. _FeatureEvaluator: FeatureEvaluator ---------------- `id=0.642574887522 Comments from the Wiki `__ .. ctype:: FeatureEvaluator Base class for computing feature values in cascade classifiers. :: class CV_EXPORTS FeatureEvaluator { public: enum { HAAR = 0, LBP = 1 }; // supported feature types virtual ~FeatureEvaluator(); // destructor virtual bool read(const FileNode& node); virtual Ptr clone() const; virtual int getFeatureType() const; virtual bool setImage(const Mat& img, Size origWinSize); virtual bool setWindow(Point p); virtual double calcOrd(int featureIdx) const; virtual int calcCat(int featureIdx) const; static Ptr create(int type); }; .. .. index:: FeatureEvaluator::read cv::FeatureEvaluator::read -------------------------- `id=0.490621500634 Comments from the Wiki `__ .. cfunction:: bool FeatureEvaluator::read(const FileNode\& node) Reads parameters of the features from a FileStorage node. :param node: File node from which the feature parameters are read. .. index:: FeatureEvaluator::clone cv::FeatureEvaluator::clone --------------------------- `id=0.900620103801 Comments from the Wiki `__ .. cfunction:: Ptr FeatureEvaluator::clone() const Returns a full copy of the feature evaluator. .. index:: FeatureEvaluator::getFeatureType cv::FeatureEvaluator::getFeatureType ------------------------------------ `id=0.443085860068 Comments from the Wiki `__ .. cfunction:: int FeatureEvaluator::getFeatureType() const Returns the feature type (HAAR or LBP for now). .. index:: FeatureEvaluator::setImage cv::FeatureEvaluator::setImage ------------------------------ `id=0.978524367224 Comments from the Wiki `__ .. cfunction:: bool FeatureEvaluator::setImage(const Mat\& img, Size origWinSize) Sets the image in which to compute the features. :param img: Matrix of type ``CV_8UC1`` containing the image in which to compute the features. :param origWinSize: Size of training images. .. index:: FeatureEvaluator::setWindow cv::FeatureEvaluator::setWindow ------------------------------- `id=0.264061669125 Comments from the Wiki `__ :func:`CascadeClassifier::runAt` .. cfunction:: bool FeatureEvaluator::setWindow(Point p) Sets window in the current image in which the features will be computed (called by ). :param p: The upper left point of window in which the features will be computed. Size of the window is equal to size of training images. .. index:: FeatureEvaluator::calcOrd cv::FeatureEvaluator::calcOrd ----------------------------- `id=0.00954354349846 Comments from the Wiki `__ .. cfunction:: double FeatureEvaluator::calcOrd(int featureIdx) const Computes value of an ordered (numerical) feature. :param featureIdx: Index of feature whose value will be computed. Returns computed value of ordered feature. .. index:: FeatureEvaluator::calcCat cv::FeatureEvaluator::calcCat ----------------------------- `id=0.300311423787 Comments from the Wiki `__ .. cfunction:: int FeatureEvaluator::calcCat(int featureIdx) const Computes value of a categorical feature. :param featureIdx: Index of feature whose value will be computed. Returns computed label of categorical feature, i.e. value from [0,... (number of categories - 1)]. .. index:: FeatureEvaluator::create cv::FeatureEvaluator::create ---------------------------- `id=0.269705416457 Comments from the Wiki `__ .. cfunction:: static Ptr FeatureEvaluator::create(int type) Constructs feature evaluator. :param type: Type of features evaluated by cascade (HAAR or LBP for now). .. index:: CascadeClassifier .. _CascadeClassifier: CascadeClassifier ----------------- `id=0.580506388311 Comments from the Wiki `__ .. ctype:: CascadeClassifier The cascade classifier class for object detection. :: class CascadeClassifier { public: // structure for storing tree node struct CV_EXPORTS DTreeNode { int featureIdx; // feature index on which is a split 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 }; // structure for storing desision tree struct CV_EXPORTS DTree { int nodeCount; // nodes count }; // structure for storing cascade stage (BOOST only for now) struct CV_EXPORTS Stage { int first; // first tree index in tree array int ntrees; // number of trees float threshold; // treshold of stage sum }; enum { BOOST = 0 }; // supported stage types // 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, DO_ROUGH_SEARCH = CV_HAAR_DO_ROUGH_SEARCH }; CascadeClassifier(); // default constructor CascadeClassifier(const string& filename); ~CascadeClassifier(); // destructor bool empty() const; bool load(const string& filename); bool read(const FileNode& node); void detectMultiScale( const Mat& image, vector& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size()); bool setImage( Ptr&, const Mat& ); int runAt( Ptr&, Point ); bool is_stump_based; // true, if the trees are stumps int stageType; // stage type (BOOST only for now) int featureType; // feature type (HAAR or LBP for now) int ncategories; // number of categories (for categorical features only) Size origWinSize; // size of training images vector stages; // vector of stages (BOOST for now) vector classifiers; // vector of decision trees vector nodes; // vector of tree nodes vector leaves; // vector of leaf values vector subsets; // subsets of split by categorical feature Ptr feval; // pointer to feature evaluator Ptr oldCascade; // pointer to old cascade }; .. .. index:: CascadeClassifier::CascadeClassifier cv::CascadeClassifier::CascadeClassifier ---------------------------------------- `id=0.34007314135 Comments from the Wiki `__ .. cfunction:: CascadeClassifier::CascadeClassifier(const string\& filename) Loads the classifier from file. :param filename: Name of file from which classifier will be load. .. index:: CascadeClassifier::empty cv::CascadeClassifier::empty ---------------------------- `id=0.0644338510313 Comments from the Wiki `__ .. cfunction:: bool CascadeClassifier::empty() const Checks if the classifier has been loaded or not. .. index:: CascadeClassifier::load cv::CascadeClassifier::load --------------------------- `id=0.289173411299 Comments from the Wiki `__ .. cfunction:: bool CascadeClassifier::load(const string\& filename) Loads the classifier from file. The previous content is destroyed. :param filename: Name of file from which classifier will be load. File may contain as old haar classifier (trained by haartraining application) or new cascade classifier (trained traincascade application). .. index:: CascadeClassifier::read cv::CascadeClassifier::read --------------------------- `id=0.299527761709 Comments from the Wiki `__ .. cfunction:: bool CascadeClassifier::read(const FileNode\& node) Reads the classifier from a FileStorage node. File may contain a new cascade classifier (trained traincascade application) only. .. index:: CascadeClassifier::detectMultiScale cv::CascadeClassifier::detectMultiScale --------------------------------------- `id=0.82064037857 Comments from the Wiki `__ .. cfunction:: void CascadeClassifier::detectMultiScale( const Mat\& image, vector\& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size()) Detects objects of different sizes in the input image. The detected objects are returned as a list of rectangles. :param image: Matrix of type ``CV_8U`` containing the image in which to detect objects. :param objects: Vector of rectangles such that each rectangle contains the detected object. :param scaleFactor: Specifies how much the image size is reduced at each image scale. :param minNeighbors: Speficifes how many neighbors should each candiate rectangle have to retain it. :param flags: This parameter is not used for new cascade and have the same meaning for old cascade as in function cvHaarDetectObjects. :param minSize: The minimum possible object size. Objects smaller than that are ignored. .. index:: CascadeClassifier::setImage cv::CascadeClassifier::setImage ------------------------------- `id=0.19961429004 Comments from the Wiki `__ .. cfunction:: bool CascadeClassifier::setImage( Ptr\& feval, const Mat\& image ) Sets the image for detection (called by detectMultiScale at each image level). :param feval: Pointer to feature evaluator which is used for computing features. :param image: Matrix of type ``CV_8UC1`` containing the image in which to compute the features. .. index:: CascadeClassifier::runAt cv::CascadeClassifier::runAt ---------------------------- `id=0.802028993088 Comments from the Wiki `__ .. cfunction:: int CascadeClassifier::runAt( Ptr\& feval, Point pt ) Runs the detector at the specified point (the image that the detector is working with should be set by setImage). :param feval: Feature evaluator which is used for computing features. :param pt: The upper left point of window in which the features will be computed. Size of the window is equal to size of training images. Returns: 1 - if cascade classifier detects object in the given location. -si - otherwise. si is an index of stage which first predicted that given window is a background image. .. index:: groupRectangles cv::groupRectangles ------------------- `id=0.619474568668 Comments from the Wiki `__ .. cfunction:: void groupRectangles(vector\& rectList, int groupThreshold, double eps=0.2) Groups the object candidate rectangles :param rectList: The input/output vector of rectangles. On output there will be retained and grouped rectangles :param groupThreshold: The minimum possible number of rectangles, minus 1, in a group of rectangles to retain it. :param eps: The relative difference between sides of the rectangles to merge them into a group The function is a wrapper for a generic function :func:`partition` . It clusters all the input rectangles using the rectangle equivalence criteria, that combines rectangles that have 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 will be put in one cluster. Then, the small clusters, containing less than or equal to ``groupThreshold`` rectangles, will be rejected. In each other cluster the average rectangle will be computed and put into the output rectangle list.