Commit 419920f290a0be066c45b6c0a5e6a6392e049d76
1 parent
c9aeecaa
IndependentTransform can now handle time varying transforms
Showing
1 changed file
with
23 additions
and
0 deletions
openbr/plugins/independent.cpp
| @@ -99,6 +99,8 @@ class IndependentTransform : public MetaTransform | @@ -99,6 +99,8 @@ class IndependentTransform : public MetaTransform | ||
| 99 | return independentTransform; | 99 | return independentTransform; |
| 100 | } | 100 | } |
| 101 | 101 | ||
| 102 | + bool timeVarying() const { return transform->timeVarying(); } | ||
| 103 | + | ||
| 102 | static void _train(Transform *transform, const TemplateList *data) | 104 | static void _train(Transform *transform, const TemplateList *data) |
| 103 | { | 105 | { |
| 104 | transform->train(*data); | 106 | transform->train(*data); |
| @@ -143,6 +145,27 @@ class IndependentTransform : public MetaTransform | @@ -143,6 +145,27 @@ class IndependentTransform : public MetaTransform | ||
| 143 | dst.append(mats); | 145 | dst.append(mats); |
| 144 | } | 146 | } |
| 145 | 147 | ||
| 148 | + void projectUpdate(const Template &src, Template &dst) | ||
| 149 | + { | ||
| 150 | + dst.file = src.file; | ||
| 151 | + QList<Mat> mats; | ||
| 152 | + for (int i=0; i<src.size(); i++) { | ||
| 153 | + transforms[i%transforms.size()]->projectUpdate(Template(src.file, src[i]), dst); | ||
| 154 | + mats.append(dst); | ||
| 155 | + dst.clear(); | ||
| 156 | + } | ||
| 157 | + dst.append(mats); | ||
| 158 | + } | ||
| 159 | + | ||
| 160 | + void projectUpdate(const TemplateList &src, TemplateList &dst) | ||
| 161 | + { | ||
| 162 | + dst.reserve(src.size()); | ||
| 163 | + foreach (const Template &t, src) { | ||
| 164 | + dst.append(Template()); | ||
| 165 | + projectUpdate(t, dst.last()); | ||
| 166 | + } | ||
| 167 | + } | ||
| 168 | + | ||
| 146 | void store(QDataStream &stream) const | 169 | void store(QDataStream &stream) const |
| 147 | { | 170 | { |
| 148 | const int size = transforms.size(); | 171 | const int size = transforms.size(); |