PICCANTE  0.4
The hottest HDR imaging library!
filter_bilateral_2dsp.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_GL_FILTERING_FILTER_BILATERAL_2DSP_HPP
19 #define PIC_GL_FILTERING_FILTER_BILATERAL_2DSP_HPP
20 
21 #include "../../util/std_util.hpp"
22 
23 #include "../../gl/filtering/filter_bilateral_1d.hpp"
24 
25 namespace pic {
26 
34 {
35 protected:
37 
38 public:
43 
49  FilterGLBilateral2DSP(float sigma_s, float sigma_r);
50 
52 
56  void releaseAux()
57  {
59  }
60 
66  void update(float sigma_s, float sigma_r);
67 
77  static ImageGL *execute(std::string nameIn, std::string nameOut,
78  float sigma_s, float sigma_r, int testing)
79  {
80  GLuint testTQ = glBeginTimeQuery();
81  glEndTimeQuery(testTQ);
82 
83  ImageGL imgIn(nameIn);
84  imgIn.generateTextureGL(GL_TEXTURE_2D, GL_FLOAT, false);
85 
86  FilterGLBilateral2DSP filter(sigma_s, sigma_r);
87  ImageGL *imgRet = new ImageGL(1, imgIn.width, imgIn.height, 3, IMG_GPU, GL_TEXTURE_2D);
88 
89  GLuint testTQ1;
90 
91  if(testing > 1) {
92  filter.Process(SingleGL(&imgIn), imgRet);
93 
94  testTQ1 = glBeginTimeQuery();
95 
96  for(int i = 0; i < testing; i++) {
97  filter.Process(SingleGL(&imgIn), imgRet);
98  }
99  } else {
100  testTQ1 = glBeginTimeQuery();
101  filter.Process(SingleGL(&imgIn), imgRet);
102  }
103 
104  GLuint64EXT timeVal = glEndTimeQuery(testTQ1);
105  double ms = double(timeVal) / (double(testing) * 1000000.0);
106  printf("Separate Bilateral Filter on GPU time: %f ms\n", ms);
107 
108  std::string sign = genBilString("S", sigma_s, sigma_r);
109  std::string nameTime = FileLister::getFileNumber(sign, "txt");
110 
111  FILE *file = fopen(nameTime.c_str(), "w");
112 
113  if(file != NULL) {
114  fprintf(file, "%f", ms);
115  fclose(file);
116  }
117 
118  ImageGL *imgWrite = new ImageGL(1, imgIn.width, imgIn.height, 4, IMG_CPU, GL_TEXTURE_2D);
119  imgWrite->readFromFBO(filter.getFbo());
120  imgWrite->Write(nameOut);
121  return imgRet;
122  }
123 };
124 
126 {
127  target = GL_TEXTURE_2D;
128 
129  filter = new FilterGLBilateral1D(1.0f, 0.01f, 0, GL_TEXTURE_2D);
132 }
133 
135  float sigma_r): FilterGLNPasses()
136 {
137  target = GL_TEXTURE_2D;
138 
139  filter = new FilterGLBilateral1D(sigma_s, sigma_r, 0, GL_TEXTURE_2D);
142 }
143 
145 {
146  release();
147 }
148 
149 PIC_INLINE void FilterGLBilateral2DSP::update(float sigma_s, float sigma_r)
150 {
151  filter->update(sigma_s, sigma_r);
152 }
153 
154 } // end namespace pic
155 
156 #endif /* PIC_GL_FILTERING_FILTER_BILATERAL_2DSP_HPP */
157 
static std::string getFileNumber(std::string nameFile, std::string nameExt)
Definition: file_lister.hpp:36
void insertFilter(FilterGL *flt)
insertFilter
Definition: display.hpp:143
FilterGLBilateral2DSP()
FilterGLBilateral2DSP.
T * delete_s(T *data)
delete_s
Definition: std_util.hpp:123
GLuint generateTextureGL(GLenum target, GLenum format_type, bool mipmap)
generateTextureGL
void update(float sigma_s, float sigma_r)
update
GLuint glBeginTimeQuery()
glBeginTimeQuery
Definition: timings.hpp:29
GLenum target
Definition: display.hpp:47
The FilterGLNPasses class.
Definition: filter_npasses.hpp:36
PIC_INLINE ImageGLVec SingleGL(ImageGL *img)
SingleGL creates a single for filters input.
Definition: image_vec.hpp:39
Definition: image.hpp:37
static ImageGL * execute(std::string nameIn, std::string nameOut, float sigma_s, float sigma_r, int testing)
execute
Definition: filter_bilateral_2dsp.hpp:77
GLuint64 glEndTimeQuery(GLuint64 ret)
glEndTimeQuery
Definition: timings.hpp:46
FilterGLBilateral1D * filter
Definition: filter_bilateral_2dsp.hpp:36
virtual Fbo * getFbo()
getFbo
Definition: display.hpp:118
The FilterGLBilateral1D class.
Definition: filter_bilateral_1d.hpp:30
The ImageGL class.
Definition: image.hpp:42
bool Write(std::string nameFile, LDR_type typeWrite, int writerCounter)
Write saves an Image into a file on the disk.
Definition: filter_radial_basis_function.hpp:1924
void readFromFBO(Fbo *fbo)
readFromFBO
The FilterGLNPasses class.
Definition: display.hpp:36
std::string genBilString(std::string type, float sigma_s, float sigma_r)
genBilString
Definition: string.hpp:366
#define PIC_INLINE
Definition: base.hpp:33
The FilterGLBilateral2DSP class provides an approximated 2D bilateral filter using two 1D bilateral f...
Definition: filter_bilateral_2dsp.hpp:33
void update(float sigma_s, float sigma_r)
update
void releaseAux()
releaseAux
Definition: filter_bilateral_2dsp.hpp:56
int width
Definition: filter_radial_basis_function.hpp:80
Definition: bilateral_separation.hpp:25
The FilterGLBilateral1D class.
Definition: display.hpp:30
ImageGL * Process(ImageGLVec imgIn, ImageGL *imgOut)
Process.
Definition: filter_1d.hpp:182
Definition: image.hpp:37
int height
Definition: filter_radial_basis_function.hpp:80
void release()
release
Definition: display.hpp:85