]> rtime.felk.cvut.cz Git - opencv.git/blob - opencv/apps/traincascade/features.h
dcd959fe9cc604804877a59bf1a2dceec6bdf07c
[opencv.git] / opencv / apps / traincascade / features.h
1 #ifndef FEATURES_H
2 #define FEATURES_H
3
4 #include "_imagestorage.h"
5 #include "cxcore.h"
6 #include "cv.h"
7 #include "ml.h"
8 #include <stdio.h>
9
10 typedef uint64 ccounter_t;
11 #define CCOUNTER_DIV(cc0, cc1) ( ((cc1) == 0) ? 0 : ( ((double)(cc0))/(double)(int64)(cc1) ) )
12
13 #define CV_SUM_OFFSETS( p0, p1, p2, p3, rect, step )                      \
14     /* (x, y) */                                                          \
15     (p0) = (rect).x + (step) * (rect).y;                                  \
16     /* (x + w, y) */                                                      \
17     (p1) = (rect).x + (rect).width + (step) * (rect).y;                   \
18     /* (x + w, y) */                                                      \
19     (p2) = (rect).x + (step) * ((rect).y + (rect).height);                \
20     /* (x + w, y + h) */                                                  \
21     (p3) = (rect).x + (rect).width + (step) * ((rect).y + (rect).height);
22
23 #define CV_TILTED_OFFSETS( p0, p1, p2, p3, rect, step )                   \
24     /* (x, y) */                                                          \
25     (p0) = (rect).x + (step) * (rect).y;                                  \
26     /* (x - h, y + h) */                                                  \
27     (p1) = (rect).x - (rect).height + (step) * ((rect).y + (rect).height);\
28     /* (x + w, y + w) */                                                  \
29     (p2) = (rect).x + (rect).width + (step) * ((rect).y + (rect).width);  \
30     /* (x + w - h, y + w + h) */                                          \
31     (p3) = (rect).x + (rect).width - (rect).height                        \
32            + (step) * ((rect).y + (rect).width + (rect).height);
33
34 //-------------------------------------- Params ---------------------------------------------
35
36 struct CvParams
37 {
38     CvParams() : name( "params" ) {}
39     virtual ~CvParams() {}
40     // from|to file
41     virtual void write( CvFileStorage* fs ) const = 0;
42     virtual bool read( CvFileStorage* fs, CvFileNode* node ) = 0;
43
44     // from|to screen
45     virtual void printDefaults()
46     { printf( "--%s--\n", name ); };
47     virtual void printAttrs(){};
48     virtual bool scanAttr( const char* prmName, const char* val ){ return false; }
49     const char* name;
50 };
51
52 //----------------------------------  FeatureParams  ----------------------------------------
53 struct CvFeatureParams : CvParams
54 {
55     CvFeatureParams();
56     CvFeatureParams( CvSize _winSize );
57     virtual ~CvFeatureParams()
58     {}
59
60     virtual void set( const CvFeatureParams* fp );
61
62     virtual void write( CvFileStorage* fs ) const;
63     virtual bool read( CvFileStorage* fs, CvFileNode* node );
64
65     int maxCatCount; // 0 in case of numerical features
66 };
67
68 //----------------------------------  Features  ----------------------------------------------
69
70 struct CvFeature
71 {
72     CvFeature() {}
73     virtual ~CvFeature() {}
74     virtual void write( CvFileStorage* fs ) const = 0;
75 };
76
77 //----------------------------------  CascadeData ----------------------------------------
78
79 class CvCascadeClassifier;
80
81 class CvCascadeData
82 {
83 public:
84     CvCascadeData();
85     virtual ~CvCascadeData();
86
87     virtual void setData( CvCascadeClassifier* _cascade,
88          const char* _vecFileName, const char* _bgFileName, 
89          int _numPos, int _numNeg, const CvFeatureParams* _featureParams );
90     virtual void clear();
91     virtual void generateFeatures() = 0;
92     virtual float calcFeature( int featureIdx, int sampleIdx ) = 0;
93
94     static void calcNormfactor( const CvMat* _sum, const CvMat* _sqSum, float& _normFactor );
95
96     virtual bool updateForNextStage( double& acceptanceRatio );    
97
98     int getMaxCatCount() const { return featureParams->maxCatCount; }
99     CvSize getWinSize() const { return winSize; }
100     int getNumFeatures() const { return numFeatures; }
101     int getNumSamples() const { return numImg; }
102     float getCls( int sampleIdx ) const;
103     const CvMat* getCls() const { return cls; }    
104     
105     virtual void writeFeature( CvFileStorage* fs, int fi ); // for old file format
106     virtual void writeFeatures( CvFileStorage* fs, const CvMat* featureMap );
107
108 protected:    
109     virtual int fillPassedSamles( int first, int count, bool isPositive, int64& consumed ) = 0;
110     int maxCatCount;
111     int numFeatures;
112     int numPos, numNeg, numImg;
113     CvSize winSize;
114
115     CvMat* cls; /* classes. 1.0 - object, 0.0 - background */
116
117     CvCascadeClassifier* cascade;
118     const CvFeatureParams* featureParams;
119     CvImageReader* imgreader;
120         CvFeature** features;
121 };
122
123 #endif