Commit d723e2caf096895d5f139e2bf6e167ab6299c55e

Authored by Josh Klontz
1 parent 4e02e315

played around with weighing the HoG vectors based on magnitude, didn't see much of an impact

openbr/plugins/hist.cpp
@@ -86,13 +86,36 @@ class BinTransform : public UntrainableTransform @@ -86,13 +86,36 @@ class BinTransform : public UntrainableTransform
86 void project(const Template &src, Template &dst) const 86 void project(const Template &src, Template &dst) const
87 { 87 {
88 const double floor = ((src.m().depth() == CV_32F) || (src.m().depth() == CV_64F)) ? -0.5 : 0; 88 const double floor = ((src.m().depth() == CV_32F) || (src.m().depth() == CV_64F)) ? -0.5 : 0;
89 - src.m().convertTo(dst, bins > 256 ? CV_16U : CV_8U, bins/(max-min), floor); 89 +
  90 + Mat weights, vals;
  91 + const int channels = src.m().channels();
  92 + if (channels == 1) {
  93 + vals = src;
  94 + } else if (channels == 2) {
  95 + // If there are two channels, the first is channel is assumed to be a weight vector
  96 + // and the second channel contains the vectors we would like to bin.
  97 + vector<Mat> mv;
  98 + cv::split(src, mv);
  99 + weights = mv[0];
  100 + weights.convertTo(weights, CV_32F);
  101 + vals = mv[1];
  102 + } else {
  103 + qFatal("Invalid channel count: %d", channels);
  104 + }
  105 +
  106 + vals.convertTo(dst, bins > 256 ? CV_16U : CV_8U, bins/(max-min), floor);
90 if (!split) return; 107 if (!split) return;
91 108
92 - Mat input = dst;  
93 QList<Mat> outputs; outputs.reserve(bins); 109 QList<Mat> outputs; outputs.reserve(bins);
94 - for (int i=0; i<bins; i++)  
95 - outputs.append(input == i); // Note: Matrix elements are 0 or 255 110 + for (int i=0; i<bins; i++) {
  111 + Mat output = (dst == i);
  112 + if (weights.data) {
  113 + output.convertTo(output, CV_32F);
  114 + multiply(output, weights, output);
  115 + output.convertTo(output, CV_8U);
  116 + }
  117 + outputs.append(output);
  118 + }
96 dst.clear(); dst.append(outputs); 119 dst.clear(); dst.append(outputs);
97 } 120 }
98 }; 121 };
openbr/plugins/integral.cpp
@@ -212,6 +212,9 @@ class RecursiveIntegralSamplerTransform : public Transform @@ -212,6 +212,9 @@ class RecursiveIntegralSamplerTransform : public Transform
212 212
213 void train(const TemplateList &src) 213 void train(const TemplateList &src)
214 { 214 {
  215 + if (src.first().m().depth() != CV_32S)
  216 + qFatal("Expected CV_32S depth!");
  217 +
215 if (subTransform != NULL) { 218 if (subTransform != NULL) {
216 TemplateList subSrc; subSrc.reserve(src.size()); 219 TemplateList subSrc; subSrc.reserve(src.size());
217 foreach (const Template &t, src) 220 foreach (const Template &t, src)
@@ -287,13 +290,19 @@ private: @@ -287,13 +290,19 @@ private:
287 void project(const Template &src, Template &dst) const 290 void project(const Template &src, Template &dst) const
288 { 291 {
289 Mat dx, dy, magnitude, angle; 292 Mat dx, dy, magnitude, angle;
290 - Sobel(src, dx, CV_32F, 1, 0);  
291 - Sobel(src, dy, CV_32F, 0, 1); 293 + Sobel(src, dx, CV_32F, 1, 0, CV_SCHARR);
  294 + Sobel(src, dy, CV_32F, 0, 1, CV_SCHARR);
292 cartToPolar(dx, dy, magnitude, angle, true); 295 cartToPolar(dx, dy, magnitude, angle, true);
293 - if ((channel == Magnitude) || (channel == MagnitudeAndAngle))  
294 - dst.append(magnitude); 296 + vector<Mat> mv;
  297 + if ((channel == Magnitude) || (channel == MagnitudeAndAngle)) {
  298 + const float theoreticalMaxMagnitude = sqrt(2*pow(float(2*(3+10+3)*255), 2.f));
  299 + mv.push_back(magnitude / theoreticalMaxMagnitude);
  300 + }
295 if ((channel == Angle) || (channel == MagnitudeAndAngle)) 301 if ((channel == Angle) || (channel == MagnitudeAndAngle))
296 - dst.append(angle); 302 + mv.push_back(angle);
  303 + Mat result;
  304 + merge(mv, result);
  305 + dst.append(result);
297 } 306 }
298 }; 307 };
299 308
scripts/integralFaceRecognition-PCSO.sh 0 → 100755
  1 +#!/bin/sh
  2 +
  3 +br -algorithm "{PP5Register+Affine(128,128,0.25,0.35)}+Cvt(Gray)+Gradient+Bin(0,360,9,true)+Merge+Integral+CvtFloat+RecursiveIntegralSampler(4,2,8,LDA(.98)+Normalize(L1))+Cat+PCA(768)+Normalize(L1)+Quantize:UCharL1" -path ~/data/PCSO -train ../data/PCSO/sigset/PCSO_2x1k_train.xml -compare ../data/PCSO/sigset/PCSO_2x1k_test.xml . scores.mtx -eval scores.mtx scores.csv
0 \ No newline at end of file 4 \ No newline at end of file