From 759383c4a1067b36d60d7bf9f5a419dc33344539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Sat, 28 Sep 2019 13:05:07 +0200 Subject: [PATCH] Make median filter parallel --- imageselector.pro | 4 +++- loadrunable.cpp | 13 +++++++++---- rawimage.h | 6 +++--- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/imageselector.pro b/imageselector.pro index fa187d7..b54c6cf 100644 --- a/imageselector.pro +++ b/imageselector.pro @@ -13,7 +13,9 @@ TEMPLATE = app CONFIG += c++11 -LIBS += -lraw -lexif -lcfitsio +QMAKE_CXXFLAGS += -fopenmp + +LIBS += -lraw -lexif -lcfitsio -fopenmp SOURCES += main.cpp\ mainwindow.cpp \ diff --git a/loadrunable.cpp b/loadrunable.cpp index acbfc96..b5e4b0c 100644 --- a/loadrunable.cpp +++ b/loadrunable.cpp @@ -26,7 +26,7 @@ void loadExifEntry(ImageInfoData &info, ExifContent *content, ExifTag tag) } } -void drawPeaks(QImage &img, const std::vector &peaks, bool half) +void drawPeaks(QImage &img, const std::vector &peaks) { QPixmap pix = QPixmap::fromImage(img); QPainter painter(&pix); @@ -222,9 +222,11 @@ void LoadRunable::run() QImage img; RawImageAbs *rawImage = nullptr; + bool raw = false; if(m_file.endsWith(".CR2", Qt::CaseInsensitive)) { loadRAW(m_file, info, m_analyzeLevel != None ? &rawImage : nullptr, &img); + raw = true; } else if(m_file.endsWith(".FIT", Qt::CaseInsensitive)) { @@ -244,7 +246,7 @@ void LoadRunable::run() } } - if(m_analyzeLevel >= Statistics) + if(rawImage && m_analyzeLevel >= Statistics) { uint64_t mean, median, min, max; double stdDev; @@ -258,10 +260,13 @@ void LoadRunable::run() if(m_analyzeLevel >= Peaks) { std::vector peaks; - rawImage->quarter(); + if(raw) { + rawImage->quarter(); + qDebug() << "quarter" << timer.restart(); + } rawImage->medianFilter(); int numPeaks = rawImage->findPeaks(median+stdDev, 20, peaks); - drawPeaks(img, peaks, true); + drawPeaks(img, peaks); info.append(StringPair(QObject::tr("Peaks"), QString::number(numPeaks))); info.append(StringPair(QObject::tr("Peaks draw"), QString::number(peaks.size()))); } diff --git a/rawimage.h b/rawimage.h index db2c34e..76d616b 100644 --- a/rawimage.h +++ b/rawimage.h @@ -169,7 +169,7 @@ public: { std::vector tmp; tmp.resize(m_width*m_height); - size_t d=0; + #pragma omp parallel for for(uint32_t y=0;y