[TASK] Move intensity calculation to seperate method, increase precision using qRound.

This commit is contained in:
Jan Philipp Timme 2015-11-10 12:54:51 +01:00
parent c2421582b5
commit 3fe80df7f9
2 changed files with 9 additions and 3 deletions

View File

@ -73,6 +73,10 @@ void ImageViewer::initializeImage() {
analyzeImage(); analyzeImage();
} }
int ImageViewer::calcIntensity(int r, int g, int b) {
return (int) qRound(0.299*r + 0.587*g + 0.114*b);
}
/** /**
* In case it is needed, convert the loaded image into grayscale. * In case it is needed, convert the loaded image into grayscale.
* @brief ImageViewer::convertToMonochrome * @brief ImageViewer::convertToMonochrome
@ -86,7 +90,7 @@ void ImageViewer::convertToMonochrome() {
int r,g,b; int r,g,b;
QColor color = QColor::fromRgb(image->pixel(x, y)); QColor color = QColor::fromRgb(image->pixel(x, y));
color.getRgb(&r,&g,&b); color.getRgb(&r,&g,&b);
int intensity = (int)(0.299*r+0.587*g+0.114*b); int intensity = calcIntensity(r, g, b);
color = QColor::fromRgb(intensity, intensity, intensity); color = QColor::fromRgb(intensity, intensity, intensity);
image->setPixel(x, y, color.rgba()); image->setPixel(x, y, color.rgba());
original_image->setPixel(x, y, color.rgba()); original_image->setPixel(x, y, color.rgba());
@ -206,7 +210,7 @@ void ImageViewer::analyzeImage() {
int r,g,b; int r,g,b;
QColor color = QColor::fromRgb(image->pixel(x, y)); QColor color = QColor::fromRgb(image->pixel(x, y));
color.getRgb(&r,&g,&b); color.getRgb(&r,&g,&b);
int intensity = (int)(0.299*r+0.587*g+0.114*b); int intensity = calcIntensity(r, g, b);
grayscale_absolute_histogramm[intensity] += 1; grayscale_absolute_histogramm[intensity] += 1;
} }
} }
@ -250,7 +254,7 @@ int ImageViewer::getIntensityVariance() {
QColor color = QColor::fromRgb(image->pixel(x, y)); QColor color = QColor::fromRgb(image->pixel(x, y));
int r,g,b; int r,g,b;
color.getRgb(&r,&g,&b); color.getRgb(&r,&g,&b);
int intensity = (int)(0.299*r+0.587*g+0.114*b); int intensity = calcIntensity(r, g, b);
int diff = std::abs(intensity - average_intensity); int diff = std::abs(intensity - average_intensity);
sumDifference += diff; sumDifference += diff;
} }

View File

@ -41,6 +41,7 @@
#ifndef IMAGEVIEWER_H #ifndef IMAGEVIEWER_H
#define IMAGEVIEWER_H #define IMAGEVIEWER_H
#include <QtGlobal>
#include <QMainWindow> #include <QMainWindow>
#include <QPrinter> #include <QPrinter>
#include <QtGui> #include <QtGui>
@ -132,6 +133,7 @@ class ImageViewer : public QMainWindow {
private: private:
// Custom methods // Custom methods
int calcIntensity(int r, int g, int b);
void drawRainbowCross(int h); void drawRainbowCross(int h);
int getAverageIntensity(); int getAverageIntensity();
int getIntensityVariance(); int getIntensityVariance();