From 69acf43681beb10f64b34708409f79aaba59ac1a Mon Sep 17 00:00:00 2001 From: Antoine Pazat <antoine.pazat@gmail.com> Date: Mon, 18 Jul 2016 09:18:57 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20aper=C3=A7u=20seuillage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Operations/ThresholdDialog.cpp | 82 +++++++++++++++++++++++++----- app/Operations/ThresholdDialog.h | 7 ++- 2 files changed, 76 insertions(+), 13 deletions(-) diff --git a/app/Operations/ThresholdDialog.cpp b/app/Operations/ThresholdDialog.cpp index 3c8909b..c30b9f0 100644 --- a/app/Operations/ThresholdDialog.cpp +++ b/app/Operations/ThresholdDialog.cpp @@ -16,6 +16,8 @@ #include "Algorithm/Otsu.h" #include <qwt_plot.h> +#include "../../lib/detiq-t/GenericInterface/Widgets/ImageWidgets/ThumbnailView.h" + using namespace imagein; using namespace imagein::algorithm; using namespace genericinterface; @@ -32,10 +34,13 @@ void ThresholdDialog::marker2Moved(const QPointF& point) { void ThresholdDialog::spinbox1Changed(int i) { _marker1->setXValue(i); + updatePreview(); + } void ThresholdDialog::spinbox2Changed(int i) { _marker2->setXValue(i); + updatePreview(); } void ThresholdDialog::doubleThreshold(bool activate) { @@ -53,23 +58,52 @@ void ThresholdDialog::otsu() { int threshold = Otsu_t<GrayscaleImage::depth_t>::computeThreshold(_image); _marker1->setXValue(threshold); _spinbox1->setValue(threshold); + +} + +void ThresholdDialog::updatePreview(){ + + if(_previewBox->isChecked()){ + Binarization_t<GrayscaleImage::depth_t>* algo; + if(doubleThreshold()) { + algo = new Binarization_t<GrayscaleImage::depth_t>(_spinbox1->value(), _spinbox2->value(), !_blackButton->isChecked()); + } + else { + algo = new Binarization_t<GrayscaleImage::depth_t>(_spinbox1->value()); + } + + _preview->setImage(algo->operator()(_image)); + _preview->repaint(); + } + + + } + +void ThresholdDialog::showPreview(bool activated){ + if(activated){ + // updatePreview(); + }else{ + _preview->setImage(_image); + _preview->repaint(); + } } ThresholdDialog::ThresholdDialog(const GrayscaleImage* image, bool converted) : _image(image){ this->setWindowTitle(tr("ThresholdOp")); this->setMinimumWidth(160); - QVBoxLayout* layout = new QVBoxLayout(); + + QGridLayout * layout = new QGridLayout(); this->setLayout(layout); + QVBoxLayout* Vboxlayout = new QVBoxLayout(); if(converted) { - layout->addWidget(new QLabel(tr("<font color=red><i>Information : The input image has been converted to grayscale.</i></font>"))); + Vboxlayout->addWidget(new QLabel(tr("<font color=red><i>Information : The input image has been converted to grayscale.</i></font>"))); } - QGroupBox* threshGroup = new QGroupBox(tr("Threshold"), this); QHBoxLayout* threshLayout = new QHBoxLayout(threshGroup); _doubleBox = new QCheckBox(tr("Double threshold")); threshLayout->addWidget(_doubleBox); - layout->addWidget(threshGroup); + Vboxlayout->addWidget(threshGroup); QHBoxLayout* box1layout = new QHBoxLayout(); _spin1label = new QLabel(tr("Threshold : ")); @@ -80,7 +114,7 @@ ThresholdDialog::ThresholdDialog(const GrayscaleImage* image, bool converted) : box1layout->addWidget(_spin1label); box1layout->addWidget(_spinbox1); box1layout->addWidget(otsuButton); - layout->addLayout(box1layout); + Vboxlayout->addLayout(box1layout); QHBoxLayout* box2layout = new QHBoxLayout(); QLabel* spin2label = new QLabel(tr("Threshold #2 : ")); @@ -91,7 +125,7 @@ ThresholdDialog::ThresholdDialog(const GrayscaleImage* image, bool converted) : _spinbox2->setVisible(false); box2layout->addWidget(spin2label); box2layout->addWidget(_spinbox2); - layout->addLayout(box2layout); + Vboxlayout->addLayout(box2layout); QHBoxLayout* radiolayout = new QHBoxLayout(); QLabel* radioLabel = new QLabel(tr("Color between thresholds :")); @@ -101,7 +135,7 @@ ThresholdDialog::ThresholdDialog(const GrayscaleImage* image, bool converted) : radiolayout->addWidget(whiteButton); radiolayout->addWidget(_blackButton); whiteButton->setChecked(true); - layout->addLayout(radiolayout); + Vboxlayout->addLayout(radiolayout); radioLabel->setVisible(false); whiteButton->setVisible(false); _blackButton->setVisible(false); @@ -110,6 +144,7 @@ ThresholdDialog::ThresholdDialog(const GrayscaleImage* image, bool converted) : GenericHistogramView* histo = new GenericHistogramView(image, rect); QwtPlot* plot = histo->getGraphicalHistogram(); + _marker1 = new QwtPlotMarker(); _marker1->setLineStyle(QwtPlotMarker::VLine); _marker1->setLinePen(QPen(Qt::black)); @@ -122,14 +157,27 @@ ThresholdDialog::ThresholdDialog(const GrayscaleImage* image, bool converted) : _marker2->setXValue(255); _marker2->attach(plot); _marker2->hide(); - - layout->addWidget(plot); - - layout->setSizeConstraint(QLayout::SetFixedSize); + + _preview = new ImageWidget(this, _image); + _preview->setFixedSize(256*_preview->pixmap().width()/_preview->pixmap().height(), 256); + layout->setColumnMinimumWidth(0,256); + layout->addWidget(_preview,0,0,0,0,Qt::AlignTop); + Vboxlayout->addWidget(plot); + layout->setRowMinimumHeight(0,256); + layout->setColumnMinimumWidth(1,20); + layout->addLayout(Vboxlayout,0,2,0,2,Qt::AlignLeft); + _previewBox = new QCheckBox(tr("Aperçu")); + _previewBox->setChecked(true); + updatePreview(); + layout->addWidget(_previewBox,1,0,1,0,Qt::AlignTop); + + + //layout->setSizeConstraint(QLayout::SetFixedSize); QPushButton *okButton = new QPushButton(tr("Validate"), this); okButton->setDefault(true); - layout->addWidget(okButton); + Vboxlayout->addWidget(okButton); + connect(okButton, SIGNAL(clicked()), this, SLOT(accept())); connect(histo, SIGNAL(leftMoved(const QPointF&)), this, SLOT(marker1Moved(const QPointF&))); connect(histo, SIGNAL(rightMoved(const QPointF&)), this, SLOT(marker2Moved(const QPointF&))); @@ -137,6 +185,7 @@ ThresholdDialog::ThresholdDialog(const GrayscaleImage* image, bool converted) : connect(_spinbox1, SIGNAL(valueChanged(int)), this, SLOT(spinbox1Changed(int))); connect(_spinbox2, SIGNAL(valueChanged(int)), this, SLOT(spinbox2Changed(int))); + connect(_doubleBox, SIGNAL(toggled(bool)), _spinbox2, SLOT(setVisible(bool))); connect(_doubleBox, SIGNAL(toggled(bool)), spin2label, SLOT(setVisible(bool))); connect(_doubleBox, SIGNAL(toggled(bool)), radioLabel, SLOT(setVisible(bool))); @@ -144,7 +193,16 @@ ThresholdDialog::ThresholdDialog(const GrayscaleImage* image, bool converted) : connect(_doubleBox, SIGNAL(toggled(bool)), _blackButton, SLOT(setVisible(bool))); connect(_doubleBox, SIGNAL(toggled(bool)), otsuButton, SLOT(setHidden(bool))); connect(_doubleBox, SIGNAL(toggled(bool)), this, SLOT(doubleThreshold(bool))); + connect(_previewBox, SIGNAL(toggled(bool)), this, SLOT(showPreview(bool))); + connect(_previewBox, SIGNAL(toggled(bool)), this, SLOT(updatePreview())); connect(otsuButton, SIGNAL(pressed()), this, SLOT(otsu())); + + connect(_doubleBox, SIGNAL(toggled(bool)), this, SLOT(updatePreview())); + connect(_blackButton, SIGNAL(toggled(bool)), this, SLOT(updatePreview())); +// connect (this, SIGNAL(spinbox1Changed(int)), this, SLOT(updatePreview(bool))); +// connect (this, SIGNAL(spinbox2Changed(int)), this, SLOT(updatePreview(bool))); + + } diff --git a/app/Operations/ThresholdDialog.h b/app/Operations/ThresholdDialog.h index de46a26..b064150 100644 --- a/app/Operations/ThresholdDialog.h +++ b/app/Operations/ThresholdDialog.h @@ -30,6 +30,8 @@ #include <QCheckBox> #include <QRadioButton> +#include "../../lib/detiq-t/GenericInterface/Widgets/ImageWidgets/ImageWidget.h" + #include "Operation.h" #include "Image.h" #include "GrayscaleImage.h" @@ -51,6 +53,8 @@ class ThresholdDialog : public QDialog { void spinbox2Changed(int); void doubleThreshold(bool); void otsu(); + void updatePreview(); + void showPreview(bool); private: QwtPlotMarker *_marker1, *_marker2; @@ -58,7 +62,8 @@ class ThresholdDialog : public QDialog { QLabel* _spin1label; const imagein::GrayscaleImage* _image; QRadioButton* _blackButton; - QCheckBox* _doubleBox; + QCheckBox *_doubleBox, *_previewBox; + ImageWidget* _preview; }; #endif //!THRESHOLDDIALOG_H -- GitLab