Commit b5f4124c6302f93e33c3a52fee5bd9bf45feec39

Authored by Josh Klontz
1 parent 1c82d1ec

finished draft of WordWiseTransform

Showing 1 changed file with 31 additions and 16 deletions
sdk/plugins/integral.cpp
@@ -133,38 +133,53 @@ class WordWiseTransform : public Transform @@ -133,38 +133,53 @@ class WordWiseTransform : public Transform
133 Q_OBJECT 133 Q_OBJECT
134 Q_PROPERTY(br::Transform* getWords READ get_getWords WRITE set_getWords RESET reset_getWords) 134 Q_PROPERTY(br::Transform* getWords READ get_getWords WRITE set_getWords RESET reset_getWords)
135 Q_PROPERTY(br::Transform* byWord READ get_byWord WRITE set_byWord RESET reset_byWord) 135 Q_PROPERTY(br::Transform* byWord READ get_byWord WRITE set_byWord RESET reset_byWord)
  136 + Q_PROPERTY(int numWords READ get_numWords WRITE set_numWords RESET reset_numWords)
136 BR_PROPERTY(br::Transform*, getWords, NULL) 137 BR_PROPERTY(br::Transform*, getWords, NULL)
137 BR_PROPERTY(br::Transform*, byWord, NULL) 138 BR_PROPERTY(br::Transform*, byWord, NULL)
  139 + BR_PROPERTY(int, numWords, 0)
138 140
139 void train(const TemplateList &data) 141 void train(const TemplateList &data)
140 { 142 {
141 getWords->train(data); 143 getWords->train(data);
142 - TemplateList words;  
143 - getWords->project(data, words); 144 + TemplateList bins;
  145 + getWords->project(data, bins);
144 146
145 - const int columns = data.first().m().cols;  
146 - int numWords = 0;  
147 - foreach (const Template &t, words) { 147 + numWords = 0;
  148 + foreach (const Template &t, bins) {
148 double minVal, maxVal; 149 double minVal, maxVal;
149 minMaxLoc(t, &minVal, &maxVal); 150 minMaxLoc(t, &minVal, &maxVal);
150 numWords = max(numWords, int(maxVal)+1); 151 numWords = max(numWords, int(maxVal)+1);
151 } 152 }
152 153
153 - QVector<int> wordCounts(numWords, 0);  
154 - foreach (const Template &t, words) {  
155 - const Mat &m = t.m();  
156 - for (int i=0; i<m.rows; i++)  
157 - wordCounts[m.at<uchar>(i,0)]++;  
158 - }  
159 -  
160 - QVector<Mat> trainingWords(numWords);  
161 - for (int i=0; i<numWords; i++)  
162 - trainingWords[i] = Mat(wordCounts[i], columns, CV_8UC1); 154 + TemplateList reworded; reworded.reserve(data.size());
  155 + foreach (const Template &t, data)
  156 + reworded.append(reword(t));
  157 + byWord->train(reworded);
163 } 158 }
164 159
165 void project(const Template &src, Template &dst) const 160 void project(const Template &src, Template &dst) const
166 { 161 {
167 - (void) src; (void) dst; 162 + Template reworded;
  163 + getWords->project(src, reworded);
  164 + byWord->project(reworded, dst);
  165 + }
  166 +
  167 + Template reword(const Template &src) const
  168 + {
  169 + Template words;
  170 + getWords->project(src, words);
  171 + QVector<int> wordCounts(numWords, 0);
  172 + for (int i=0; i<words.m().rows; i++)
  173 + wordCounts[words.m().at<uchar>(i,0)]++;
  174 + Template reworded(src.file); reworded.reserve(numWords);
  175 + for (int i=0; i<numWords; i++)
  176 + reworded.append(Mat(wordCounts[i], src.m().cols, src.m().type()));
  177 + QVector<int> indicies(numWords, 0);
  178 + for (int i=0; i<src.m().rows; i++) {
  179 + const int word = words.m().at<uchar>(i,0);
  180 + reworded[word].row(indicies[word]++) = src.m().row(i);
  181 + }
  182 + return reworded;
168 } 183 }
169 }; 184 };
170 185