Commit 971dbf739384d9af4ddf3af07d960bf73e96cc7d

Authored by Josh Klontz
1 parent 564a4d82

Introduced GroupTransform

Showing 1 changed file with 39 additions and 0 deletions
openbr/plugins/regions.cpp
... ... @@ -112,6 +112,45 @@ BR_REGISTER(Transform, CatTransform)
112 112  
113 113 /*!
114 114 * \ingroup transforms
  115 + * \brief Group all input matrices into a single matrix.
  116 + *
  117 + * Similar to CatTransfrom but groups every _size_ adjacent matricies.
  118 + * \author Josh Klontz \cite jklontz
  119 + */
  120 +class GroupTransform : public UntrainableMetaTransform
  121 +{
  122 + Q_OBJECT
  123 + Q_PROPERTY(int size READ get_size WRITE set_size RESET reset_size)
  124 + BR_PROPERTY(int, size, 1)
  125 +
  126 + void project(const Template &src, Template &dst) const
  127 + {
  128 + dst.file = src.file;
  129 +
  130 + if (src.size() % size != 0)
  131 + qFatal("%d size does not evenly divide %d matrices.", size, src.size());
  132 + QVector<int> sizes(src.size() / size, 0);
  133 + for (int i=0; i<src.size(); i++)
  134 + sizes[i/size] += src[i].total();
  135 +
  136 + if (!src.empty())
  137 + foreach (int size, sizes)
  138 + dst.append(Mat(1, size, src.m().type()));
  139 +
  140 + QVector<int> offsets(src.size() / size, 0);
  141 + for (int i=0; i<src.size(); i++) {
  142 + size_t size = src[i].total() * src[i].elemSize();
  143 + int j = i / size;
  144 + memcpy(&dst[j].data[offsets[j]], src[i].ptr(), size);
  145 + offsets[j] += size;
  146 + }
  147 + }
  148 +};
  149 +
  150 +BR_REGISTER(Transform, GroupTransform)
  151 +
  152 +/*!
  153 + * \ingroup transforms
115 154 * \brief Concatenates all input matrices by row into a single matrix.
116 155 * All matricies must have the same column counts.
117 156 * \author Josh Klontz \cite jklontz
... ...