Fixed compilation errors: removed using namespace from hpp file. This led to pulling...
[profile/ivi/opencv.git] / apps / traincascade / features.cpp
1 #include "opencv2/core/core.hpp"
2 #include "opencv2/core/internal.hpp"
3
4 #include "traincascade_features.h"
5 #include "cascadeclassifier.h"
6
7 using namespace std;
8 using namespace cv;
9
10 float calcNormFactor( const Mat& sum, const Mat& sqSum )
11 {
12     CV_DbgAssert( sum.cols > 3 && sqSum.rows > 3 );
13     Rect normrect( 1, 1, sum.cols - 3, sum.rows - 3 );
14     size_t p0, p1, p2, p3;
15     CV_SUM_OFFSETS( p0, p1, p2, p3, normrect, sum.step1() )
16     double area = normrect.width * normrect.height;
17     const int *sp = (const int*)sum.data;
18     int valSum = sp[p0] - sp[p1] - sp[p2] + sp[p3];
19     const double *sqp = (const double *)sqSum.data;
20     double valSqSum = sqp[p0] - sqp[p1] - sqp[p2] + sqp[p3];
21     return (float) sqrt( (double) (area * valSqSum - (double)valSum * valSum) );
22 }
23
24 CvParams::CvParams() : name( "params" ) {}
25 void CvParams::printDefaults() const
26 { cout << "--" << name << "--" << endl; }
27 void CvParams::printAttrs() const {}
28 bool CvParams::scanAttr( const string, const string ) { return false; }
29
30
31 //---------------------------- FeatureParams --------------------------------------
32
33 CvFeatureParams::CvFeatureParams() : maxCatCount( 0 ), featSize( 1 )
34 {
35     name = CC_FEATURE_PARAMS;
36 }
37
38 void CvFeatureParams::init( const CvFeatureParams& fp )
39 {
40     maxCatCount = fp.maxCatCount;
41     featSize = fp.featSize;
42 }
43
44 void CvFeatureParams::write( FileStorage &fs ) const
45 {
46     fs << CC_MAX_CAT_COUNT << maxCatCount;
47     fs << CC_FEATURE_SIZE << featSize;
48 }
49
50 bool CvFeatureParams::read( const FileNode &node )
51 {
52     if ( node.empty() )
53         return false;
54     maxCatCount = node[CC_MAX_CAT_COUNT];
55     featSize = node[CC_FEATURE_SIZE];
56     return ( maxCatCount >= 0 && featSize >= 1 );
57 }
58
59 Ptr<CvFeatureParams> CvFeatureParams::create( int featureType )
60 {
61     return featureType == HAAR ? Ptr<CvFeatureParams>(new CvHaarFeatureParams) :
62         featureType == LBP ? Ptr<CvFeatureParams>(new CvLBPFeatureParams) :
63         featureType == HOG ? Ptr<CvFeatureParams>(new CvHOGFeatureParams) :
64         Ptr<CvFeatureParams>();
65 }
66
67 //------------------------------------- FeatureEvaluator ---------------------------------------
68
69 void CvFeatureEvaluator::init(const CvFeatureParams *_featureParams,
70                               int _maxSampleCount, Size _winSize )
71 {
72     CV_Assert(_maxSampleCount > 0);
73     featureParams = (CvFeatureParams *)_featureParams;
74     winSize = _winSize;
75     numFeatures = 0;
76     cls.create( (int)_maxSampleCount, 1, CV_32FC1 );
77     generateFeatures();
78 }
79
80 void CvFeatureEvaluator::setImage(const Mat &img, uchar clsLabel, int idx)
81 {
82     CV_Assert(img.cols == winSize.width);
83     CV_Assert(img.rows == winSize.height);
84     CV_Assert(idx < cls.rows);
85     cls.ptr<float>(idx)[0] = clsLabel;
86 }
87
88 Ptr<CvFeatureEvaluator> CvFeatureEvaluator::create(int type)
89 {
90     return type == CvFeatureParams::HAAR ? Ptr<CvFeatureEvaluator>(new CvHaarEvaluator) :
91         type == CvFeatureParams::LBP ? Ptr<CvFeatureEvaluator>(new CvLBPEvaluator) :
92         type == CvFeatureParams::HOG ? Ptr<CvFeatureEvaluator>(new CvHOGEvaluator) :
93         Ptr<CvFeatureEvaluator>();
94 }