OpenEV
Extending OpenCV to event-based vision
 
Loading...
Searching...
No Matches
vector.hpp
1
6#ifndef OPENEV_CONTAINERS_VECTOR_HPP
7#define OPENEV_CONTAINERS_VECTOR_HPP
8
10#include <numeric>
11#include <opencv2/core/types.hpp>
12#include <vector>
13
14namespace ev {
20template <typename T>
21class Vector_ : public std::vector<Event_<T>> {
22 using std::vector<Event_<T>>::vector;
23
24public:
29 [[nodiscard]] inline double duration() const {
30 return std::vector<ev::Event_<T>>::back().t - std::vector<ev::Event_<T>>::front().t;
31 }
32
37 [[nodiscard]] inline double rate() const {
38 return std::vector<ev::Event_<T>>::size() / duration();
39 }
40
45 [[nodiscard]] inline Eventd mean() const {
46 const double x = std::accumulate(std::vector<ev::Event_<T>>::begin(), std::vector<ev::Event_<T>>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.x; }) / std::vector<ev::Event_<T>>::size();
47 const double y = std::accumulate(std::vector<ev::Event_<T>>::begin(), std::vector<ev::Event_<T>>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.y; }) / std::vector<ev::Event_<T>>::size();
48 const double t = std::accumulate(std::vector<ev::Event_<T>>::begin(), std::vector<ev::Event_<T>>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.t; }) / std::vector<ev::Event_<T>>::size();
49 const double p = std::accumulate(std::vector<ev::Event_<T>>::begin(), std::vector<ev::Event_<T>>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.p; }) / std::vector<ev::Event_<T>>::size();
50 return {x, y, t, p > 0.5};
51 }
52
57 [[nodiscard]] inline cv::Point2d meanPoint() const {
58 const double x = std::accumulate(std::vector<ev::Event_<T>>::begin(), std::vector<ev::Event_<T>>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.x; }) / std::vector<ev::Event_<T>>::size();
59 const double y = std::accumulate(std::vector<ev::Event_<T>>::begin(), std::vector<ev::Event_<T>>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.y; }) / std::vector<ev::Event_<T>>::size();
60 return {x, y};
61 }
62
67 [[nodiscard]] inline double meanTime() const {
68 return std::accumulate(std::vector<ev::Event_<T>>::begin(), std::vector<ev::Event_<T>>::end(), 0.0, [](double sum, const Event_<T> &e) { return sum + e.t; }) / std::vector<ev::Event_<T>>::size();
69 }
70
75 [[nodiscard]] inline double midTime() const {
76 return 0.5 * (std::vector<ev::Event_<T>>::front().t + std::vector<ev::Event_<T>>::back().t);
77 }
78};
79using Vectori = Vector_<int>;
80using Vectorl = Vector_<long>;
81using Vectorf = Vector_<float>;
82using Vectord = Vector_<double>;
83using Vector = Vectori;
84} // namespace ev
85
86#endif // OPENEV_CONTAINERS_VECTOR_HPP
This class extends cv::Point_<T> for event data. For more information, please refer here.
Definition types.hpp:56
bool p
Definition types.hpp:59
double t
Definition types.hpp:58
This class extends std::vector to implement event vectors. For more information, please refer here.
Definition vector.hpp:21
double midTime() const
Calculate the midpoint time between the oldest and the newest event.
Definition vector.hpp:75
double rate() const
Compute event rate as the ratio between the number of events and the time difference between the last...
Definition vector.hpp:37
double duration() const
Time difference between the last and the first event.
Definition vector.hpp:29
double meanTime() const
Compute the mean time of the events.
Definition vector.hpp:67
Eventd mean() const
Compute the mean of the events.
Definition vector.hpp:45
cv::Point2d meanPoint() const
Compute the mean x,y point of the events.
Definition vector.hpp:57
Basic event-based vision structures based on OpenCV components.
Event_< double > Eventd
Definition types.hpp:230