27 #include "../../../common/StringUtils.h"
28 #include "../../../dataaccess/dataset/DataSet.h"
29 #include "../../../dataaccess/utils/Utils.h"
30 #include "../../../raster/Raster.h"
34 #include "ui_ContrastWizardPageForm.h"
37 #include <QGridLayout>
38 #include <QMessageBox>
41 #include <boost/lexical_cast.hpp>
47 : QWizardPage(parent),
48 m_ui(new Ui::ContrastWizardPageForm),
57 QGridLayout* displayLayout =
new QGridLayout(
m_ui->m_displayWidget);
62 displayLayout->setContentsMargins(0,0,0,0);
65 QGridLayout* histogramLayout =
new QGridLayout(
m_ui->m_histWidget);
68 histogramLayout->setContentsMargins(0,0,0,0);
72 connect(
m_ui->m_bandTableWidget, SIGNAL(cellClicked(
int,
int)),
this, SLOT(
onCellClicked(
int,
int)));
80 this->setTitle(tr(
"Contrast"));
81 this->setSubTitle(tr(
"Select the type of contrast and set their specific parameters."));
92 int nBands = m_ui->m_bandTableWidget->rowCount();
94 for(
int i = 0; i < nBands; ++i)
96 QTableWidgetItem* item = m_ui->m_bandTableWidget->item(i, 0);
98 if(item->checkState() == Qt::Checked)
111 std::list<te::map::AbstractLayerPtr> list;
113 list.push_back(m_layer);
115 m_navigator->set(m_layer,
true);
128 int index = m_ui->m_contrastTypeComboBox->currentIndex();
129 int contrastType = m_ui->m_contrastTypeComboBox->itemData(index).toInt();
130 int nBands = m_ui->m_bandTableWidget->rowCount();
138 for(
int i = 0; i < nBands; ++i)
140 QTableWidgetItem* item = m_ui->m_bandTableWidget->item(i, 0);
142 if(item->checkState() == Qt::Checked)
144 QString valueMin = m_ui->m_bandTableWidget->item(i, 1)->text();
145 algoInputParams.
m_lCMinInput.push_back(valueMin.toDouble());
147 QString valueMax = m_ui->m_bandTableWidget->item(i, 2)->text();
148 algoInputParams.
m_lCMaxInput.push_back(valueMax.toDouble());
156 for(
int i = 0; i < nBands; ++i)
158 QTableWidgetItem* item = m_ui->m_bandTableWidget->item(i, 0);
160 if(item->checkState() == Qt::Checked)
162 QString valueMax = m_ui->m_bandTableWidget->item(i, 1)->text();
163 algoInputParams.
m_hECMaxInput.push_back(valueMax.toDouble());
171 for(
int i = 0; i < nBands; ++i)
173 QTableWidgetItem* item = m_ui->m_bandTableWidget->item(i, 0);
175 if(item->checkState() == Qt::Checked)
177 QString valueMean = m_ui->m_bandTableWidget->item(i, 1)->text();
180 QString valueStdDev = m_ui->m_bandTableWidget->item(i, 2)->text();
189 for(
int i = 0; i < nBands; ++i)
191 QTableWidgetItem* item = m_ui->m_bandTableWidget->item(i, 0);
193 if(item->checkState() == Qt::Checked)
195 QString valueMin = m_ui->m_bandTableWidget->item(i, 1)->text();
198 QString valueMax = m_ui->m_bandTableWidget->item(i, 2)->text();
207 for(
int i = 0; i < nBands; ++i)
209 QTableWidgetItem* item = m_ui->m_bandTableWidget->item(i, 0);
211 if(item->checkState() == Qt::Checked)
213 QString valueMin = m_ui->m_bandTableWidget->item(i, 1)->text();
216 QString valueMax = m_ui->m_bandTableWidget->item(i, 2)->text();
225 for(
int i = 0; i < nBands; ++i)
227 QTableWidgetItem* item = m_ui->m_bandTableWidget->item(i, 0);
229 if(item->checkState() == Qt::Checked)
231 QString valueMin = m_ui->m_bandTableWidget->item(i, 1)->text();
234 QString valueMax = m_ui->m_bandTableWidget->item(i, 2)->text();
244 for(
int i = 0; i < nBands; ++i)
246 QTableWidgetItem* item = m_ui->m_bandTableWidget->item(i, 0);
248 if(item->checkState() == Qt::Checked)
254 return algoInputParams;
259 QApplication::setOverrideCursor(Qt::WaitCursor);
271 std::map<std::string, std::string> rinfo;
272 rinfo[
"MEM_RASTER_NROWS"] = boost::lexical_cast<std::string>(inputRst->
getNumberOfRows());
273 rinfo[
"MEM_RASTER_NCOLS"] = boost::lexical_cast<std::string>(inputRst->
getNumberOfColumns());
274 rinfo[
"MEM_RASTER_DATATYPE"] = boost::lexical_cast<std::string>(inputRst->
getBandDataType(0));
275 rinfo[
"MEM_RASTER_NBANDS"] = boost::lexical_cast<std::string>(inputRst->
getNumberOfBands());
285 if(algorithmInstance.
initialize(algoInputParams))
287 if(algorithmInstance.
execute(algoOutputParams))
300 QMessageBox::warning(
this, tr(
"Warning"), tr(
"Constrast error."));
303 QApplication::restoreOverrideCursor();
308 m_ui->m_contrastTypeComboBox->clear();
321 assert(m_layer.get());
324 std::auto_ptr<te::da::DataSet> ds = m_layer->getData();
330 std::auto_ptr<te::rst::Raster> inputRst = ds->getRaster(rpos);
334 for(
unsigned int i = 0; i < inputRst->getNumberOfBands(); ++i)
336 m_ui->m_bandTableWidget->setRowCount(0);
339 for(
unsigned b = 0 ; b < inputRst->getNumberOfBands(); b++)
341 int newrow = m_ui->m_bandTableWidget->rowCount();
342 m_ui->m_bandTableWidget->insertRow(newrow);
344 QString bName(tr(
"Band "));
345 bName.append(QString::number(b));
347 QTableWidgetItem* itemBand =
new QTableWidgetItem(bName);
348 itemBand->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
349 itemBand->setCheckState(Qt::Checked);
350 m_ui->m_bandTableWidget->setItem(newrow, 0, itemBand);
357 m_ui->m_bandTableWidget->resizeColumnsToContents();
358 #if (QT_VERSION >= 0x050000)
359 m_ui->m_bandTableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
361 m_ui->m_bandTableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
364 onContrastTypeComboBoxActivated(m_ui->m_contrastTypeComboBox->currentIndex());
369 int contrastType = m_ui->m_contrastTypeComboBox->itemData(index).toInt();
378 if(m_ui->m_bandTableWidget->horizontalHeaderItem(1) && m_ui->m_bandTableWidget->horizontalHeaderItem(1)->text() == tr(
"Minimum") &&
379 m_ui->m_bandTableWidget->horizontalHeaderItem(2) && m_ui->m_bandTableWidget->horizontalHeaderItem(2)->text() == tr(
"Maximum"))
385 list.append(tr(
"Band"));
386 list.append(tr(
"Minimum"));
387 list.append(tr(
"Maximum"));
389 m_ui->m_bandTableWidget->setColumnCount(3);
390 m_ui->m_bandTableWidget->setHorizontalHeaderLabels(list);
392 int nBands = m_ui->m_bandTableWidget->rowCount();
394 for(
int i = 0; i < nBands; ++i)
396 QTableWidgetItem* itemMin =
new QTableWidgetItem(
"0");
397 itemMin->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable);
398 m_ui->m_bandTableWidget->setItem(i, 1, itemMin);
400 QTableWidgetItem* itemMax =
new QTableWidgetItem(
"255");
401 itemMax->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable);
402 m_ui->m_bandTableWidget->setItem(i, 2, itemMax);
406 m_histogramWidget->setMinimumValueEnabled(
true);
407 m_histogramWidget->setMaximumValueEnabled(
true);
409 m_histogramWidget->updateMinimumValueLabel(tr(
"Minimum"));
410 m_histogramWidget->updateMaximumValueLabel(tr(
"Maximum"));
412 m_histogramWidget->updateMinimumValueLine(0,
false);
413 m_histogramWidget->updateMaximumValueLine(255,
false);
415 m_ui->m_tipLabel->setText(tr(
"Use left button to set minimum value and right button to define maximum value over the histogram."));
420 list.append(tr(
"Band"));
421 list.append(tr(
"Maximum"));
423 m_ui->m_bandTableWidget->setColumnCount(2);
424 m_ui->m_bandTableWidget->setHorizontalHeaderLabels(list);
426 int nBands = m_ui->m_bandTableWidget->rowCount();
428 for(
int i = 0; i < nBands; ++i)
430 QTableWidgetItem* itemMax =
new QTableWidgetItem(
"255");
431 itemMax->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable);
432 m_ui->m_bandTableWidget->setItem(i, 1, itemMax);
435 m_histogramWidget->setMinimumValueEnabled(
true);
436 m_histogramWidget->setMaximumValueEnabled(
false);
438 m_histogramWidget->updateMinimumValueLabel(tr(
"Maximum"));
440 m_histogramWidget->updateMinimumValueLine(255,
false);
442 m_ui->m_tipLabel->setText(tr(
"Use left button to set maximum value over the histogram."));
447 list.append(tr(
"Band"));
448 list.append(tr(
"Mean"));
449 list.append(tr(
"Std Dev"));
451 m_ui->m_bandTableWidget->setColumnCount(3);
452 m_ui->m_bandTableWidget->setHorizontalHeaderLabels(list);
454 int nBands = m_ui->m_bandTableWidget->rowCount();
456 for(
int i = 0; i < nBands; ++i)
458 QTableWidgetItem* itemMean =
new QTableWidgetItem(
"127");
459 itemMean->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable);
460 m_ui->m_bandTableWidget->setItem(i, 1, itemMean);
462 QTableWidgetItem* itemStdDev =
new QTableWidgetItem(
"50");
463 itemStdDev->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable);
464 m_ui->m_bandTableWidget->setItem(i, 2, itemStdDev);
467 m_histogramWidget->setMinimumValueEnabled(
true);
468 m_histogramWidget->setMaximumValueEnabled(
true);
470 m_histogramWidget->updateMinimumValueLabel(tr(
"Mean"));
471 m_histogramWidget->updateMaximumValueLabel(tr(
"Std Dev"));
473 m_histogramWidget->updateMinimumValueLine(127,
false);
474 m_histogramWidget->updateMaximumValueLine(50,
false);
476 m_ui->m_tipLabel->setText(tr(
"Use left button to set Mean value and right button to define Std Dev value over the histogram."));
481 list.append(tr(
"Band"));
483 m_ui->m_bandTableWidget->setColumnCount(1);
484 m_ui->m_bandTableWidget->setHorizontalHeaderLabels(list);
486 m_histogramWidget->setMinimumValueEnabled(
false);
487 m_histogramWidget->setMaximumValueEnabled(
false);
489 m_ui->m_tipLabel->setText(tr(
""));
494 m_ui->m_bandTableWidget->resizeColumnsToContents();
495 #if (QT_VERSION >= 0x050000)
496 m_ui->m_bandTableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
498 m_ui->m_bandTableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
504 QTableWidgetItem* item = m_ui->m_bandTableWidget->item(row, 0);
506 if(item->checkState() == Qt::Checked)
512 int index = m_ui->m_contrastTypeComboBox->currentIndex();
514 int contrastType = m_ui->m_contrastTypeComboBox->itemData(index).toInt();
521 m_ui->m_bandTableWidget->item(band, 1)->setText(QString::number(value));
522 m_ui->m_bandTableWidget->setCurrentCell(band, 1);
524 m_histogramWidget->updateMinimumValueLine(value,
true);
528 m_ui->m_bandTableWidget->item(band, 1)->setText(QString::number(value));
529 m_ui->m_bandTableWidget->setCurrentCell(band, 1);
531 m_histogramWidget->updateMinimumValueLine(value,
true);
535 m_ui->m_bandTableWidget->item(band, 1)->setText(QString::number(value));
536 m_ui->m_bandTableWidget->setCurrentCell(band, 1);
538 m_histogramWidget->updateMinimumValueLine(value,
true);
548 int index = m_ui->m_contrastTypeComboBox->currentIndex();
550 int contrastType = m_ui->m_contrastTypeComboBox->itemData(index).toInt();
557 m_ui->m_bandTableWidget->item(band, 2)->setText(QString::number(value));
558 m_ui->m_bandTableWidget->setCurrentCell(band, 2);
560 m_histogramWidget->updateMaximumValueLine(value,
true);
564 if(!m_ui->m_bandTableWidget->item(band, 1)->text().isEmpty())
566 double mean = m_ui->m_bandTableWidget->item(band, 1)->text().toDouble();
568 double stdDev = abs(mean - value);
570 m_ui->m_bandTableWidget->item(band, 2)->setText(QString::number(stdDev));
571 m_ui->m_bandTableWidget->setCurrentCell(band, 2);
573 m_histogramWidget->updateMaximumValueLine(value,
true);
586 m_histogramWidget->setInputRaster(inputRst);
595 for(
int i = 0; i <= m_ui->m_bandTableWidget->currentRow(); ++i)
597 QTableWidgetItem* item = m_ui->m_bandTableWidget->item(i, 0);
599 if(item->checkState() == Qt::Checked)
608 int index = m_ui->m_contrastTypeComboBox->currentIndex();
610 int contrastType = m_ui->m_contrastTypeComboBox->itemData(index).toInt();
617 int min = m_ui->m_bandTableWidget->item(bandIdx, 1)->text().toInt();
618 int max = m_ui->m_bandTableWidget->item(bandIdx, 2)->text().toInt();
620 m_histogramWidget->updateMinimumValueLine(min,
false);
621 m_histogramWidget->updateMaximumValueLine(max,
false);
625 int min = m_ui->m_bandTableWidget->item(bandIdx, 1)->text().toInt();
627 m_histogramWidget->updateMinimumValueLine(min,
false);
631 int min = m_ui->m_bandTableWidget->item(bandIdx, 1)->text().toInt();
632 int max = m_ui->m_bandTableWidget->item(bandIdx, 2)->text().toInt();
634 m_histogramWidget->updateMinimumValueLine(min,
false);
635 m_histogramWidget->updateMaximumValueLine(max,
false);
638 m_histogramWidget->drawHistogram(bandIdx);
std::auto_ptr< te::qt::widgets::RasterHistogramWidget > m_histogramWidget
te::map::AbstractLayerPtr get()
ContrastWizardPage(QWidget *parent=0)
te::rst::Raster * m_outRasterPtr
A pointer to a valid initiated raster instance where the result must be written, leave NULL to create...
void onMinValueSelected(int value, int band)
unsigned int getNumberOfColumns() const
Returns the raster number of columns.
void set(te::map::AbstractLayerPtr layer)
This method is used to set the selected layer for contrast operation.
te::rp::Contrast::InputParameters getInputParams()
void onCellClicked(int row, int column)
std::auto_ptr< Ui::ContrastWizardPageForm > m_ui
An abstract class for raster data strucutures.
unsigned int getNumberOfRows() const
Returns the raster number of rows.
virtual std::size_t getNumberOfBands() const =0
Returns the number of bands (dimension of cells attribute values) in the raster.
std::auto_ptr< te::qt::widgets::RasterNavigatorWidget > m_navigator
std::auto_ptr< te::rst::Raster > m_createdOutRasterPtr
A pointer to the created output raster instance, or an empty pointer empty if the result must be writ...
This file defines a class for a Contrast Wizard page.
bool initialize(const AlgorithmInputParameters &inputParams)
Initialize the algorithm instance making it ready for execution.
bool execute(AlgorithmOutputParameters &outputParams)
Executes the algorithm using the supplied parameters.
void onMaxValueSelected(int value, int band)
std::string m_createdOutRasterDSType
Output raster data source type (as described in te::raster::RasterFactory ), leave empty if the resul...
TEDATAACCESSEXPORT std::size_t GetFirstPropertyPos(const te::da::DataSet *dataset, int datatype)
Contrast output parameters.
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
std::map< std::string, std::string > m_createdOutRasterInfo
The necessary information to create the raster (as described in te::raster::RasterFactory), leave empty if the result must be written to the raster pointed m_outRasterPtr.
virtual int getBandDataType(std::size_t i) const =0
Returns the data type in a particular band (or dimension).
void onContrastTypeComboBoxActivated(int index)