OpenEV
Extending OpenCV to event-based vision
 
Loading...
Searching...
No Matches
deque.hpp
Go to the documentation of this file.
1
6#ifndef OPENEV_CONTAINERS_DEQUE_HPP
7#define OPENEV_CONTAINERS_DEQUE_HPP
8
9#include "openev/containers/array.hpp"
10#include "openev/containers/vector.hpp"
11#include "openev/core/types.hpp"
12#include <cstddef>
13#include <deque>
14#include <numeric>
15#include <opencv2/core/types.hpp>
16#include <utility>
17
18namespace ev {
20#ifndef OPENEV_ARRAY_HPP
21template <typename T, std::size_t N>
22class Array_;
23#endif
24
25#ifndef OPENEV_VECTOR_HPP
26template <typename T>
27class Vector_;
28#endif
30
36template <typename T>
37class Deque_ : public std::deque<Event_<T>> {
38 using std::deque<Event_<T>>::deque;
39
40public:
42 inline void push_back(const Event_<T> &e) {
43 std::deque<Event_<T>>::push_back(e);
44 }
46
51 template <std::size_t N>
52 inline void push_back(const Array_<T, N> &array) {
53 std::deque<Event_<T>>::insert(std::deque<Event_<T>>::end(), array.begin(), array.end());
54 }
55
60 inline void push_back(const Vector_<T> &vector) {
61 std::deque<Event_<T>>::insert(std::deque<Event_<T>>::end(), vector.begin(), vector.end());
62 }
63
68 [[nodiscard]] inline double duration() const {
69 return std::deque<Event_<T>>::back().t - std::deque<Event_<T>>::front().t;
70 }
71
76 [[nodiscard]] inline double rate() const {
77 return std::deque<Event_<T>>::size() / duration();
78 }
79
84 [[nodiscard]] Eventd mean() {
85 const double x = std::accumulate(std::deque<Event_<T>>::begin(), std::deque<Event_<T>>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.x; }) / std::deque<Event_<T>>::size();
86 const double y = std::accumulate(std::deque<Event_<T>>::begin(), std::deque<Event_<T>>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.y; }) / std::deque<Event_<T>>::size();
87 const double t = std::accumulate(std::deque<Event_<T>>::begin(), std::deque<Event_<T>>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.t; }) / std::deque<Event_<T>>::size();
88 const double p = std::accumulate(std::deque<Event_<T>>::begin(), std::deque<Event_<T>>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.p; }) / std::deque<Event_<T>>::size();
89 return {x, y, t, p > 0.5};
90 }
91
96 [[nodiscard]] inline cv::Point2d meanPoint() {
97 const double x = std::accumulate(std::deque<Event_<T>>::begin(), std::deque<Event_<T>>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.x; }) / std::deque<Event_<T>>::size();
98 const double y = std::accumulate(std::deque<Event_<T>>::begin(), std::deque<Event_<T>>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.y; }) / std::deque<Event_<T>>::size();
99 return {x, y};
100 }
101
106 [[nodiscard]] inline double meanTime() {
107 return std::accumulate(std::deque<Event_<T>>::begin(), std::deque<Event_<T>>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.t; }) / std::deque<Event_<T>>::size();
108 }
109
114 [[nodiscard]] inline double midTime() const {
115 return 0.5 * (std::deque<Event_<T>>::front().t + std::deque<Event_<T>>::back().t);
116 }
117};
122using Deque = Dequei;
123} // namespace ev
124
125#endif // OPENEV_CONTAINERS_DEQUE_HPP
This class extends std::array to implement event arrays. For more information, please refer here.
Definition array.hpp:22
This class extends std::deque to implement event deques. For more information, please refer here.
Definition deque.hpp:37
void push_back(const Vector_< T > &vector)
Push elements from a vector of events.
Definition deque.hpp:60
cv::Point2d meanPoint()
Compute the mean x,y point of the events.
Definition deque.hpp:96
void push_back(const Array_< T, N > &array)
Push elements from an array of events.
Definition deque.hpp:52
double rate() const
Compute event rate as the ratio between the number of events and the time difference between the last...
Definition deque.hpp:76
Eventd mean()
Compute the mean of the events.
Definition deque.hpp:84
double duration() const
Time difference between the last and the first event.
Definition deque.hpp:68
double meanTime()
Compute the mean time of the events.
Definition deque.hpp:106
double midTime() const
Calculate the midpoint time between the oldest and the newest event.
Definition deque.hpp:114
This class extends cv::Point_<T> for event data. For more information, please refer here.
Definition types.hpp:62
bool p
Definition types.hpp:65
double t
Definition types.hpp:64
This class extends std::vector to implement event vectors. For more information, please refer here.
Definition vector.hpp:36
Deque_< double > Dequed
Definition deque.hpp:121
Deque_< int > Dequei
Definition deque.hpp:118
Deque_< float > Dequef
Definition deque.hpp:120
Dequei Deque
Definition deque.hpp:122
Deque_< long > Dequel
Definition deque.hpp:119
Basic event-based vision structures based on OpenCV components.
Event_< double > Eventd
Definition types.hpp:243