commit 9a34d7f8b39b6aeb5d1ffd26ca0aff6fba794bfd
parent a8be2904635fd58f4eb9650a3053d4d5e8564f30
Author: Fabian Wermelinger <fabianw@mavt.ethz.ch>
Date: Fri, 29 Apr 2016 08:23:39 +0200
implemented SceneProcessor
Diffstat:
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 */