Teh first one
[mldemos:kalians-mldemos.git] / MLDemos / sampleManager.h
1 /*********************************************************************\r
2 MLDemos: A User-Friendly visualization toolkit for machine learning\r
3 Copyright (C) 2010  Basilio Noris\r
4 Contact: mldemos@b4silio.com\r
5 \r
6 This library is free software; you can redistribute it and/or\r
7 modify it under the terms of the GNU Lesser General Public License,\r
8 version 3 as published by the Free Software Foundation.\r
9 \r
10 This library is distributed in the hope that it will be useful, but\r
11 WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
13 Lesser General Public License for more details.\r
14 \r
15 You should have received a copy of the GNU Lesser General Public\r
16 License along with this library; if not, write to the Free\r
17 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
18 *********************************************************************/\r
19 #ifndef _SAMPLE_MANAGER_H_\r
20 #define _SAMPLE_MANAGER_H_\r
21 \r
22 #include <vector>\r
23 \r
24 enum SampleManagerFlags\r
25 {\r
26         UNUSED = 0x0000,\r
27         TRAIN  = 0x0001,\r
28         VALID  = 0x0010,\r
29         TEST   = 0x0100\r
30 };\r
31 typedef SampleManagerFlags smFlags;\r
32 \r
33 class SampleManager : public Filter\r
34 {\r
35 protected:\r
36         static u32 IDCount;\r
37 \r
38         u32 ID;\r
39 \r
40         CvSize size; // the samples size (resolution)\r
41 \r
42         std::vector<IplImage *> samples;\r
43 \r
44         std::vector<smFlags> flags;\r
45 \r
46         ivec labels;\r
47 \r
48         u32 *perm;\r
49 \r
50         IplImage *display;\r
51 \r
52         void CreateSampleImage(IplImage **image, bool bShowLabels = false, float ratio = 1.f);\r
53 \r
54         bool bShowing;\r
55 \r
56 public:\r
57         SampleManager(CvSize resolution = cvSize(48,48));\r
58 \r
59         ~SampleManager();\r
60         \r
61         void Show();\r
62         void Hide();\r
63         bool IsShowing(){return bShowing;};\r
64         void Clear();\r
65 \r
66 \r
67         IplImage *GetSampleImage();\r
68         IplImage *GetDisplay(){return display;};\r
69 \r
70         static u32 GetClassCount(ivec classes);\r
71         float GetTestRatio();\r
72         void Randomize(int seed=-1);\r
73         void RandomTestSet(float ratio = 0.66f, bool bEnsureOnePerClass=true);\r
74 \r
75         void AddSample(IplImage *image, unsigned int label = 0);\r
76         void AddSample(IplImage *image, CvRect selection, unsigned int label = 0);\r
77         void AddSamples(std::vector<IplImage *>images);\r
78         void AddSamples(SampleManager newSamples);\r
79         void RemoveSample(unsigned int index);\r
80 \r
81         int GetIndexAt(int x, int y);\r
82         f32 Compare(IplImage *sample);\r
83 \r
84         CvSize GetSize(){return size;};\r
85         int GetCount(){return samples.size();};\r
86 \r
87         IplImage *GetSample(unsigned int index=0){return index<samples.size() ? samples[index] : NULL;};\r
88         std::vector<IplImage *> GetSamples(){return samples;};\r
89         std::vector<IplImage *> GetSamples(u32 count, smFlags flag=UNUSED, smFlags replaceWith=TRAIN);\r
90 \r
91         void ResetFlags();\r
92         void SetFlag(unsigned int index, smFlags flag){if(index < flags.size()) flags[index] = flag;};\r
93         smFlags GetFlag(unsigned int index){return index < flags.size() ? flags[index] : UNUSED;};\r
94         std::vector<smFlags > GetFlags(){return flags;};\r
95         std::vector<bool> GetFreeFlags();\r
96 \r
97         u32 GetLabel(unsigned int index){return index < labels.size() ? labels[index] : 0;};\r
98         ivec GetLabels(){return labels;};\r
99         void SetLabel(unsigned int index, unsigned int label){if(index<labels.size())labels[index] = label;};\r
100 \r
101         void Save(const char *filename);\r
102         bool Load(const char *filename, CvSize resolution = cvSize(48,48));\r
103 \r
104         virtual void Config(IplImage *image, CvRect selection, IplImage * =0){AddSample(image, selection);};\r
105 };\r
106 \r
107 #endif // _SAMPLE_MANAGER_H_\r