traincascade_features.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #ifndef _OPENCV_FEATURES_H_
  2. #define _OPENCV_FEATURES_H_
  3. #include "imagestorage.h"
  4. #include <stdio.h>
  5. #define FEATURES "features"
  6. #define CV_SUM_OFFSETS( p0, p1, p2, p3, rect, step ) \
  7. /* (x, y) */ \
  8. (p0) = (rect).x + (step) * (rect).y; \
  9. /* (x + w, y) */ \
  10. (p1) = (rect).x + (rect).width + (step) * (rect).y; \
  11. /* (x + w, y) */ \
  12. (p2) = (rect).x + (step) * ((rect).y + (rect).height); \
  13. /* (x + w, y + h) */ \
  14. (p3) = (rect).x + (rect).width + (step) * ((rect).y + (rect).height);
  15. #define CV_TILTED_OFFSETS( p0, p1, p2, p3, rect, step ) \
  16. /* (x, y) */ \
  17. (p0) = (rect).x + (step) * (rect).y; \
  18. /* (x - h, y + h) */ \
  19. (p1) = (rect).x - (rect).height + (step) * ((rect).y + (rect).height);\
  20. /* (x + w, y + w) */ \
  21. (p2) = (rect).x + (rect).width + (step) * ((rect).y + (rect).width); \
  22. /* (x + w - h, y + w + h) */ \
  23. (p3) = (rect).x + (rect).width - (rect).height \
  24. + (step) * ((rect).y + (rect).width + (rect).height);
  25. float calcNormFactor( const cv::Mat& sum, const cv::Mat& sqSum );
  26. template<class Feature>
  27. void _writeFeatures( const std::vector<Feature> features, cv::FileStorage &fs, const cv::Mat& featureMap )
  28. {
  29. fs << FEATURES << "[";
  30. const cv::Mat_<int>& featureMap_ = (const cv::Mat_<int>&)featureMap;
  31. for ( int fi = 0; fi < featureMap.cols; fi++ )
  32. if ( featureMap_(0, fi) >= 0 )
  33. {
  34. fs << "{";
  35. features[fi].write( fs );
  36. fs << "}";
  37. }
  38. fs << "]";
  39. }
  40. class CvParams
  41. {
  42. public:
  43. CvParams();
  44. virtual ~CvParams() {}
  45. // from|to file
  46. virtual void write( cv::FileStorage &fs ) const = 0;
  47. virtual bool read( const cv::FileNode &node ) = 0;
  48. // from|to screen
  49. virtual void printDefaults() const;
  50. virtual void printAttrs() const;
  51. virtual bool scanAttr( const std::string prmName, const std::string val );
  52. std::string name;
  53. };
  54. class CvFeatureParams : public CvParams
  55. {
  56. public:
  57. enum { HAAR = 0, LBP = 1, HOG = 2 };
  58. CvFeatureParams();
  59. virtual void init( const CvFeatureParams& fp );
  60. virtual void write( cv::FileStorage &fs ) const;
  61. virtual bool read( const cv::FileNode &node );
  62. static cv::Ptr<CvFeatureParams> create( int featureType );
  63. int maxCatCount; // 0 in case of numerical features
  64. int featSize; // 1 in case of simple features (HAAR, LBP) and N_BINS(9)*N_CELLS(4) in case of Dalal's HOG features
  65. };
  66. class CvFeatureEvaluator
  67. {
  68. public:
  69. virtual ~CvFeatureEvaluator() {}
  70. virtual void init(const CvFeatureParams *_featureParams,
  71. int _maxSampleCount, cv::Size _winSize );
  72. virtual void setImage(const cv::Mat& img, uchar clsLabel, int idx);
  73. virtual void writeFeatures( cv::FileStorage &fs, const cv::Mat& featureMap ) const = 0;
  74. virtual float operator()(int featureIdx, int sampleIdx) const = 0;
  75. static cv::Ptr<CvFeatureEvaluator> create(int type);
  76. int getNumFeatures() const { return numFeatures; }
  77. int getMaxCatCount() const { return featureParams->maxCatCount; }
  78. int getFeatureSize() const { return featureParams->featSize; }
  79. const cv::Mat& getCls() const { return cls; }
  80. float getCls(int si) const { return cls.at<float>(si, 0); }
  81. protected:
  82. virtual void generateFeatures() = 0;
  83. int npos, nneg;
  84. int numFeatures;
  85. cv::Size winSize;
  86. CvFeatureParams *featureParams;
  87. cv::Mat cls;
  88. };
  89. #endif