Commit 0f9a27402116b8f501571aa2fb60a6c75673949a
1 parent
160baa2e
wider crop and drop normalized error plot from plotLandmarking
Showing
5 changed files
with
14 additions
and
6 deletions
openbr/core/eval.cpp
| @@ -906,7 +906,7 @@ float EvalLandmarking(const QString &predictedGallery, const QString &truthGalle | @@ -906,7 +906,7 @@ float EvalLandmarking(const QString &predictedGallery, const QString &truthGalle | ||
| 906 | // Get best and worst performing examples | 906 | // Get best and worst performing examples |
| 907 | QList< QPair<float,int> > exampleIndices = Common::Sort(imageErrors,true); | 907 | QList< QPair<float,int> > exampleIndices = Common::Sort(imageErrors,true); |
| 908 | 908 | ||
| 909 | - QScopedPointer<Transform> t(Transform::make("Open+Draw(rects=false)+CropFromLandmarks+Resize(128,method=Area)",NULL)); | 909 | + QScopedPointer<Transform> t(Transform::make("Open+CropFromLandmarks(paddingHorizontal=.3,paddingVertical=.3,shiftPoints=true)+Resize(128,method=Area)+Draw(rects=false,pointRadius=2)",NULL)); |
| 910 | 910 | ||
| 911 | for (int i=0; i<totalExamples; i++) { | 911 | for (int i=0; i<totalExamples; i++) { |
| 912 | QString filePath = "landmarking_examples_truth/"+truth[exampleIndices[i].second].file.fileName(); | 912 | QString filePath = "landmarking_examples_truth/"+truth[exampleIndices[i].second].file.fileName(); |
openbr/core/plot.cpp
| @@ -330,9 +330,6 @@ bool PlotLandmarking(const QStringList &files, const File &destination, bool sho | @@ -330,9 +330,6 @@ bool PlotLandmarking(const QStringList &files, const File &destination, bool sho | ||
| 330 | p.file.write(qPrintable(QString("ggplot(Box, aes(factor(X), Y%1%2))").arg(p.major.size > 1 ? QString(", colour=%1").arg(p.major.header) : QString(), p.minor.size > 1 ? QString(", linetype=%1").arg(p.minor.header) : QString()) + | 330 | p.file.write(qPrintable(QString("ggplot(Box, aes(factor(X), Y%1%2))").arg(p.major.size > 1 ? QString(", colour=%1").arg(p.major.header) : QString(), p.minor.size > 1 ? QString(", linetype=%1").arg(p.minor.header) : QString()) + |
| 331 | QString("+ annotation_logticks(sides=\"l\") + geom_boxplot(alpha=0.5) + geom_jitter(size=1, alpha=0.5) + scale_x_discrete(\"Landmark\") + scale_y_log10(\"Normalized Error\", breaks=c(0.001,0.01,0.1,1,10)) + theme_minimal()\n\n"))); | 331 | QString("+ annotation_logticks(sides=\"l\") + geom_boxplot(alpha=0.5) + geom_jitter(size=1, alpha=0.5) + scale_x_discrete(\"Landmark\") + scale_y_log10(\"Normalized Error\", breaks=c(0.001,0.01,0.1,1,10)) + theme_minimal()\n\n"))); |
| 332 | 332 | ||
| 333 | - p.file.write(qPrintable(QString("ggplot(Box, aes(factor(X), Y%1%2))").arg(p.major.size > 1 ? QString(", colour=%1").arg(p.major.header) : QString(), p.minor.size > 1 ? QString(", linetype=%1").arg(p.minor.header) : QString()) + | ||
| 334 | - QString("+ annotation_logticks(sides=\"l\") + geom_violin(alpha=0.5) + scale_x_discrete(\"Landmark\") + scale_y_log10(\"Normalized Error\", breaks=c(0.001,0.01,0.1,1,10))\n\n"))); | ||
| 335 | - | ||
| 336 | return p.finalize(show); | 333 | return p.finalize(show); |
| 337 | } | 334 | } |
| 338 | 335 |
openbr/plugins/gui/draw.cpp
| @@ -38,6 +38,7 @@ class DrawTransform : public UntrainableTransform | @@ -38,6 +38,7 @@ class DrawTransform : public UntrainableTransform | ||
| 38 | Q_PROPERTY(bool rects READ get_rects WRITE set_rects RESET reset_rects STORED false) | 38 | Q_PROPERTY(bool rects READ get_rects WRITE set_rects RESET reset_rects STORED false) |
| 39 | Q_PROPERTY(bool inPlace READ get_inPlace WRITE set_inPlace RESET reset_inPlace STORED false) | 39 | Q_PROPERTY(bool inPlace READ get_inPlace WRITE set_inPlace RESET reset_inPlace STORED false) |
| 40 | Q_PROPERTY(int lineThickness READ get_lineThickness WRITE set_lineThickness RESET reset_lineThickness STORED false) | 40 | Q_PROPERTY(int lineThickness READ get_lineThickness WRITE set_lineThickness RESET reset_lineThickness STORED false) |
| 41 | + Q_PROPERTY(int pointRadius READ get_pointRadius WRITE set_pointRadius RESET reset_pointRadius STORED false) | ||
| 41 | Q_PROPERTY(bool named READ get_named WRITE set_named RESET reset_named STORED false) | 42 | Q_PROPERTY(bool named READ get_named WRITE set_named RESET reset_named STORED false) |
| 42 | Q_PROPERTY(bool location READ get_location WRITE set_location RESET reset_location STORED false) | 43 | Q_PROPERTY(bool location READ get_location WRITE set_location RESET reset_location STORED false) |
| 43 | BR_PROPERTY(bool, verbose, false) | 44 | BR_PROPERTY(bool, verbose, false) |
| @@ -45,6 +46,7 @@ class DrawTransform : public UntrainableTransform | @@ -45,6 +46,7 @@ class DrawTransform : public UntrainableTransform | ||
| 45 | BR_PROPERTY(bool, rects, true) | 46 | BR_PROPERTY(bool, rects, true) |
| 46 | BR_PROPERTY(bool, inPlace, false) | 47 | BR_PROPERTY(bool, inPlace, false) |
| 47 | BR_PROPERTY(int, lineThickness, 1) | 48 | BR_PROPERTY(int, lineThickness, 1) |
| 49 | + BR_PROPERTY(int, pointRadius, 3) | ||
| 48 | BR_PROPERTY(bool, named, true) | 50 | BR_PROPERTY(bool, named, true) |
| 49 | BR_PROPERTY(bool, location, true) | 51 | BR_PROPERTY(bool, location, true) |
| 50 | 52 | ||
| @@ -58,7 +60,7 @@ class DrawTransform : public UntrainableTransform | @@ -58,7 +60,7 @@ class DrawTransform : public UntrainableTransform | ||
| 58 | const QList<Point2f> pointsList = (named) ? OpenCVUtils::toPoints(src.file.points()+src.file.namedPoints()) : OpenCVUtils::toPoints(src.file.points()); | 60 | const QList<Point2f> pointsList = (named) ? OpenCVUtils::toPoints(src.file.points()+src.file.namedPoints()) : OpenCVUtils::toPoints(src.file.points()); |
| 59 | for (int i=0; i<pointsList.size(); i++) { | 61 | for (int i=0; i<pointsList.size(); i++) { |
| 60 | const Point2f &point = pointsList[i]; | 62 | const Point2f &point = pointsList[i]; |
| 61 | - circle(dst, point, 3, color, -1); | 63 | + circle(dst, point, pointRadius, color, -1); |
| 62 | QString label = (location) ? QString("%1,(%2,%3)").arg(QString::number(i),QString::number(point.x),QString::number(point.y)) : QString("%1").arg(QString::number(i)); | 64 | QString label = (location) ? QString("%1,(%2,%3)").arg(QString::number(i),QString::number(point.x),QString::number(point.y)) : QString("%1").arg(QString::number(i)); |
| 63 | if (verbose) putText(dst, label.toStdString(), point, FONT_HERSHEY_SIMPLEX, 0.5, verboseColor, 1); | 65 | if (verbose) putText(dst, label.toStdString(), point, FONT_HERSHEY_SIMPLEX, 0.5, verboseColor, 1); |
| 64 | } | 66 | } |
openbr/plugins/imgproc/cropfromlandmarks.cpp
| @@ -19,9 +19,11 @@ class CropFromLandmarksTransform : public UntrainableTransform | @@ -19,9 +19,11 @@ class CropFromLandmarksTransform : public UntrainableTransform | ||
| 19 | Q_PROPERTY(QList<int> indices READ get_indices WRITE set_indices RESET reset_indices STORED false) | 19 | Q_PROPERTY(QList<int> indices READ get_indices WRITE set_indices RESET reset_indices STORED false) |
| 20 | Q_PROPERTY(float paddingHorizontal READ get_paddingHorizontal WRITE set_paddingHorizontal RESET reset_paddingHorizontal STORED false) | 20 | Q_PROPERTY(float paddingHorizontal READ get_paddingHorizontal WRITE set_paddingHorizontal RESET reset_paddingHorizontal STORED false) |
| 21 | Q_PROPERTY(float paddingVertical READ get_paddingVertical WRITE set_paddingVertical RESET reset_paddingVertical STORED false) | 21 | Q_PROPERTY(float paddingVertical READ get_paddingVertical WRITE set_paddingVertical RESET reset_paddingVertical STORED false) |
| 22 | + Q_PROPERTY(bool shiftPoints READ get_shiftPoints WRITE set_shiftPoints RESET reset_shiftPoints STORED false) | ||
| 22 | BR_PROPERTY(QList<int>, indices, QList<int>()) | 23 | BR_PROPERTY(QList<int>, indices, QList<int>()) |
| 23 | BR_PROPERTY(float, paddingHorizontal, .1) | 24 | BR_PROPERTY(float, paddingHorizontal, .1) |
| 24 | BR_PROPERTY(float, paddingVertical, .1) | 25 | BR_PROPERTY(float, paddingVertical, .1) |
| 26 | + BR_PROPERTY(bool, shiftPoints, false) | ||
| 25 | 27 | ||
| 26 | void project(const Template &src, Template &dst) const | 28 | void project(const Template &src, Template &dst) const |
| 27 | { | 29 | { |
| @@ -55,6 +57,13 @@ class CropFromLandmarksTransform : public UntrainableTransform | @@ -55,6 +57,13 @@ class CropFromLandmarksTransform : public UntrainableTransform | ||
| 55 | if (rect.x() + rect.width() > src.m().cols) rect.setWidth(src.m().cols - rect.x()); | 57 | if (rect.x() + rect.width() > src.m().cols) rect.setWidth(src.m().cols - rect.x()); |
| 56 | if (rect.y() + rect.width() > src.m().rows) rect.setHeight(src.m().rows - rect.y()); | 58 | if (rect.y() + rect.width() > src.m().rows) rect.setHeight(src.m().rows - rect.y()); |
| 57 | 59 | ||
| 60 | + if (shiftPoints) { | ||
| 61 | + QList<QPointF> points = src.file.points(); | ||
| 62 | + for (int i=0; i<points.size(); i++) | ||
| 63 | + points[i] -= rect.topLeft(); | ||
| 64 | + dst.file.setPoints(points); | ||
| 65 | + } | ||
| 66 | + | ||
| 58 | dst = Mat(src, OpenCVUtils::toRect(rect)); | 67 | dst = Mat(src, OpenCVUtils::toRect(rect)); |
| 59 | } | 68 | } |
| 60 | }; | 69 | }; |
openbr/plugins/imgproc/resize.cpp
| @@ -65,7 +65,7 @@ private: | @@ -65,7 +65,7 @@ private: | ||
| 65 | if (!preserveAspect) { | 65 | if (!preserveAspect) { |
| 66 | resize(src, dst, Size((columns == -1) ? src.m().cols*rows/src.m().rows : columns, rows), 0, 0, method); | 66 | resize(src, dst, Size((columns == -1) ? src.m().cols*rows/src.m().rows : columns, rows), 0, 0, method); |
| 67 | const float rowScaleFactor = (float)rows/src.m().rows; | 67 | const float rowScaleFactor = (float)rows/src.m().rows; |
| 68 | - const float colScaleFactor = (float)columns/src.m().cols; | 68 | + const float colScaleFactor = (columns == -1) ? rowScaleFactor : (float)columns/src.m().cols; |
| 69 | QList<QPointF> points = src.file.points(); | 69 | QList<QPointF> points = src.file.points(); |
| 70 | for (int i=0; i<points.size(); i++) | 70 | for (int i=0; i<points.size(); i++) |
| 71 | points[i] = QPointF(points[i].x() * colScaleFactor,points[i].y() * rowScaleFactor); | 71 | points[i] = QPointF(points[i].x() * colScaleFactor,points[i].y() * rowScaleFactor); |