[TASK] Allow loading a reference image, add indicators for its stats.

This commit is contained in:
Jan Philipp Timme 2015-11-20 12:48:05 +01:00
parent e9a397e57a
commit 0fa09a775b
2 changed files with 62 additions and 2 deletions

View File

@ -47,6 +47,7 @@
ImageViewer::ImageViewer() { ImageViewer::ImageViewer() {
original = NULL; original = NULL;
working_copy = NULL; working_copy = NULL;
histogramm_reference = NULL;
startLogging(); startLogging();
generateMainGui(); generateMainGui();
renewLogging(); renewLogging();
@ -422,7 +423,15 @@ void ImageViewer::generateControlPanels() {
task_tab_widget2 = new QWidget(); task_tab_widget2 = new QWidget();
task_tab2 = new QVBoxLayout(); task_tab2 = new QVBoxLayout();
task_tab_widget2->setLayout(task_tab2); task_tab_widget2->setLayout(task_tab2);
reference_histogramm_label = new QLabel();
reference_histogramm_label->setBackgroundRole(QPalette::Base);
reference_histogramm_label->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
reference_histogramm_label->setScaledContents(false);
reference_stats = new QLabel();
reference_stats->setText("Stats for reference image will be shown here.");
original_histogramm_label = new QLabel(); original_histogramm_label = new QLabel();
original_histogramm_label->setBackgroundRole(QPalette::Base); original_histogramm_label->setBackgroundRole(QPalette::Base);
original_histogramm_label->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); original_histogramm_label->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
@ -460,7 +469,10 @@ void ImageViewer::generateControlPanels() {
contrast_percentile_slider->setMaximum(100); contrast_percentile_slider->setMaximum(100);
contrast_percentile_slider->setValue(10); contrast_percentile_slider->setValue(10);
QObject::connect(contrast_percentile_slider, SIGNAL(valueChanged(int)), this, SLOT(robustAutomaticContrastAdaption(int))); QObject::connect(contrast_percentile_slider, SIGNAL(valueChanged(int)), this, SLOT(robustAutomaticContrastAdaption(int)));
task_tab2->addWidget(new QLabel("Reference image"));
task_tab2->addWidget(reference_stats);
task_tab2->addWidget(reference_histogramm_label);
task_tab2->addWidget(new QLabel("Original image")); task_tab2->addWidget(new QLabel("Original image"));
task_tab2->addWidget(original_stats); task_tab2->addWidget(original_stats);
task_tab2->addWidget(original_histogramm_label); task_tab2->addWidget(original_histogramm_label);
@ -481,6 +493,11 @@ void ImageViewer::generateControlPanels() {
task_tab_widget3 = new QWidget(); task_tab_widget3 = new QWidget();
task_tab3 = new QVBoxLayout(); task_tab3 = new QVBoxLayout();
task_tab_widget3->setLayout(task_tab3); task_tab_widget3->setLayout(task_tab3);
reference_histogramm_cumulative_label = new QLabel();
reference_histogramm_cumulative_label->setBackgroundRole(QPalette::Base);
reference_histogramm_cumulative_label->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
reference_histogramm_cumulative_label->setScaledContents(false);
original_histogramm_cumulative_label = new QLabel(); original_histogramm_cumulative_label = new QLabel();
original_histogramm_cumulative_label->setBackgroundRole(QPalette::Base); original_histogramm_cumulative_label->setBackgroundRole(QPalette::Base);
@ -495,6 +512,8 @@ void ImageViewer::generateControlPanels() {
linear_histogramm_adaption = new QPushButton("Do linear histogramm adaption (basic)"); linear_histogramm_adaption = new QPushButton("Do linear histogramm adaption (basic)");
QObject::connect(linear_histogramm_adaption, SIGNAL(clicked()), this, SLOT(linearHistogrammAdaption())); QObject::connect(linear_histogramm_adaption, SIGNAL(clicked()), this, SLOT(linearHistogrammAdaption()));
task_tab3->addWidget(new QLabel("Reference image"));
task_tab3->addWidget(reference_histogramm_cumulative_label);
task_tab3->addWidget(new QLabel("Original image")); task_tab3->addWidget(new QLabel("Original image"));
task_tab3->addWidget(original_histogramm_cumulative_label); task_tab3->addWidget(original_histogramm_cumulative_label);
task_tab3->addWidget(new QLabel("Working copy")); task_tab3->addWidget(new QLabel("Working copy"));
@ -627,6 +646,36 @@ void ImageViewer::open() {
} }
} }
/**
* Simply load another image to provide reference for some operations.
* @brief ImageViewer::openReference
*/
void ImageViewer::openReference() {
if(histogramm_reference != NULL) {
delete histogramm_reference;
histogramm_reference = NULL;
}
QString fileName = QFileDialog::getOpenFileName(this, tr("Open Histogramm Reference File"), QDir::currentPath());
if(!fileName.isEmpty()) {
histogramm_reference = new LazyImage(new QImage(fileName));
if(histogramm_reference->getImage()->isNull()) {
QMessageBox::information(this, tr("Image Viewer"), tr("Cannot load %1.").arg(fileName));
return;
}
if(histogramm_reference->getImage() != NULL) {
histogramm_reference->updateStatistics();
QString result = QString("Intensity: Average: %1, Variance: %2").arg(histogramm_reference->getIntensityAverage()).arg(histogramm_reference->getIntensityVariance());
reference_stats->setText(result);
reference_histogramm_label->setPixmap(QPixmap::fromImage(*(histogramm_reference->getHistogrammNormalImage())));
reference_histogramm_cumulative_label->setPixmap(QPixmap::fromImage(*(histogramm_reference->getHistogrammCumulativeImage())));
}
logFile << "Referenzbild geladen: " << fileName.toStdString().c_str() << std::endl;
renewLogging();
}
}
void ImageViewer::resizeEvent(QResizeEvent* event) { void ImageViewer::resizeEvent(QResizeEvent* event) {
QMainWindow::resizeEvent(event); QMainWindow::resizeEvent(event);
centralwidget->setMinimumWidth(width()); centralwidget->setMinimumWidth(width());
@ -680,6 +729,10 @@ void ImageViewer::createActions() {
openAct->setShortcut(tr("Ctrl+O")); openAct->setShortcut(tr("Ctrl+O"));
connect(openAct, SIGNAL(triggered()), this, SLOT(open())); connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
openHistAct = new QAction(tr("Open &Reference..."), this);
openHistAct->setShortcut(tr("Ctrl+O"));
connect(openHistAct, SIGNAL(triggered()), this, SLOT(openReference()));
printAct = new QAction(tr("&Print..."), this); printAct = new QAction(tr("&Print..."), this);
printAct->setShortcut(tr("Ctrl+P")); printAct->setShortcut(tr("Ctrl+P"));
printAct->setEnabled(false); printAct->setEnabled(false);
@ -720,6 +773,7 @@ void ImageViewer::createActions() {
void ImageViewer::createMenus() { void ImageViewer::createMenus() {
fileMenu = new QMenu(tr("&File"), this); fileMenu = new QMenu(tr("&File"), this);
fileMenu->addAction(openAct); fileMenu->addAction(openAct);
fileMenu->addAction(openHistAct);
fileMenu->addAction(printAct); fileMenu->addAction(printAct);
fileMenu->addSeparator(); fileMenu->addSeparator();
fileMenu->addAction(exitAct); fileMenu->addAction(exitAct);

View File

@ -88,8 +88,10 @@ class ImageViewer : public QMainWindow {
QWidget* task_tab_widget2; QWidget* task_tab_widget2;
QVBoxLayout* task_tab2; QVBoxLayout* task_tab2;
QLabel* reference_stats;
QLabel* original_stats; QLabel* original_stats;
QLabel* stats; QLabel* stats;
QLabel* reference_histogramm_label;
QLabel* original_histogramm_label; QLabel* original_histogramm_label;
QLabel* histogramm_label; QLabel* histogramm_label;
QPushButton* analyze_image; QPushButton* analyze_image;
@ -103,6 +105,7 @@ class ImageViewer : public QMainWindow {
QWidget* task_tab_widget3; QWidget* task_tab_widget3;
QVBoxLayout* task_tab3; QVBoxLayout* task_tab3;
QLabel* reference_histogramm_cumulative_label;
QLabel* original_histogramm_cumulative_label; QLabel* original_histogramm_cumulative_label;
QLabel* histogramm_cumulative_label; QLabel* histogramm_cumulative_label;
@ -111,6 +114,7 @@ class ImageViewer : public QMainWindow {
// "My" space for storing data/results // "My" space for storing data/results
LazyImage* original; LazyImage* original;
LazyImage* working_copy; LazyImage* working_copy;
LazyImage* histogramm_reference;
private slots: private slots:
// Custom slots // Custom slots
@ -127,6 +131,7 @@ class ImageViewer : public QMainWindow {
void linearHistogrammAdaption(); void linearHistogrammAdaption();
void open(); void open();
void openReference();
void print(); void print();
void zoomIn(); void zoomIn();
void zoomOut(); void zoomOut();
@ -175,6 +180,7 @@ class ImageViewer : public QMainWindow {
#endif #endif
QAction *openAct; QAction *openAct;
QAction *openHistAct;
QAction *printAct; QAction *printAct;
QAction *exitAct; QAction *exitAct;
QAction *zoomInAct; QAction *zoomInAct;