Path: blob/master/apps/traincascade/traincascade_features.h
16337 views
#ifndef _OPENCV_FEATURES_H_1#define _OPENCV_FEATURES_H_23#include "imagestorage.h"4#include <stdio.h>56#define FEATURES "features"78#define CV_SUM_OFFSETS( p0, p1, p2, p3, rect, step ) \9/* (x, y) */ \10(p0) = (rect).x + (step) * (rect).y; \11/* (x + w, y) */ \12(p1) = (rect).x + (rect).width + (step) * (rect).y; \13/* (x + w, y) */ \14(p2) = (rect).x + (step) * ((rect).y + (rect).height); \15/* (x + w, y + h) */ \16(p3) = (rect).x + (rect).width + (step) * ((rect).y + (rect).height);1718#define CV_TILTED_OFFSETS( p0, p1, p2, p3, rect, step ) \19/* (x, y) */ \20(p0) = (rect).x + (step) * (rect).y; \21/* (x - h, y + h) */ \22(p1) = (rect).x - (rect).height + (step) * ((rect).y + (rect).height);\23/* (x + w, y + w) */ \24(p2) = (rect).x + (rect).width + (step) * ((rect).y + (rect).width); \25/* (x + w - h, y + w + h) */ \26(p3) = (rect).x + (rect).width - (rect).height \27+ (step) * ((rect).y + (rect).width + (rect).height);2829float calcNormFactor( const cv::Mat& sum, const cv::Mat& sqSum );3031template<class Feature>32void _writeFeatures( const std::vector<Feature> features, cv::FileStorage &fs, const cv::Mat& featureMap )33{34fs << FEATURES << "[";35const cv::Mat_<int>& featureMap_ = (const cv::Mat_<int>&)featureMap;36for ( int fi = 0; fi < featureMap.cols; fi++ )37if ( featureMap_(0, fi) >= 0 )38{39fs << "{";40features[fi].write( fs );41fs << "}";42}43fs << "]";44}4546class CvParams47{48public:49CvParams();50virtual ~CvParams() {}51// from|to file52virtual void write( cv::FileStorage &fs ) const = 0;53virtual bool read( const cv::FileNode &node ) = 0;54// from|to screen55virtual void printDefaults() const;56virtual void printAttrs() const;57virtual bool scanAttr( const std::string prmName, const std::string val );58std::string name;59};6061class CvFeatureParams : public CvParams62{63public:64enum { HAAR = 0, LBP = 1, HOG = 2 };65CvFeatureParams();66virtual void init( const CvFeatureParams& fp );67virtual void write( cv::FileStorage &fs ) const;68virtual bool read( const cv::FileNode &node );69static cv::Ptr<CvFeatureParams> create( int featureType );70int maxCatCount; // 0 in case of numerical features71int featSize; // 1 in case of simple features (HAAR, LBP) and N_BINS(9)*N_CELLS(4) in case of Dalal's HOG features72};7374class CvFeatureEvaluator75{76public:77virtual ~CvFeatureEvaluator() {}78virtual void init(const CvFeatureParams *_featureParams,79int _maxSampleCount, cv::Size _winSize );80virtual void setImage(const cv::Mat& img, uchar clsLabel, int idx);81virtual void writeFeatures( cv::FileStorage &fs, const cv::Mat& featureMap ) const = 0;82virtual float operator()(int featureIdx, int sampleIdx) const = 0;83static cv::Ptr<CvFeatureEvaluator> create(int type);8485int getNumFeatures() const { return numFeatures; }86int getMaxCatCount() const { return featureParams->maxCatCount; }87int getFeatureSize() const { return featureParams->featSize; }88const cv::Mat& getCls() const { return cls; }89float getCls(int si) const { return cls.at<float>(si, 0); }90protected:91virtual void generateFeatures() = 0;9293int npos, nneg;94int numFeatures;95cv::Size winSize;96CvFeatureParams *featureParams;97cv::Mat cls;98};99100#endif101102103