PICCANTE  0.4
The hottest HDR imaging library!
filter_zero_crossing.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_ZERO_CROSSING_HPP
19 #define PIC_FILTERING_FILTER_ZERO_CROSSING_HPP
20 
21 #include "../filtering/filter.hpp"
22 
23 namespace pic {
24 
29 {
30 protected:
31 
36  void f(FilterFData *data)
37  {
38 
39  float value;
40 
41  float *data_src = (*data->src[0])(data->x, data->y);
42  float *data_src0 = (*data->src[0])(data->x, data->y + 1);
43  float *data_src1 = (*data->src[0])(data->x + 1, data->y);
44 
45  for(int k = 0; k < data->src[0]->channels; k++) {
46  value = (data_src[k] == 0.0f) ? 1.0f : 0.0f;
47  value = (data_src[k] > 0.0f && data_src0[k] < 0.0f) ? 1.0f : value;
48  value = (data_src[k] < 0.0f && data_src0[k] > 0.0f) ? 1.0f : value;
49  value = (data_src[k] > 0.0f && data_src1[k] < 0.0f) ? 1.0f : value;
50  value = (data_src[k] < 0.0f && data_src1[k] > 0.0f) ? 1.0f : value;
51  data->out[k] = value;
52  }
53  }
54 
61  /*
62  void ProcessBBox(Image *dst, ImageVec src, BBox *box)
63  {
64  Image *src_p = src[0];
65 
66  int channels = src_p->channels;
67  float value;
68 
69  for(int i = box->y0; i < box->y1; i++) {
70 
71  for(int j = box->x0; j < box->x1; j++) {
72 
73  float *data_src = (*src_p)(j, i);
74  float *data_dst = (*dst)(j, i);
75 
76  float *data_src0 = (*src_p)(j, i + 1);
77  float *data_src1 = (*src_p)(j + 1, i);
78 
79  for(int k = 0; k < channels; k++) {
80  value = (data_src[k] == 0.0f) ? 1.0f : 0.0f;
81  value = (data_src[k] > 0.0f && data_src0[k] < 0.0f) ? 1.0f : value;
82  value = (data_src[k] < 0.0f && data_src0[k] > 0.0f) ? 1.0f : value;
83  value = (data_src[k] > 0.0f && data_src1[k] < 0.0f) ? 1.0f : value;
84  value = (data_src[k] < 0.0f && data_src1[k] > 0.0f) ? 1.0f : value;
85  data_dst[k] = value;
86  }
87  }
88  }
89  }
90  */
91 
92 public:
93 
99  {
100  }
101 
103  {
104  }
105 
112  static Image *execute(Image *imgIn, Image *imgOut)
113  {
114  FilterZeroCrossing flt;
115  return flt.Process(Single(imgIn), imgOut);
116  }
117 };
118 
119 } // end namespace pic
120 
121 #endif /* PIC_FILTERING_FILTER_ZERO_CROSSING_HPP */
122 
int y
Definition: filter.hpp:39
The FilterZeroCrossing class.
Definition: filter_zero_crossing.hpp:28
The Filter class.
Definition: filter.hpp:50
virtual Image * Process(ImageVec imgIn, Image *imgOut)
Process.
Definition: filter.hpp:390
Definition: filter.hpp:37
float * out
Definition: filter.hpp:40
static Image * execute(Image *imgIn, Image *imgOut)
execute
Definition: filter_zero_crossing.hpp:112
FilterZeroCrossing()
ProcessBBox.
Definition: filter_zero_crossing.hpp:98
int x
Definition: filter.hpp:39
The Image class stores an image as buffer of float.
Definition: image.hpp:60
ImageVec src
Definition: filter.hpp:43
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
~FilterZeroCrossing()
Definition: filter_zero_crossing.hpp:102
void f(FilterFData *data)
f
Definition: filter_zero_crossing.hpp:36