22 void temp_jw_smooth(
void* frame_data,
void * _last_frame_data, uint8_t *history)
29 const T noise = fp ?
static_cast<T
>(0.001f) : static_cast<T>(3);
31 T max_radius =
static_cast<T
>(fp ? _delta_param/250.f : _delta_param);
33 auto frame =
reinterpret_cast<T*
>(frame_data);
34 auto _last_frame =
reinterpret_cast<T*
>(_last_frame_data);
36 unsigned char mask = 1 << _cur_frame_index;
39 for (
size_t i = 0; i < _current_frm_size_pixels; i++)
42 T prev_val = _last_frame[i];
48 _last_frame[i] = cur_val;
53 T diff =
static_cast<T
>(fabs(cur_val - prev_val));
55 if (diff > noise && (diff/cur_val) < max_radius)
58 float filtered = _alpha_param * cur_val + _one_minus_alpha * prev_val;
59 T result =
static_cast<T
>(filtered);
61 _last_frame[i] = result;
65 _last_frame[i] = cur_val;
74 unsigned char hist = history[i];
75 unsigned char classification = _persistence_map[hist];
76 if (classification & mask)
85 _cur_frame_index = (_cur_frame_index + 1) % 8;
89 void on_set_persistence_control(uint8_t val);
90 void on_set_alpha(
float val);
91 void on_set_delta(
float val);
93 void recalc_persistence_map();
95 uint8_t _persistence_param;
98 float _one_minus_alpha;
100 size_t _width, _height, _stride;
103 size_t _current_frm_size_pixels;
106 std::vector<uint8_t> _last_frame;
107 std::vector<uint8_t> _history;
108 uint8_t _cur_frame_index;
110 std::array<uint8_t, PRESISTENCY_LUT_SIZE> _persistence_map;
Definition: rs_frame.hpp:21
Definition: rs_frame.hpp:202
Definition: synthetic-stream.h:41
Definition: temporal-filter.h:11
Definition: rs_processing.hpp:13
void temp_jw_smooth(void *frame_data, void *_last_frame_data, uint8_t *history)
Definition: temporal-filter.h:22
void update_configuration(const rs2::frame &f)
rs2::frame prepare_target_frame(const rs2::frame &f, const rs2::frame_source &source)
rs2_extension
Specifies advanced interfaces (capabilities) objects may implement.
Definition: rs_types.h:93
const size_t PRESISTENCY_LUT_SIZE
Definition: temporal-filter.h:9