Commit 05452b119e685f749465398309ff60fdb641968b

Authored by Scott Klum
1 parent cb608094

Updated Flip and added RandRotate

Showing 1 changed file with 51 additions and 3 deletions
openbr/plugins/register.cpp
@@ -125,7 +125,7 @@ BR_REGISTER(Transform, AffineTransform) @@ -125,7 +125,7 @@ BR_REGISTER(Transform, AffineTransform)
125 * \brief Flips the image about an axis. 125 * \brief Flips the image about an axis.
126 * \author Josh Klontz \cite jklontz 126 * \author Josh Klontz \cite jklontz
127 */ 127 */
128 -class FlipTransform : public UntrainableTransform 128 +class FlipTransform : public UntrainableMetaTransform
129 { 129 {
130 Q_OBJECT 130 Q_OBJECT
131 Q_ENUMS(Axis) 131 Q_ENUMS(Axis)
@@ -140,14 +140,62 @@ public: @@ -140,14 +140,62 @@ public:
140 private: 140 private:
141 BR_PROPERTY(Axis, axis, Y) 141 BR_PROPERTY(Axis, axis, Y)
142 142
143 - void project(const Template &src, Template &dst) const 143 + void project(const TemplateList &src, TemplateList &dst) const
144 { 144 {
145 - flip(src, dst, axis); 145 + dst.append(src.first());
  146 + for (int i=0; i<src.size(); i++) {
  147 + Mat buffer;
  148 + flip(src[i], buffer, axis);
  149 + dst.append(Template(src[i].file,buffer));
  150 +
  151 + dst.last().file.setPoints(QtUtils::flipPoints(dst.last().file.points(),src[i].m().rows,src[i].m().cols));
  152 + }
  153 + }
  154 +
  155 + void project(const Template &src, Template &dst) const {
  156 + TemplateList temp;
  157 + project(TemplateList() << src, temp);
  158 + if (!temp.isEmpty()) dst = temp.first();
146 } 159 }
147 }; 160 };
148 161
149 BR_REGISTER(Transform, FlipTransform) 162 BR_REGISTER(Transform, FlipTransform)
150 163
  164 +/*!
  165 + * \ingroup transforms
  166 + * \brief Randomly rotates an image in a specified range.
  167 + * \author Scott Klum \cite sklum
  168 + */
  169 +class RandRotateTransform : public UntrainableTransform
  170 +{
  171 + Q_OBJECT
  172 +
  173 + Q_PROPERTY(QList<int> range READ get_range WRITE set_range RESET reset_range STORED false)
  174 + BR_PROPERTY(QList<int>, range, QList<int>() << -15 << 15)
  175 +
  176 + void project(const Template &src, Template &dst) const {
  177 + int span = range.first() - range.last();
  178 + int angle = (rand() % span) + range.first();
  179 + Mat rotMatrix = getRotationMatrix2D(Point2f(src.m().rows/2,src.m().cols/2),angle,1.0);
  180 + warpAffine(src,dst,rotMatrix,Size(src.m().cols,src.m().rows));
  181 +
  182 + QList<QPointF> points = src.file.points();
  183 + QList<QPointF> rotatedPoints;
  184 + for (int i=0; i<points.size(); i++) {
  185 + rotatedPoints.append(QPointF(points.at(i).x()*rotMatrix.at<double>(0,0)+
  186 + points.at(i).y()*rotMatrix.at<double>(0,1)+
  187 + rotMatrix.at<double>(0,2),
  188 + points.at(i).x()*rotMatrix.at<double>(1,0)+
  189 + points.at(i).y()*rotMatrix.at<double>(1,1)+
  190 + rotMatrix.at<double>(1,2)));
  191 + }
  192 +
  193 + dst.file.setPoints(rotatedPoints);
  194 + }
  195 +};
  196 +
  197 +BR_REGISTER(Transform, RandRotateTransform)
  198 +
151 } // namespace br 199 } // namespace br
152 200
153 #include "register.moc" 201 #include "register.moc"