PICCANTE  0.4
The hottest HDR imaging library!
filter_gaussian_1d.hpp
Go to the documentation of this file.
1 /*
2 
3 PICCANTE
4 The hottest HDR imaging library!
5 http://vcg.isti.cnr.it/piccante
6 
7 Copyright (C) 2014
8 Visual Computing Laboratory - ISTI CNR
9 http://vcg.isti.cnr.it
10 First author: Francesco Banterle
11 
12 This Source Code Form is subject to the terms of the Mozilla Public
13 License, v. 2.0. If a copy of the MPL was not distributed with this
14 file, You can obtain one at http://mozilla.org/MPL/2.0/.
15 
16 */
17 
18 #ifndef PIC_FILTERING_FILTER_GAUSSIAN_1D_HPP
19 #define PIC_FILTERING_FILTER_GAUSSIAN_1D_HPP
20 
21 #include "../filtering/filter_conv_1d.hpp"
22 #include "../util/precomputed_gaussian.hpp"
23 
24 namespace pic {
25 
30 {
31 protected:
32  float sigma;
34  bool bPgOwned;
35 
36 public:
41 
47  FilterGaussian1D(float sigma, int direction);
48 
54  FilterGaussian1D(PrecomputedGaussian *pg, int direction);
55 
57 
63  void update(float sigma, int direction = 0)
64  {
65  if(this->sigma != sigma) {
66  this->sigma = sigma;
67 
68  if(pg != NULL) {
69  delete pg;
70  }
71 
73  }
74 
75  bPgOwned = true;
76  FilterConv1D::update(pg->coeff, pg->kernelSize, direction);
77  }
78 
87  static Image *execute(Image *imgIn, Image *imgOut, float sigma,
88  int direction)
89  {
90  FilterGaussian1D filter(sigma, direction);
91  return filter.Process(Single(imgIn), imgOut);
92  }
93 };
94 
96 {
97  sigma = 1.0f;
99 
100  bPgOwned = true;
102 }
103 
104 PIC_INLINE FilterGaussian1D::FilterGaussian1D(float sigma, int direction = 0)
105 {
106  this->sigma = sigma;
108 
109  bPgOwned = true;
110  FilterConv1D::update(pg->coeff, pg->kernelSize, direction);
111 }
112 
114 {
115  if(pg == NULL) {
116  #ifdef PICE_DEBUG
117  printf("Error no precomputed gaussian values.\n");
118  #endif
119  return;
120  }
121 
122  bPgOwned = false;
123 
124  FilterConv1D::update(pg->coeff, pg->kernelSize, direction);
125 }
126 
128 {
129  release();
130 
131  if(pg != NULL && bPgOwned) {
132  delete pg;
133  pg = NULL;
134  }
135 }
136 
137 } // end namespace pic
138 
139 #endif /* PIC_FILTERING_FILTER_GAUSSIAN_1D_HPP */
140 
bool bPgOwned
Definition: filter_gaussian_1d.hpp:34
static Image * execute(Image *imgIn, Image *imgOut, float sigma, int direction)
execute
Definition: filter_gaussian_1d.hpp:87
void update(float *data, int kernelSize, int direction)
update
Definition: filter_conv_1d.hpp:160
virtual Image * Process(ImageVec imgIn, Image *imgOut)
Process.
Definition: filter.hpp:390
float * coeff
Definition: precomputed_gaussian.hpp:67
void update(float sigma, int direction=0)
update
Definition: filter_gaussian_1d.hpp:63
PrecomputedGaussian * pg
Definition: filter_gaussian_1d.hpp:33
The FilterConv1D class.
Definition: filter_conv_1d.hpp:32
#define PIC_INLINE
Definition: base.hpp:33
FilterGaussian1D()
FilterGaussian1D.
Definition: filter_gaussian_1d.hpp:95
virtual void release()
release
Definition: filter_radial_basis_function.hpp:142
The Image class stores an image as buffer of float.
Definition: image.hpp:60
The PrecomputedGaussian class.
Definition: precomputed_gaussian.hpp:30
int kernelSize
Definition: precomputed_gaussian.hpp:66
PIC_INLINE ImageVec Single(Image *img)
Single creates an std::vector which contains img; this is for filters input.
Definition: image_vec.hpp:36
float sigma
Definition: filter_gaussian_1d.hpp:32
Definition: bilateral_separation.hpp:25
The FilterGaussian1D class.
Definition: filter_gaussian_1d.hpp:29
~FilterGaussian1D()
Definition: filter_gaussian_1d.hpp:127