polaroid-pp

Schlieren and contour plot tool
git clone https://git.0xfab.ch/polaroid-pp.git
Log | Files | Refs | Submodules | README | LICENSE

commit 9a34d7f8b39b6aeb5d1ffd26ca0aff6fba794bfd
parent a8be2904635fd58f4eb9650a3053d4d5e8564f30
Author: Fabian Wermelinger <fabianw@mavt.ethz.ch>
Date:   Fri, 29 Apr 2016 08:23:39 +0200

implemented SceneProcessor

Diffstat:
Mapps/polaroidCamera/NormalizerCartridge.h | 14+++++++-------
Mapps/polaroidCamera/SceneProcessor.cpp | 47++++++++++++++++++++++++++++++++++++-----------
Mapps/polaroidCamera/SceneProcessor.h | 11++++++-----
Mapps/polaroidCamera/polaroidCameraMPI.cpp | 27+++------------------------
Minclude/Types.h | 2+-
5 files changed, 53 insertions(+), 48 deletions(-)

diff --git a/apps/polaroidCamera/NormalizerCartridge.h b/apps/polaroidCamera/NormalizerCartridge.h @@ -11,7 +11,7 @@ class NormalizerCartridge : public Cartridge { public: - NormalizerCartridge(ArgumentParser& parser) : Cartridge(parser), m_dataMin(0), m_dataMax(0) {} + NormalizerCartridge(ArgumentParser& parser) : Cartridge(parser) {} virtual void capture(PhotoPaper& photo, Slice& data) { @@ -22,20 +22,20 @@ public: photo.set_description(desc.c_str()); // compute min/max for shader - m_dataMin = data(0,0); - m_dataMax = data(0,0); + Real dataMin = data(0,0); + Real dataMax = data(0,0); for (int h=0; h < data.height(); ++h) for (int w=0; w < data.width(); ++w) { - m_dataMin = min(m_dataMin, data(w,h)); - m_dataMax = max(m_dataMax, data(w,h)); + dataMin = min(dataMin, data(w,h)); + dataMax = max(dataMax, data(w,h)); } - const Real data_normInv = 1.0 / (m_dataMax - m_dataMin); + const Real data_normInv = 1.0 / (dataMax - dataMin); // pixel shader for (int h=0; h < data.height(); ++h) for (int w=0; w < data.width(); ++w) - photo.set_pixel(w, h, (data(w,h) - m_dataMin) * data_normInv); + photo.set_pixel(w, h, (data(w,h) - dataMin) * data_normInv); photo.write(); } diff --git a/apps/polaroidCamera/SceneProcessor.cpp b/apps/polaroidCamera/SceneProcessor.cpp @@ -3,6 +3,7 @@ // Author : Fabian Wermelinger // Description: Scene Processor implementation // Copyright 2016 ETH Zurich. All Rights Reserved. +#include <string> #include <iostream> #include <cstdlib> #include <cstdio> @@ -10,12 +11,36 @@ using namespace std; - void SceneProcessor::_prepare_cam() { + const string cart = m_parser("-cartridge").asString("transmission"); + if (cart == "transmission") + m_cartridge = new TransmissionCartridge(m_parser); + else if (cart == "normalizer") + m_cartridge = new NormalizerCartridge(m_parser); + else + { + if (m_isroot) + cerr << "ERROR: Unknown cartridge \"" << cart << "\"" << endl; + abort(); + } + + const string paper = m_parser("-photo").asString("png_hsv"); + if (paper == "png_hsv") + m_photo = new PNG_HSV; + else if (paper == "png_mono") + m_photo = new PNG_MONO; + else if (paper == "hdf5") + m_photo = new PhotoHDF5; + else + { + if (m_isroot) + cerr << "ERROR: Unknown photo paper\"" << paper << "\"" << endl; + abort(); + } } -void SceneProcessor::_load_cam(Polaroid& cam, const char* const fname, const bool isroot) const +void SceneProcessor::_load_cam(Polaroid& cam, const char* const fname) const { const double fraction = m_parser("-fraction").asDouble(0.5); const int direction = m_parser("-direction").asInt(0); @@ -30,13 +55,13 @@ void SceneProcessor::_load_cam(Polaroid& cam, const char* const fname, const boo cam.load_wavelet(fname, fraction, direction, channel, byte_swap, wavelet_type); else { - if (isroot) + if (m_isroot) cerr << "ERROR: Undefined input type \"" << input_type << "\"" << endl; abort(); } } -void SceneProcessor::process1212(const vector<char*>& scenes, const bool isroot) +void SceneProcessor::process1212(const vector<char*>& scenes) { _prepare_cam(); Polaroid mycam(m_cartridge); @@ -52,28 +77,28 @@ void SceneProcessor::process1212(const vector<char*>& scenes, const bool isroot) m_photo->make_new(basename+"-polaroid", mycam.width(), mycam.height()); mycam.capture(*m_photo); - if (isroot) + if (m_isroot) printf("[Progress %3.1f %%]\n", static_cast<double>(i)/scenes.size()*100.0); } } -void SceneProcessor::process1122(const vector<char*>& scenes, const bool isroot) +void SceneProcessor::process1122(const vector<char*>& scenes) { _prepare_cam(); vector<Polaroid> mycams(scenes.size()); - // 1.) load scenes + // 1.) load scenes & compute for (size_t i=0; i<scenes.size(); ++i) { Polaroid& cam = mycams[i]; _load_cam(cam, scenes[i]); cam.insertCartridge(m_cartridge); cam.computeScene(); - if (isroot) + if (m_isroot) printf("[Scene Progress %3.1f %%]\n", static_cast<double>(i)/scenes.size()*100.0); } - // 2.) compute photos + // 2.)apply pixel shader and write photo for (size_t i=0; i<scenes.size(); ++i) { Polaroid& cam = mycams[i]; @@ -85,7 +110,7 @@ void SceneProcessor::process1122(const vector<char*>& scenes, const bool isroot) m_photo->make_new(basename+"-polaroid", cam.width(), cam.height()); cam.capture(*m_photo); - if (isroot) - printf("[Photo Progress %3.1f %%]\n", static_cast<double>(i)/scenes.size()*100.0); + if (m_isroot) + printf("[Shader Progress %3.1f %%]\n", static_cast<double>(i)/scenes.size()*100.0); } } diff --git a/apps/polaroidCamera/SceneProcessor.h b/apps/polaroidCamera/SceneProcessor.h @@ -6,7 +6,6 @@ #ifndef SCENEPROCESSOR_H_UWGYBVIW #define SCENEPROCESSOR_H_UWGYBVIW -#include <string> #include <vector> #include "ArgumentParser.h" @@ -21,9 +20,11 @@ private: Cartridge* m_cartridge; PhotoPaper* m_photo; + const bool m_isroot; + // helper void _prepare_cam(); - void _load_cam(Polaroid& cam, const char* const fname, const bool isroot=true) const; + void _load_cam(Polaroid& cam, const char* const fname) const; inline void _dispose() { if (m_cartridge) delete m_cartridge; @@ -33,11 +34,11 @@ private: } public: - SceneProcessor(ArgumentParser& parser) : m_parser(parser), m_cartridge(nullptr), m_photo(nullptr) {} + SceneProcessor(ArgumentParser& parser, const bool isroot=true) : m_parser(parser), m_cartridge(nullptr), m_photo(nullptr), m_isroot(isroot) {} ~SceneProcessor() { _dispose(); } - void process1212(const std::vector<char*>& scenes, const bool isroot=true); - void process1122(const std::vector<char*>& scenes, const bool isroot=true); + void process1212(const std::vector<char*>& scenes); + void process1122(const std::vector<char*>& scenes); }; #endif /* SCENEPROCESSOR_H_UWGYBVIW */ diff --git a/apps/polaroidCamera/polaroidCameraMPI.cpp b/apps/polaroidCamera/polaroidCameraMPI.cpp @@ -37,12 +37,12 @@ int main(int argc, char* argv[]) else printf("[Worker %d/%d: Load = %d scene(s), start @ %s]\n", worker.rank(), worker.size(), myscenes.size(), "none"); - SceneProcessor myprocessor(myparser); + SceneProcessor myprocessor(myparser, worker.isroot()); if (myparser("-process").asInt(1212) == 1212) - myprocessor.process1212(myscenes, worker.isroot()); + myprocessor.process1212(myscenes); else if (myparser("-process").asInt(1212) == 1122) - myprocessor.process1122(myscenes, worker.isroot()); + myprocessor.process1122(myscenes); else { if (worker.isroot()) @@ -50,27 +50,6 @@ int main(int argc, char* argv[]) abort(); } - - - // Cartridge * const mycartridge; - // PhotoPaper* myphoto; - // if (myparser("-format").asString("png") == "png") - // { - // mycartridge = new NormalizerCartridge(myparser); - // if (myparser("-type").asString("hsv") == "hsv") - // myphoto = new PNG_HSV; - // else if (myparser("-type").asString("hsv") == "mono") - // myphoto = new PNG_MONO; - // } - // else if (myparser("-format").asString("png") == "hdf5") - // { - // mycartridge = new TransmissionCartridge(myparser); - // myphoto = new PhotoHDF5; - // } - - - - worker.wait(); MPI_Finalize(); diff --git a/include/Types.h b/include/Types.h @@ -71,6 +71,6 @@ public: } }; -typedef Slice2D<0,0,-2,2> Slice; +typedef Slice2D<0,0,0,0> Slice; #endif /* TYPES_H_QATFIWCK */