-
Notifications
You must be signed in to change notification settings - Fork 1
/
adaboost.h
103 lines (76 loc) · 1.79 KB
/
adaboost.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <math.h>
#include <time.h>
#include <pthread.h>
#include <dirent.h>
#include "haar.h"
#ifndef _ADABOOST_H_
#define _ADABOOST_H_
//One weak classifier (One haar + threshold)
typedef struct WeakClassifier
{
int xmin;
int ymin;
int xmax;
int ymax;
int type;
int parity; //-1 or 1, if the haar value should be negative
float threshold;
} WeakClassifier;
//Weak classifier list with weight, part of a strong classifier
typedef struct ClassifierList
{
WeakClassifier class;
double weight;
struct ClassifierList *next;
} ClassifierList;
//strong classifier, used in cascading
typedef struct StrongClassifier
{
ClassifierList *weak;
float totalThreshold;
float falseNegative;
int weakNumber;
} StrongClassifier;
typedef struct SCList
{
StrongClassifier sc;
struct SCList *next;
} SCList;
//only used in the training part
typedef struct TrainingList
{
struct TrainingList *next;
Matrix m;
int positive;
float weight;
} TrainingList;
struct ThreadData
{
struct TrainingList *l;
int *lock;
int *nbThread;
float *bestScore;
WeakClassifier *wc;
int x;
};
struct TrainingElement
{
float val;
int positive;
float weight;
};
TrainingList* loadExamples(char *positiveFolder, char* negativeFolder);
int twc(WeakClassifier wc, Matrix *m, int *x, int *y);
int testWeakClassifier(WeakClassifier wc, Matrix *m);
int testStrong(Matrix *m, StrongClassifier *sc);
double testAllExamples(TrainingList *l, WeakClassifier wc);
WeakClassifier getBestClassifier(TrainingList *l, float *score);
SCList *adaboost(char* positiveFolder, char* negativeFolder,
int nb);
//SCList* learning(char *positiveFolder, char *negativeFolder, int nb);
void freeStrongClassifier(StrongClassifier* sc);
void freeSCList(SCList* l);
#endif