[TASK] Add cumulative histogramms.

This commit is contained in:
Jan Philipp Timme 2015-11-13 15:36:52 +01:00
parent bc5bec953f
commit 42bf3fb44e
3 changed files with 61 additions and 17 deletions

View File

@ -197,8 +197,10 @@ void ImageViewer::analyzeImage() {
original_stats->setText(result); original_stats->setText(result);
result = QString("Intensity: Average: %1, Variance: %2").arg(working_copy->getIntensityAverage()).arg(working_copy->getIntensityVariance()); result = QString("Intensity: Average: %1, Variance: %2").arg(working_copy->getIntensityAverage()).arg(working_copy->getIntensityVariance());
stats->setText(result); stats->setText(result);
histogramm_label->setPixmap(QPixmap::fromImage(*(working_copy->getHistogrammImage()))); histogramm_label->setPixmap(QPixmap::fromImage(*(working_copy->getHistogrammNormalImage())));
original_histogramm_label->setPixmap(QPixmap::fromImage(*(original->getHistogrammImage()))); original_histogramm_label->setPixmap(QPixmap::fromImage(*(original->getHistogrammNormalImage())));
histogramm_cumulative_label->setPixmap(QPixmap::fromImage(*(working_copy->getHistogrammCumulativeImage())));
original_histogramm_cumulative_label->setPixmap(QPixmap::fromImage(*(original->getHistogrammCumulativeImage())));
} }
} }
@ -251,7 +253,7 @@ void ImageViewer::adjustContrast(int c) {
renewLogging(); renewLogging();
} }
/** copy /**
* Using the percentile given by the slider, do a robust automatic contrast adaption. * Using the percentile given by the slider, do a robust automatic contrast adaption.
* *
* @brief ImageViewer::robustAutomaticContrastAdaption * @brief ImageViewer::robustAutomaticContrastAdaption
@ -431,6 +433,21 @@ void ImageViewer::generateControlPanels() {
task_tab3 = new QVBoxLayout(); task_tab3 = new QVBoxLayout();
task_tab_widget3->setLayout(task_tab3); task_tab_widget3->setLayout(task_tab3);
original_histogramm_cumulative_label = new QLabel();
original_histogramm_cumulative_label->setBackgroundRole(QPalette::Base);
original_histogramm_cumulative_label->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
original_histogramm_cumulative_label->setScaledContents(false);
histogramm_cumulative_label = new QLabel();
histogramm_cumulative_label->setBackgroundRole(QPalette::Base);
histogramm_cumulative_label->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
histogramm_cumulative_label->setScaledContents(false);
task_tab3->addWidget(new QLabel("Original image"));
task_tab3->addWidget(original_histogramm_cumulative_label);
task_tab3->addWidget(new QLabel("Working copy"));
task_tab3->addWidget(histogramm_cumulative_label);
tabWidget->addTab(task_tab_widget3, "Task #3"); tabWidget->addTab(task_tab_widget3, "Task #3");
//Show it //Show it

View File

@ -102,6 +102,9 @@ class ImageViewer : public QMainWindow {
QWidget* task_tab_widget3; QWidget* task_tab_widget3;
QVBoxLayout* task_tab3; QVBoxLayout* task_tab3;
QLabel* original_histogramm_cumulative_label;
QLabel* histogramm_cumulative_label;
// "My" space for storing data/results // "My" space for storing data/results
LazyImage* original; LazyImage* original;
LazyImage* working_copy; LazyImage* working_copy;

View File

@ -13,7 +13,8 @@ class LazyImage {
private: private:
QImage* img; //Not managed by us, just used. QImage* img; //Not managed by us, just used.
QImage* histogramm_image; QImage* histogramm_normal_image;
QImage* histogramm_cumulative_image;
double histogramm_relative_intensity[256]; double histogramm_relative_intensity[256];
int histogramm_absolute_intensity[256]; int histogramm_absolute_intensity[256];
int intensity_average; int intensity_average;
@ -64,24 +65,41 @@ class LazyImage {
this->intensity_variance = (int) qRound(sum_difference/(this->img->width()*this->img->height())); this->intensity_variance = (int) qRound(sum_difference/(this->img->width()*this->img->height()));
}; };
void generateHistogrammImage(void) { void generateNormalHistogrammImage(void) {
if(this->histogramm_image != NULL) { if(this->histogramm_normal_image != NULL) {
delete this->histogramm_image; delete this->histogramm_normal_image;
this->histogramm_image = NULL; this->histogramm_normal_image = NULL;
} }
//Find biggest value in histogramm data //Find biggest value in histogramm data
double max = 0; double max = 0;
for(int i=0; i<256; i++) { for(int i=0; i<256; i++) {
if(histogramm_relative_intensity[i] > max) max = histogramm_relative_intensity[i]; if(histogramm_relative_intensity[i] > max) max = histogramm_relative_intensity[i];
} }
this->histogramm_normal_image = new QImage(256, 100, QImage::Format_RGB32);
this->histogramm_image = new QImage(256, 100, QImage::Format_RGB32); this->histogramm_normal_image->fill(QColor::fromRgb(200,200,200));
this->histogramm_image->fill(QColor::fromRgb(200,200,200));
int black = QColor::fromRgb(0,0,0).rgb(); int black = QColor::fromRgb(0,0,0).rgb();
for(int x=0; x<256; x++) { for(int x=0; x<256; x++) {
int k_max = (int) qRound((100*histogramm_relative_intensity[x])/max); int k_max = (int) qRound((100*histogramm_relative_intensity[x])/max);
for(int y=0; y<k_max; y++) { for(int y=0; y<k_max; y++) {
this->histogramm_image->setPixel(x, (100-y)-1, black); this->histogramm_normal_image->setPixel(x, (100-y)-1, black);
}
}
};
void generateCumulativeHistogrammImage(void) {
if(this->histogramm_cumulative_image != NULL) {
delete this->histogramm_cumulative_image;
this->histogramm_cumulative_image = NULL;
}
this->histogramm_cumulative_image = new QImage(256, 100, QImage::Format_RGB32);
this->histogramm_cumulative_image->fill(QColor::fromRgb(200,200,200));
int black = QColor::fromRgb(0,0,0).rgb();
double total = 0.0;
for(int x=0; x<256; x++) {
total += histogramm_relative_intensity[x];
int k_max = (int) qRound(100*total);
for(int y=0; y<k_max; y++) {
this->histogramm_cumulative_image->setPixel(x, (100-y)-1, black);
} }
} }
}; };
@ -89,7 +107,8 @@ class LazyImage {
public: public:
LazyImage(QImage* img) { LazyImage(QImage* img) {
this->histogramm_image = NULL; this->histogramm_normal_image = NULL;
this->histogramm_cumulative_image = NULL;
this->setImage(img); this->setImage(img);
}; };
@ -114,11 +133,16 @@ class LazyImage {
this->gatherHistogrammData(); this->gatherHistogrammData();
this->calcIntensityAverage(); this->calcIntensityAverage();
this->calcIntensityVariance(); this->calcIntensityVariance();
this->generateHistogrammImage(); this->generateNormalHistogrammImage();
this->generateCumulativeHistogrammImage();
}; };
QImage* getHistogrammImage(void) { QImage* getHistogrammNormalImage(void) {
return this->histogramm_image; return this->histogramm_normal_image;
};
QImage* getHistogrammCumulativeImage(void) {
return this->histogramm_cumulative_image;
}; };
/** /**