From 886a0abc7d35b5b979d255f391b099932aff53c3 Mon Sep 17 00:00:00 2001 From: M Taborsky Date: Mon, 14 Jan 2013 13:11:16 -0500 Subject: [PATCH] fixed enroll --- sdk/core/core.cpp | 10 +++++++++- sdk/openbr_plugin.cpp | 24 ++++++++++++++++++++++++ sdk/openbr_plugin.h | 1 + sdk/plugins/eigen3.cpp | 2 ++ sdk/plugins/meta.cpp | 37 +++++++++++++++++++++++++++++++++++++ 5 files changed, 73 insertions(+), 1 deletion(-) diff --git a/sdk/core/core.cpp b/sdk/core/core.cpp index 29cdd7a..b694ba6 100644 --- a/sdk/core/core.cpp +++ b/sdk/core/core.cpp @@ -132,7 +132,15 @@ struct AlgorithmCore if (data.isEmpty()) break; const int numFiles = data.size(); - data >> *transform; + if (!Globals->backProject){ + data >> *transform; + } else { + // I don't really know if this makes sense. + //TemplateList dst; + transform->backProject(data, data); + //data = dst; + } + g->writeBlock(data); const FileList newFiles = data.files(); fileList.append(newFiles); diff --git a/sdk/openbr_plugin.cpp b/sdk/openbr_plugin.cpp index f91fc90..39db047 100644 --- a/sdk/openbr_plugin.cpp +++ b/sdk/openbr_plugin.cpp @@ -1144,6 +1144,18 @@ static void _project(const Transform *transform, const Template *src, Template * } } +static void _backProject(const Transform *transform, const Template *dst, Template *src) +{ + try { + transform->backProject(*dst, *src); + } catch (...) { + qWarning("Exception triggered when processing %s with transform %s", qPrintable(src->file.flat()), qPrintable(transform->name())); + *src = Template(dst->file); + src->file.setBool("FTE"); + } +} + + void Transform::project(const TemplateList &src, TemplateList &dst) const { dst.reserve(src.size()); @@ -1162,6 +1174,18 @@ void Transform::backProject(const Template &dst, Template &src) const src = dst; } +void Transform::backProject(const TemplateList &dst, TemplateList &src) const +{ + src.reserve(dst.size()); + for (int i=0; i > futures; + if (Globals->parallelism) futures.reserve(dst.size()); + for (int i=0; iparallelism) futures.append(QtConcurrent::run(_backProject, this, &dst[i], &src[i])); + else _backProject (this, &dst[i], &src[i]); + if (Globals->parallelism) Globals->trackFutures(futures); +} /* Distance - public methods */ void Distance::train(const TemplateList &templates) diff --git a/sdk/openbr_plugin.h b/sdk/openbr_plugin.h index 08f008b..761a302 100644 --- a/sdk/openbr_plugin.h +++ b/sdk/openbr_plugin.h @@ -913,6 +913,7 @@ public: virtual void project(const Template &src, Template &dst) const = 0; /*!< \brief Apply the transform. */ virtual void project(const TemplateList &src, TemplateList &dst) const; /*!< \brief Apply the transform. */ virtual void backProject(const Template &dst, Template &src) const; /*!< \brief Invert the transform. */ + virtual void backProject(const TemplateList &dst, TemplateList &src) const; /*!< \brief Invert the transform. */ diff --git a/sdk/plugins/eigen3.cpp b/sdk/plugins/eigen3.cpp index 911c42f..00a7f6c 100644 --- a/sdk/plugins/eigen3.cpp +++ b/sdk/plugins/eigen3.cpp @@ -52,6 +52,7 @@ public: PCA() : keep(0.95), drop(0), whiten(false) {} private: + /* void backProject(const Template &src, Template &dst) const { const cv::Mat &m = src; @@ -64,6 +65,7 @@ private: // Do projection outMap = (eVecs * inMap) + mean; } + */ double residualReconstructionError(const Template &src) const { diff --git a/sdk/plugins/meta.cpp b/sdk/plugins/meta.cpp index f6240bb..a1b9198 100644 --- a/sdk/plugins/meta.cpp +++ b/sdk/plugins/meta.cpp @@ -136,6 +136,25 @@ class PipeTransform : public MetaTransform Transform::project(src, dst); } } + + void projectBack(const Template &dst, Template &src) const + { + src = dst; + //reverse order in which transforms are processed + int length = transforms.length(); + //foreach (const Transform *f, transforms) { + for (int i = 0; i < length; i++){ + Transform *f = transforms.at(length - i - 1); + try { + src >> *f; + } catch (...) { + qWarning("Exception triggered when processing %s with transform %s", qPrintable(dst.file.flat()), qPrintable(f->name())); + src = Template(src.file); + src.file.setBool("FTE"); + } + } + } + }; BR_REGISTER(Transform, PipeTransform) @@ -193,6 +212,24 @@ class ChainTransform : public MetaTransform dst = Simplified(dst); } } + + void projectBack(const Template &dst, Template &src) const + { + src = dst; + //reverse order in which transforms are processed + int length = transforms.length(); + //foreach (const Transform *f, transforms) { + for (int i = 0; i < length; i++){ + Transform *f = transforms.at(length - i - 1); + try { + src >> *f; + } catch (...) { + qWarning("Exception triggered when processing %s with transform %s", qPrintable(dst.file.flat()), qPrintable(f->name())); + src = Template(src.file); + src.file.setBool("FTE"); + } + } + } }; BR_REGISTER(Transform, ChainTransform) -- libgit2 0.21.4