18 #ifndef PIC_FILTERING_FILTER_BILATERAL_2DG_HPP 19 #define PIC_FILTERING_FILTER_BILATERAL_2DG_HPP 23 #include "../util/std_util.hpp" 25 #include "../filtering/filter.hpp" 26 #include "../filtering/filter_gaussian_3d.hpp" 27 #include "../image_samplers/image_sampler_bilinear.hpp" 142 printf(
"S Rate: %f R Rate: %f Mul E: %f\n",
s_S,
s_R,
mul_E);
153 #ifdef PIC_BILATERAL_GRID_MULTI_PASS 155 printf(
"Grid - Memory Mb: %3.2f\n",
157 (1024.0
f * 1024.0
f));
164 printf(
"Grid - Memory Mb: %3.2f\n",
166 (1024.0
f * 1024.0
f));
176 for(
int j = 0; j < base->
height; j++) {
179 for(
int i = 0; i < base->
width; i++) {
183 #ifdef PIC_BILATERAL_GRID_MULTI_PASS 184 float E = edge->
data[ind + channel];
188 for(
int k = 0; k < edge->
channels; k++) {
189 E += edge->
data[ind + k];
200 #ifdef PIC_BILATERAL_GRID_MULTI_PASS 205 for(
int k = 0; k < base->
channels; k++) {
223 #ifdef PIC_BILATERAL_GRID_MULTI_PASS 226 float *vOut =
new float [out->
channels + 1];
229 for(
int j = 0; j < out->
height; j++) {
230 for(
int i = 0; i < out->
width; i++) {
233 float x = float(i) *
s_S;
234 float y = float(j) *
s_S;
236 #ifdef PIC_BILATERAL_GRID_MULTI_PASS 237 float E = edge->
data[ind + channels];
247 #ifdef PIC_BILATERAL_GRID_MULTI_PASS 250 out->
data[ind + channels] = vOut[0] / vOut[1];
252 out->
data[ind + channels] = 0.0f;
257 for(
int k = 0; k < out->
channels; k++) {
286 float *baseMaxmaxVal = base->
getMaxVal(NULL, NULL);
288 delete[] baseMaxmaxVal;
290 if(imgIn.size() == 2) {
293 float *edgeMaxVal = edge->
getMaxVal(NULL, NULL);
313 #ifdef PIC_BILATERAL_GRID_MULTI_PASS 314 int n = imgIn[0]->channels;
318 mul_E =
s_R / float(imgIn[0]->channels);
321 for(
int i = 0; i < n; i++) {
323 Splat(base, edge, i);
329 Slice(imgOut, base, edge, i);
float s_S
Definition: filter_bilateral_2dg.hpp:74
std::string signature()
Signature.
Definition: filter_bilateral_2dg.hpp:80
float mul_E
Definition: filter_bilateral_2dg.hpp:74
Image * Splat(Image *base, Image *edge, int channel)
Splat splats values into the grid.
Definition: filter_bilateral_2dg.hpp:138
static T getMax(T *data, int size, int &ind)
getMax
Definition: array.hpp:516
float * data
data is the main buffer where pixel values are stored.
Definition: image.hpp:91
void setZero()
setZero sets data to 0.0f.
int channels
Definition: image.hpp:80
T * delete_s(T *data)
delete_s
Definition: std_util.hpp:123
std::vector< Image * > ImageVec
ImageVec an std::vector of pic::Image.
Definition: image_vec.hpp:29
PIC_INLINE long lround(double x)
lround rounds double numbers properly.
Definition: math.hpp:229
The Filter class.
Definition: filter.hpp:50
ImageSamplerBilinear isb
Definition: filter_bilateral_2dg.hpp:37
bool parallel
Definition: filter_bilateral_2dg.hpp:43
Image * grid
Definition: filter_bilateral_2dg.hpp:42
int frames
Definition: image.hpp:80
~FilterBilateral2DG()
Definition: filter_bilateral_2dg.hpp:131
float sigma_r
Definition: filter_bilateral_2dg.hpp:40
int width
Definition: filter_bilateral_2dg.hpp:39
void Slice(Image *out, Image *base, Image *edge, int channels)
Slice slices the grid into the output image.
Definition: filter_bilateral_2dg.hpp:216
float sigma_s
Definition: filter_bilateral_2dg.hpp:40
The FilterBilateral2DG class.
Definition: filter_bilateral_2dg.hpp:34
int range
Definition: filter_bilateral_2dg.hpp:39
Image * Process(ImageVec imgIn, Image *imgOut)
Process.
Definition: filter_npasses.hpp:310
float s_R
Definition: filter_bilateral_2dg.hpp:74
Image * gridBlur
Definition: filter_bilateral_2dg.hpp:42
static Image * execute(Image *imgIn, Image *imgOut, float sigma_s, float sigma_r)
execute
Definition: filter_bilateral_2dg.hpp:101
int xstride
Definition: image.hpp:82
static T sum(T *data, int size)
sum
Definition: array.hpp:416
std::string genBilString(std::string type, float sigma_s, float sigma_r)
genBilString
Definition: string.hpp:366
#define PIC_INLINE
Definition: base.hpp:33
void SampleImage(Image *img, float x, float y, float *vOut)
SampleImage samples an image in normalized coordiantes (0,1).
Definition: image_sampler_bilinear.hpp:42
The Image class stores an image as buffer of float.
Definition: image.hpp:60
virtual void f(FilterFData *data)
f
Definition: filter_radial_basis_function.hpp:69
int ystride
Definition: image.hpp:82
PIC_INLINE ImageVec Single(Image *img)
Single creates an std::vector which contains img; this is for filters input.
Definition: image_vec.hpp:36
Definition: bilateral_separation.hpp:25
int tstride
Definition: image.hpp:82
static T * assign(T *data, int size, T *ret)
assign
Definition: array.hpp:464
FilterBilateral2DG(float sigma_s, float sigma_r)
FilterBilateral2DG.
Definition: filter_bilateral_2dg.hpp:117
#define MAX(a, b)
Definition: math.hpp:73
The FilterGaussian3D class.
Definition: filter_gaussian_3d.hpp:29
Image * Process(ImageVec imgIn, Image *imgOut)
Process.
Definition: filter_bilateral_2dg.hpp:269
FilterGaussian3D * fltG
Definition: filter_bilateral_2dg.hpp:38
virtual Image * setupAux(ImageVec imgIn, Image *imgOut)
setupAux
Definition: filter.hpp:288
float * getMaxVal(BBox *box, float *ret)
getMaxVal computes the maximum value for the current Image.
int width
Definition: image.hpp:80
bool checkInput(ImageVec &imgIn)
checkInput
Definition: filter.hpp:385
The ImageSamplerBilinear class.
Definition: image_sampler_bilinear.hpp:28
int height
Definition: image.hpp:80
int height
Definition: filter_bilateral_2dg.hpp:39