Commit f0af46eb7701552ebc8e46c994a5e1826b99670f
1 parent
54a98a97
Various helper functions
Showing
5 changed files
with
75 additions
and
0 deletions
openbr/core/eigenutils.cpp
| @@ -36,6 +36,15 @@ void writeEigen(VectorXd X, QString filename) { | @@ -36,6 +36,15 @@ void writeEigen(VectorXd X, QString filename) { | ||
| 36 | format->write(br::Template(m)); | 36 | format->write(br::Template(m)); |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | +void writeEigen(VectorXf X, QString filename) { | ||
| 40 | + Mat m(X.size(),1,CV_32FC1); | ||
| 41 | + for (int i = 0; i < X.rows(); i++) { | ||
| 42 | + m.at<float>(i,0) = X(i); | ||
| 43 | + } | ||
| 44 | + QScopedPointer<br::Format> format(br::Factory<br::Format>::make(filename)); | ||
| 45 | + format->write(br::Template(m)); | ||
| 46 | +} | ||
| 47 | + | ||
| 39 | void printEigen(Eigen::MatrixXd X) { | 48 | void printEigen(Eigen::MatrixXd X) { |
| 40 | for (int i = 0; i < X.rows(); i++) { | 49 | for (int i = 0; i < X.rows(); i++) { |
| 41 | QString str; | 50 | QString str; |
openbr/core/eigenutils.h
| @@ -24,6 +24,7 @@ | @@ -24,6 +24,7 @@ | ||
| 24 | void writeEigen(Eigen::MatrixXf X, QString filename); | 24 | void writeEigen(Eigen::MatrixXf X, QString filename); |
| 25 | void writeEigen(Eigen::MatrixXd X, QString filename); | 25 | void writeEigen(Eigen::MatrixXd X, QString filename); |
| 26 | void writeEigen(Eigen::VectorXd X, QString filename); | 26 | void writeEigen(Eigen::VectorXd X, QString filename); |
| 27 | +void writeEigen(Eigen::VectorXf X, QString filename); | ||
| 27 | void printEigen(Eigen::MatrixXd X); | 28 | void printEigen(Eigen::MatrixXd X); |
| 28 | 29 | ||
| 29 | template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols> | 30 | template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols> |
openbr/core/opencvutils.cpp
| @@ -300,6 +300,30 @@ QList<QRectF> OpenCVUtils::fromRects(const QList<Rect> &cvRects) | @@ -300,6 +300,30 @@ QList<QRectF> OpenCVUtils::fromRects(const QList<Rect> &cvRects) | ||
| 300 | return qRects; | 300 | return qRects; |
| 301 | } | 301 | } |
| 302 | 302 | ||
| 303 | +float OpenCVUtils::overlap(const Rect &rect1, const Rect &rect2) { | ||
| 304 | + float left = max(rect1.x, rect2.x); | ||
| 305 | + float top = max(rect1.y, rect2.y); | ||
| 306 | + float right = min(rect1.x + rect1.width, rect2.x + rect2.width); | ||
| 307 | + float bottom = min(rect1.y + rect1.height, rect2.y + rect2.height); | ||
| 308 | + | ||
| 309 | + float overlap = (right - left + 1) * (top - bottom + 1) / max(rect1.width * rect1.height, rect2.width * rect2.height); | ||
| 310 | + if (overlap < 0) | ||
| 311 | + return 0; | ||
| 312 | + return overlap; | ||
| 313 | +} | ||
| 314 | + | ||
| 315 | +float OpenCVUtils::overlap(const QRectF &rect1, const QRectF &rect2) { | ||
| 316 | + float left = max(rect1.x(), rect2.x()); | ||
| 317 | + float top = max(rect1.y(), rect2.y()); | ||
| 318 | + float right = min(rect1.x() + rect1.width(), rect2.x() + rect2.width()); | ||
| 319 | + float bottom = min(rect1.y() + rect1.height(), rect2.y() + rect2.height()); | ||
| 320 | + | ||
| 321 | + float overlap = (right - left + 1) * (top - bottom + 1) / max(rect1.width() * rect1.height(), rect2.width() * rect2.height()); | ||
| 322 | + if (overlap < 0) | ||
| 323 | + return 0; | ||
| 324 | + return overlap; | ||
| 325 | +} | ||
| 326 | + | ||
| 303 | bool OpenCVUtils::overlaps(const QList<Rect> &posRects, const Rect &negRect, double overlap) | 327 | bool OpenCVUtils::overlaps(const QList<Rect> &posRects, const Rect &negRect, double overlap) |
| 304 | { | 328 | { |
| 305 | foreach (const Rect &posRect, posRects) { | 329 | foreach (const Rect &posRect, posRects) { |
openbr/core/opencvutils.h
| @@ -88,6 +88,8 @@ namespace OpenCVUtils | @@ -88,6 +88,8 @@ namespace OpenCVUtils | ||
| 88 | QList<cv::Rect> toRects(const QList<QRectF> &qRects); | 88 | QList<cv::Rect> toRects(const QList<QRectF> &qRects); |
| 89 | QList<QRectF> fromRects(const QList<cv::Rect> &cvRects); | 89 | QList<QRectF> fromRects(const QList<cv::Rect> &cvRects); |
| 90 | bool overlaps(const QList<cv::Rect> &posRects, const cv::Rect &negRect, double overlap); | 90 | bool overlaps(const QList<cv::Rect> &posRects, const cv::Rect &negRect, double overlap); |
| 91 | + float overlap(const cv::Rect &rect1, const cv::Rect &rect2); | ||
| 92 | + float overlap(const QRectF &rect1, const QRectF &rect2); | ||
| 91 | 93 | ||
| 92 | int getFourcc(); | 94 | int getFourcc(); |
| 93 | } | 95 | } |
openbr/plugins/template.cpp
| @@ -70,6 +70,45 @@ class RemoveMetadataTransform : public UntrainableTransform | @@ -70,6 +70,45 @@ class RemoveMetadataTransform : public UntrainableTransform | ||
| 70 | }; | 70 | }; |
| 71 | BR_REGISTER(Transform, RemoveMetadataTransform) | 71 | BR_REGISTER(Transform, RemoveMetadataTransform) |
| 72 | 72 | ||
| 73 | +/*! | ||
| 74 | + * \ingroup transforms | ||
| 75 | + * \brief Retains only landmarks/points at the provided indices | ||
| 76 | + * \author Brendan Klare \cite bklare | ||
| 77 | + */ | ||
| 78 | +class SelectPointsTransform : public UntrainableTransform | ||
| 79 | +{ | ||
| 80 | + Q_OBJECT | ||
| 81 | + Q_PROPERTY(QList<int> indices READ get_indices WRITE set_indices RESET reset_indices STORED false) | ||
| 82 | + BR_PROPERTY(QList<int>, indices, QList<int>()) | ||
| 83 | + | ||
| 84 | + void project(const Template &src, Template &dst) const | ||
| 85 | + { | ||
| 86 | + dst = src; | ||
| 87 | + QList<QPointF> origPoints = src.file.points(); | ||
| 88 | + dst.file.clearPoints(); | ||
| 89 | + for (int i = 0; i < indices.size(); i++) | ||
| 90 | + dst.file.appendPoint(origPoints[indices[i]]); | ||
| 91 | + } | ||
| 92 | +}; | ||
| 93 | + | ||
| 94 | +BR_REGISTER(Transform, SelectPointsTransform) | ||
| 95 | + | ||
| 96 | +/*! | ||
| 97 | + * \ingroup transforms | ||
| 98 | + * \brief Does nothing. | ||
| 99 | + */ | ||
| 100 | +class NoneTransform : public UntrainableMetaTransform | ||
| 101 | +{ | ||
| 102 | + Q_OBJECT | ||
| 103 | + | ||
| 104 | + void project(const Template &src, Template &dst) const | ||
| 105 | + { | ||
| 106 | + dst = src; | ||
| 107 | + } | ||
| 108 | +}; | ||
| 109 | + | ||
| 110 | +BR_REGISTER(Transform, NoneTransform) | ||
| 111 | + | ||
| 73 | } // namespace br | 112 | } // namespace br |
| 74 | 113 | ||
| 75 | #include "template.moc" | 114 | #include "template.moc" |