The spica renderer
tmo.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef _SPICA_TMO_H_
6 #define _SPICA_TMO_H_
7 
8 #include "core/core.hpp"
9 
10 #include "core/common.h"
11 
12 namespace spica {
13 
16  class SPICA_EXPORTS Tmo {
17  public:
18  Tmo() {}
19  virtual ~Tmo() {}
20 
21  virtual Image apply(const spica::Image& image) const = 0;
22  };
23 
26  class SPICA_EXPORTS GammaTmo : public Tmo {
27  private:
28  double _gamma;
29 
30  public:
31  explicit GammaTmo(double gamma);
32  ~GammaTmo();
33  Image apply(const Image& image) const override;
34  };
35 
36 
39  class SPICA_EXPORTS ReinhardTmo : public Tmo {
40  private:
41  double _alpha;
42 
43  public:
44  explicit ReinhardTmo(double alpha = 0.18);
45  ~ReinhardTmo();
46  Image apply(const Image& image) const override;
47 
48  private:
49  static double whitePoint(const Image& image);
50  };
51 
54  class SPICA_EXPORTS DragoTmo : public Tmo {
55  private:
56  double _Ldmax;
57  double _p;
58 
59  public:
60  explicit DragoTmo(double Ldmax=100.0, double p=0.85);
61  ~DragoTmo();
62  Image apply(const Image& image) const override;
63  };
64 
67  class SPICA_EXPORTS DurandTMO: public Tmo {
68  private:
69  double _sigmaSpace;
70  double _sigmaColor;
71  double _targetContrast;
72 
73  public:
74  explicit DurandTMO(double sigmaSpace = 0.02,
75  double sigmaColor = 0.4,
76  double targetContrast = 5.0);
77  ~DurandTMO();
78  Image apply(const Image& image) const override;
79 
80  private:
81  void birateralSeparation(const Image& L, double sigma_s, double sigma_r, Image* Lbase, Image* Ldetail) const;
82  };
83 
84 } // namespace spica
85 
86 #endif // _SPICA_TMO_H_
Gamma correction.
Definition: tmo.h:26
Drago TMO.
Definition: tmo.h:54
Image class.
Definition: image.h:18
Base class for tone mapping operators.
Definition: tmo.h:16
Reinhard TMO.
Definition: tmo.h:39
Durand TMO.
Definition: tmo.h:67