diff --git a/confusionmatrix.cpp b/confusionmatrix.cpp index 1e34cd2..cca7ac6 100644 --- a/confusionmatrix.cpp +++ b/confusionmatrix.cpp @@ -32,7 +32,7 @@ QColor getColor(double value, double r1, double g1, double b1) return QColor(r, g, b); } -ConfusionMatrix::ConfusionMatrix(const std::vector &actual, const std::vector &predicted, QWidget *parent) : +ConfusionMatrix::ConfusionMatrix(const std::vector &actual, const std::vector &predicted, QWidget *parent, ccMainAppInterface *app) : QWidget(parent), ui(new Ui::ConfusionMatrix) { @@ -41,11 +41,13 @@ ConfusionMatrix::ConfusionMatrix(const std::vector &actual, const st compute(actual, predicted); - this->show(); + if (app) + { + this->show(); + } this->ui->tableWidget->resizeColumnsToContents(); this->ui->tableWidget->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); QSize tableSize = this->ui->tableWidget->sizeHint(); - QSize labelSize = this->ui->label->sizeHint(); QSize widgetSize = QSize(tableSize.width() + 30, tableSize.height() + 50); this->setMinimumSize(widgetSize); } diff --git a/confusionmatrix.h b/confusionmatrix.h index 25bfc42..1675bea 100644 --- a/confusionmatrix.h +++ b/confusionmatrix.h @@ -5,6 +5,8 @@ #include "CCTypes.h" +#include + #include namespace Ui { @@ -23,7 +25,10 @@ public: F1_SCORE = 2 }; - explicit ConfusionMatrix(const std::vector& actual, const std::vector& predicted, QWidget *parent = nullptr); + explicit ConfusionMatrix( const std::vector& actual, + const std::vector& predicted, + QWidget *parent = nullptr, + ccMainAppInterface* app = nullptr); ~ConfusionMatrix() override; void computePrecisionRecallF1Score(cv::Mat& matrix, cv::Mat& precisionRecallF1Score, cv::Mat &vec_TP_FN); diff --git a/q3DMASC.cpp b/q3DMASC.cpp index 0931cc1..18391de 100644 --- a/q3DMASC.cpp +++ b/q3DMASC.cpp @@ -653,7 +653,8 @@ void q3DMASCPlugin::doTrainAction() trainDlg, testCloud ? nullptr : testSubset.data(), testCloud ? "Classification_prediction" : "", // outputSFName, empty is the test cloud is not a separate cloud - m_app->getMainWindow())) + m_app->getMainWindow(), + m_app)) { m_app->dispToConsole(errorMessage, ccMainAppInterface::ERR_CONSOLE_MESSAGE); generatedScalarFields.releaseSFs(false); diff --git a/q3DMASCClassifier.cpp b/q3DMASCClassifier.cpp index 0fa1c6f..60aa91d 100644 --- a/q3DMASCClassifier.cpp +++ b/q3DMASCClassifier.cpp @@ -110,7 +110,8 @@ static IScalarFieldWrapper::Shared GetSource(const Feature::Source& fs, const cc bool Classifier::classify( const Feature::Source::Set& featureSources, ccPointCloud* cloud, QString& errorMessage, - QWidget* parentWidget/*=nullptr*/ + QWidget* parentWidget/*=nullptr*/, + ccMainAppInterface* app/*nullptr*/ ) { if (!cloud) @@ -278,7 +279,12 @@ bool Classifier::classify( const Feature::Source::Set& featureSources, } if (classifSFBackup != nullptr) - ConfusionMatrix *confusionMatrix = new ConfusionMatrix(*classifSFBackup, *classificationSF); + { + if (app) + { + ConfusionMatrix *confusionMatrix = new ConfusionMatrix(*classifSFBackup, *classificationSF); + } + } return success; } @@ -290,7 +296,8 @@ bool Classifier::evaluate(const Feature::Source::Set& featureSources, Train3DMASCDialog& train3DMASCDialog, CCCoreLib::ReferenceCloud* testSubset/*=nullptr=*/, QString outputSFName/*=QString()*/, - QWidget* parentWidget/*=nullptr*/) + QWidget* parentWidget/*=nullptr*/, + ccMainAppInterface *app/*=nullptr*/) { if (!testCloud) { @@ -468,7 +475,7 @@ bool Classifier::evaluate(const Feature::Source::Set& featureSources, metrics.ratio = static_cast(metrics.goodGuess) / metrics.sampleCount; } - train3DMASCDialog.addConfusionMatrixAndSaveTraces(new ConfusionMatrix(actualClass, predictectedClass)); + train3DMASCDialog.addConfusionMatrixAndSaveTraces(new ConfusionMatrix(actualClass, predictectedClass, nullptr, app)); //show the Classification_prediction field by default if (outSF) diff --git a/q3DMASCClassifier.h b/q3DMASCClassifier.h index c24611a..f615c56 100644 --- a/q3DMASCClassifier.h +++ b/q3DMASCClassifier.h @@ -70,13 +70,15 @@ namespace masc Train3DMASCDialog& train3DMASCDialog, CCCoreLib::ReferenceCloud* testSubset = nullptr, QString outputSFName = QString(), - QWidget* parentWidget = nullptr); + QWidget* parentWidget = nullptr, + ccMainAppInterface* app = nullptr); //! Applies the classifier bool classify( const Feature::Source::Set& featureSources, ccPointCloud* cloud, QString& errorMessage, - QWidget* parentWidget = nullptr); + QWidget* parentWidget = nullptr, + ccMainAppInterface* app = nullptr); //! Returns whether the classifier is valid or not bool isValid() const;