Commit 71e41b4a99979d3c5fb8633b682a32f810c33175
1 parent
50309714
Transform to compute the average image across all templates
Showing
1 changed file
with
21 additions
and
5 deletions
openbr/plugins/draw.cpp
| ... | ... | @@ -585,22 +585,38 @@ class MeanImageTransform : public TimeVaryingTransform |
| 585 | 585 | void projectUpdate(const Template &src, Template &dst) |
| 586 | 586 | { |
| 587 | 587 | dst = src; |
| 588 | - if (cnt == 0) | |
| 589 | - average = Mat::zeros(dst.m().size(),dst.m().type()); | |
| 590 | - average += dst; | |
| 588 | + if (cnt == 0) { | |
| 589 | + if (src.m().channels() == 1) | |
| 590 | + average = Mat::zeros(dst.m().size(),CV_64FC1); | |
| 591 | + else if (src.m().channels() == 3) | |
| 592 | + average = Mat::zeros(dst.m().size(),CV_64FC3); | |
| 593 | + else | |
| 594 | + qFatal("Unsupported number of channels"); | |
| 595 | + } | |
| 596 | + | |
| 597 | + Mat temp; | |
| 598 | + if (src.m().channels() == 1) { | |
| 599 | + src.m().convertTo(temp, CV_64FC1); | |
| 600 | + average += temp; | |
| 601 | + } else if (src.m().channels() == 3) { | |
| 602 | + src.m().convertTo(temp, CV_64FC3); | |
| 603 | + average += temp; | |
| 604 | + } else | |
| 605 | + qFatal("Unsupported number of channels"); | |
| 606 | + | |
| 591 | 607 | cnt++; |
| 592 | 608 | } |
| 593 | 609 | |
| 594 | 610 | virtual void finalize(TemplateList & output) |
| 595 | 611 | { |
| 596 | - average /= cnt; | |
| 612 | + average /= float(cnt); | |
| 597 | 613 | imwrite(QString("%1.%2").arg(imgname).arg(ext).toStdString(), average); |
| 598 | 614 | output = TemplateList(); |
| 599 | 615 | } |
| 600 | 616 | |
| 601 | 617 | |
| 602 | 618 | public: |
| 603 | - MeanImageTransform() : TimeVaryingTransform(true, false) {} | |
| 619 | + MeanImageTransform() : TimeVaryingTransform(false, false) {} | |
| 604 | 620 | }; |
| 605 | 621 | |
| 606 | 622 | BR_REGISTER(Transform, MeanImageTransform) | ... | ... |