13 #include "../include/librealsense2/hpp/rs_frame.hpp" 14 #include "../include/librealsense2/hpp/rs_processing.hpp" 29 void dxf_smooth(
void *frame_data,
float alpha,
float delta,
int iterations)
33 for (
int i = 0; i < iterations; i++)
35 recursive_filter_horizontal<T>(frame_data, alpha, delta);
36 recursive_filter_vertical<T>(frame_data, alpha, delta);
49 const float round = fp ? 0.f : 0.5f;
52 const T noise = fp ?
static_cast<T
>(0.001f) : static_cast<T>(4);
53 const T max_radius =
static_cast<T
>(fp ? 2.f : deltaZ);
55 auto image =
reinterpret_cast<T*
>(image_data);
58 for (v = 0; v < _height; v++)
61 T *im = image + v * _width;
65 for (u = 1; u < _width-1; u++)
74 T diff =
static_cast<T
>(fabs(val1 - val0));
76 if (diff >= noise && diff <= max_radius)
78 float filtered = val1 * alpha + val0 * (1.0f - alpha);
79 val1 =
static_cast<T
>(filtered + round);
85 if (_holes_filling_radius)
87 if (++cur_fill <_holes_filling_radius)
98 im = image + (v + 1) * _width - 2;
102 for (u = _width - 1; u > 0; u--)
111 T diff =
static_cast<T
>(fabs(val1 - val0));
113 if (diff >= noise && diff <= max_radius)
115 float filtered = val0 * alpha + val1 * (1.0f - alpha);
116 val0 =
static_cast<T
>(filtered + round);
122 if (_holes_filling_radius)
124 if (++cur_fill <_holes_filling_radius)
136 template <
typename T>
145 const float round = fp ? 0.f : 0.5f;
148 const T noise = fp ?
static_cast<T
>(0.001f) : static_cast<T>(4);
149 const T max_radius =
static_cast<T
>(fp ? 2.f : deltaZ);
151 auto image =
reinterpret_cast<T*
>(image_data);
160 for (v = 1; v < _height; v++)
162 for (u = 0; u < _width; u++)
167 if ((im0 >noise) && (imw > noise))
169 float delta =
static_cast<float>(fabs(im0 - imw));
170 if (delta > noise && delta < max_radius)
172 float filtered = imw * alpha + im0 * (1.f - alpha);
173 im[_width] =
static_cast<T
>(filtered + round);
181 im = image + (_height - 2) * _width;
182 for (v = 1; v < _height; v++, im -= (_width * 2))
184 for (u = 0; u < _width; u++)
189 if ((im0 >noise) && (imw > noise))
191 float delta =
static_cast<float>(fabs(im0 - imw));
192 if (delta > noise && delta < max_radius)
194 float filtered = im0 * alpha + imw * (1.f - alpha);
195 im[0] =
static_cast<T
>(filtered + round);
205 float _spatial_alpha_param;
206 uint8_t _spatial_delta_param;
207 uint8_t _spatial_iterations;
208 float _spatial_radius;
209 size_t _width, _height, _stride;
212 size_t _current_frm_size_pixels;
215 bool _stereoscopic_depth;
216 float _focal_lenght_mm;
217 float _stereo_baseline_mm;
218 uint8_t _holes_filling_mode;
219 uint8_t _holes_filling_radius;
Definition: rs_frame.hpp:21
Definition: rs_frame.hpp:202
void recursive_filter_horizontal(void *image_data, float alpha, float deltaZ)
Definition: spatial-filter.h:41
rs2::frame prepare_target_frame(const rs2::frame &f, const rs2::frame_source &source)
Definition: synthetic-stream.h:41
Definition: rs_processing.hpp:13
void dxf_smooth(void *frame_data, float alpha, float delta, int iterations)
Definition: spatial-filter.h:29
void update_configuration(const rs2::frame &f)
Definition: spatial-filter.h:18
rs2_extension
Specifies advanced interfaces (capabilities) objects may implement.
Definition: rs_types.h:93
void recursive_filter_vertical(void *image_data, float alpha, float deltaZ)
Definition: spatial-filter.h:137