Commit cd5c1964df71918aced797e9deb7cffb3a10daf1

Authored by Charles Otto
1 parent 3f09f0ba

Drop pixel.cpp, it is currently unmaintained (and broken by recent changes)

Showing 1 changed file with 0 additions and 298 deletions
openbr/plugins/pixel.cpp deleted
1   -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2   - * Copyright 2012 The MITRE Corporation *
3   - * *
4   - * Licensed under the Apache License, Version 2.0 (the "License"); *
5   - * you may not use this file except in compliance with the License. *
6   - * You may obtain a copy of the License at *
7   - * *
8   - * http://www.apache.org/licenses/LICENSE-2.0 *
9   - * *
10   - * Unless required by applicable law or agreed to in writing, software *
11   - * distributed under the License is distributed on an "AS IS" BASIS, *
12   - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13   - * See the License for the specific language governing permissions and *
14   - * limitations under the License. *
15   - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16   -
17   -#include "openbr_internal.h"
18   -
19   -using namespace cv;
20   -
21   -namespace br
22   -{
23   -
24   -/*!
25   - * \ingroup transforms
26   - * \brief Treat each pixel as a classification task
27   - * \author E. Taborsky \cite mmtaborsky
28   - */
29   -class PerPixelClassifierTransform : public MetaTransform
30   -{
31   - // problematic -cao
32   - Q_OBJECT
33   - Q_PROPERTY(br::Transform* transform READ get_transform WRITE set_transform RESET reset_transform)
34   - Q_PROPERTY(int pixels READ get_pixels WRITE set_pixels RESET reset_pixels STORED false)
35   - Q_PROPERTY(int orient READ get_orient WRITE set_orient RESET reset_orient STORED false)
36   - BR_PROPERTY(br::Transform*, transform, NULL)
37   - BR_PROPERTY(int, pixels, 10000)
38   - BR_PROPERTY(bool, orient, false)
39   -
40   - /*
41   - Bins:
42   - |4|3|2|
43   - |5| |1|
44   - |6|7|8|
45   - */
46   -
47   - QList<float> shift(int n, QList<float> &src) const
48   - {
49   - for (int i = 0; i < n; i++){ // Equivalent to src.append(src.takeFirst()) ?
50   - src.append(src.at(i));
51   - src.removeFirst();
52   - }
53   - return src;
54   - }
55   -
56   - void rotate(Template &src, Template &dst) const
57   - {
58   - int images = (src.m().cols)/9;
59   - dst = src;
60   - for (int i = 0; i < images; i++){
61   - double a = src.m().at<float>(7+(i*9)); //top
62   - double b = src.m().at<float>(1+(i*9)); //bottom
63   - double c = src.m().at<float>(5+(i*9)); //right
64   - double d = src.m().at<float>(3+(i*9)); //left
65   - double orientation = atan2((a-b),(c-d));
66   - int bin;
67   - if (orientation > 0){
68   - bin = ((orientation/CV_PI)*4.0 +.5);
69   - } else {
70   - bin = 8.0 + ((orientation/CV_PI)*4.0 + .5);
71   - }
72   -
73   - // put things in an order that makes sense to rotate
74   - // blugh
75   - QList<float> orderedList;
76   - QList<float> rotatedList;
77   - orderedList.insert(0, src.m().at<float>(3+(i*9)));
78   - orderedList.insert(1, src.m().at<float>(6+(i*9)));
79   - orderedList.insert(2, src.m().at<float>(7+(i*9)));
80   - orderedList.insert(3, src.m().at<float>(8+(i*9)));
81   - orderedList.insert(4, src.m().at<float>(5+(i*9)));
82   - orderedList.insert(5, src.m().at<float>(2+(i*9)));
83   - orderedList.insert(6, src.m().at<float>(1+(i*9)));
84   - orderedList.insert(7, src.m().at<float>(0+(i*9)));
85   -
86   - rotatedList = shift(bin, orderedList);
87   -
88   - dst.m().at<float>(0+(i*9)) = rotatedList.at(7);
89   - dst.m().at<float>(1+(i*9)) = rotatedList.at(6);
90   - dst.m().at<float>(2+(i*9)) = rotatedList.at(5);
91   - dst.m().at<float>(3+(i*9)) = rotatedList.at(0);
92   - dst.m().at<float>(4+(i*9)) = src.m().at<float>(4+(i*9)); // middle pixel not in orderedList
93   - dst.m().at<float>(5+(i*9)) = rotatedList.at(4);
94   - dst.m().at<float>(6+(i*9)) = rotatedList.at(1);
95   - dst.m().at<float>(7+(i*9)) = rotatedList.at(2);
96   - dst.m().at<float>(8+(i*9)) = rotatedList.at(3);
97   - }
98   - }
99   -
100   - void train(const TemplateList &trainingSet)
101   - {
102   - TemplateList pixelTemplates = TemplateList();
103   - const int length = trainingSet.length();
104   - int pixelsPerImage = pixels/length;
105   -
106   - for (int i=0; i < length; i++){
107   - Template src = trainingSet.at(i);
108   -
109   - const int mats = src.length();
110   - const int rows = src.m().rows;
111   - const int cols = src.m().cols;
112   -
113   - RNG &rng = theRNG();
114   - TemplateList srcPixelTemplates;
115   -
116   - for (int m=0; m < pixelsPerImage; m++){
117   - int index = rng.uniform(0, rows*cols);
118   - Template temp = Template(src.file, cv::Mat(1, mats, CV_32F));
119   - float *ptemp = (float*)temp.m().ptr();
120   - for (int n=0; n < mats; n++){
121   - uchar *psrc = src[n].ptr();
122   - ptemp[n] = psrc[index];
123   - }
124   - cv::Mat labelMat = src.file.value("labels").value<cv::Mat>();
125   - uchar* plabel = labelMat.ptr();
126   - temp.file.set("Label", plabel[index]);
127   -
128   - if (orient){
129   - Template rotated;
130   - rotate(temp, rotated);
131   - srcPixelTemplates.append(rotated);
132   - } else {
133   - srcPixelTemplates.append(temp);
134   - }
135   - }
136   - pixelTemplates.append(srcPixelTemplates);
137   - }
138   - transform->train(pixelTemplates);
139   - }
140   -
141   - void project(const Template &src, Template &dst) const
142   - {
143   - const int mats = src.length();
144   - const int rows = src.m().rows;
145   - const int cols = src.m().cols;
146   -
147   - dst = src; // Do we really want to copy all the src matrices into dst?
148   - dst.merge(Template(src.file, cv::Mat(src.m().rows, src.m().cols, CV_32F)));
149   - float *pdst = (float*) dst.m().ptr();
150   -
151   - for (int r = 0; r < rows; r++){
152   - for (int c = 0; c < cols; c++){
153   - Template temp = Template(src.file, cv::Mat(1, mats, CV_32F));
154   - Template dstTemp = Template(src.file, cv::Mat(1, mats, CV_32F));
155   -
156   - for (int n=0; n < mats; n++){
157   - const uchar *psrc = src[n].ptr();
158   - float *ptemp = (float*)temp[0].ptr();
159   - int index = r*cols + c;
160   - ptemp[n] = psrc[index];
161   - }
162   -
163   - if (orient){
164   - Template rotated = Template(src.file, cv::Mat(1, mats, CV_32F));
165   - rotate(temp, rotated);
166   - temp = rotated;
167   - }
168   -
169   - transform->project(temp,dstTemp);
170   - pdst[r*cols + c] = dstTemp.file.get<float>("Label");
171   - }
172   - }
173   - }
174   -};
175   -
176   -BR_REGISTER(Transform, PerPixelClassifierTransform)
177   -
178   -/*!
179   - * \ingroup transforms
180   - * \brief Construct feature vectors of neighboring pixels
181   - * \author E. Taborsky \cite mmtaborsky
182   - */
183   -class NeighborsTransform : public UntrainableMetaTransform
184   -{
185   - Q_OBJECT
186   -
187   - void project(const Template &src, Template &dst) const
188   - {
189   - int rows = src.m().rows;
190   - int cols = src.m().cols;
191   - int mats = src.length();
192   - dst.file = src.file;
193   -
194   - for (int n = 0; n < mats; n++){ //each matrix, except the last one, will be turned into 9 matrices
195   - const uchar *psrc = src[n].ptr();
196   - for (int i = -1; i < 2; i++){
197   - for (int j = -1; j < 2; j++){ // these nine matrices are shifted versions of the original
198   - cv::Mat mat = cv::Mat(rows, cols, CV_8UC1);
199   - uchar *pmat = (uchar*)mat.ptr();
200   - for (int r = 0; r < rows; r++){
201   - for (int c = 0; c < cols; c++){
202   - int index = r*cols+c;
203   - int newIndex = index + i*cols + j;
204   - if ((newIndex < 0) || (newIndex >= rows*cols)){
205   - pmat[index] = psrc[index];
206   - } else {
207   - pmat[index] = psrc[newIndex];
208   - }
209   - }
210   - }
211   - dst.push_back(mat); //add mat to dst
212   - }
213   - }
214   - }
215   - dst.push_back(src.m()); // add the last matrix
216   - }
217   -};
218   -
219   -BR_REGISTER(Transform, NeighborsTransform)
220   -
221   -/*!
222   - * \ingroup transforms
223   - * \brief To binary vector
224   - * \author E. Taborsky \cite mmtaborsky
225   - */
226   -class ToBinaryVectorTransform : public UntrainableMetaTransform
227   -{
228   - Q_OBJECT
229   - Q_PROPERTY(br::Transform* transform READ get_transform WRITE set_transform RESET reset_transform STORED false)
230   - Q_PROPERTY(int length READ get_length WRITE set_length RESET reset_length STORED false)
231   - BR_PROPERTY(br::Transform*, transform, NULL)
232   - BR_PROPERTY(int, length, -1)
233   -
234   - //needs to be updated..
235   - void project(const Template &src, Template &dst) const
236   - {
237   -
238   - dst = src;
239   - int mats = src.length();
240   - for (int i = 0; i < mats; i++){
241   - // Does this actually modify the data?
242   - dst[i]*(1.0/255.0); //scaling the input matrices to make the svm happier
243   - }
244   - for (int i = 0; i < length*(mats); i++){
245   - dst.prepend(Template(src.file, Mat::zeros(src.m().rows, src.m().cols, CV_8U)));
246   - }
247   -
248   - // original pixel values at the end
249   -
250   - Template transformed;
251   - transformed.file = src.file;
252   - transform->project(src, transformed);
253   -
254   - int rows = transformed.m().rows;
255   - int cols = transformed.m().cols;
256   -
257   - for (int i = 0; i < mats; i++){
258   - uchar *ptransformed = transformed[i].ptr();
259   - for (int r = 0; r < rows; r++){
260   - for (int c = 0; c < cols; c++){
261   - uchar index = ptransformed[r*cols+c];
262   - dst[index+(length*i)].at<uchar>(r,c) = 1;
263   - }
264   - }
265   - }
266   - }
267   -};
268   -
269   -BR_REGISTER(Transform, ToBinaryVectorTransform)
270   -
271   -/*!
272   - * \ingroup transforms
273   - * \brief If "labels" is specified, makes the last matrix into metadata
274   - * \author E. Taborsky \cite mmtaborsky
275   - */
276   -
277   -// What does this do? -cao
278   -class ToMetadataTransform : public UntrainableMetaTransform
279   -{
280   - Q_OBJECT
281   -
282   - void project(const Template &src, Template &dst) const
283   - {
284   - dst = src;
285   - if (dst.file.contains("labels")){
286   - QVariant last = qVariantFromValue(dst.m());
287   - dst.file.set("labels", last);
288   - dst.pop_back();
289   - }
290   - }
291   -
292   -};
293   -
294   -BR_REGISTER(Transform, ToMetadataTransform)
295   -
296   -} // namespace br
297   -
298   -#include "pixel.moc"