Visual Vibration Tracking 0.2
Загрузка...
Поиск...
Не найдено
helper.h
1#ifndef HELPER_H
2#define HELPER_H
3
4// Отключаю варнинги на безопасность, чтобы localtime(&time) не ругалась. Пока тут Си-шная реализация, попозже переделаю
5#define _CRT_SECURE_NO_WARNINGS
6
7// standart headers
8#include <iostream>
9#include <fstream>
10
11// OpenCV headers
12#include <opencv2/opencv.hpp>
13
17namespace HelperFunctions {
28 std::string GenerateCsvFilename(std::string additional_text = "");
37 cv::Scalar RatioToRgb(double ratio);
41 void FindLocalMaxima(cv::Mat& input_array, cv::Mat& local_maxima, double threshold_value);
48 template <typename T>
49 std::string ToStringWithPrecision(const T value, const int n = 9)
50 {
51 std::ostringstream out;
52 out.precision(n);
53 out << std::fixed << value;
54 return out.str();
55 }
60 template<class T>
61 void DeadzoneFilter(std::vector<T>& input_vector)
62 {
63 float dead_zone_factor = 0.1f;
64 for (int i = 0; i < static_cast<int>(input_vector.size() * dead_zone_factor); i++)
65 {
66 input_vector.erase(std::begin(input_vector));
67 }
68 }
74 template<class T>
75 std::vector<T> MakeShorterFromStart(std::vector<T> src, int n)
76 {
77 auto it = src.end();
78 std::vector<T> dst;
79
80 if (n < src.size())
81 return src;
82
83 while (it != (src.end() - n))
84 {
85 dst.push_back(*it);
86 it--;
87 }
88
89 return dst;
90 }
95 template<typename T>
96 T CalculateMeanDifferenceInVector(std::vector<T> src)
97 {
98 std::vector<T> difference_vector;
99
100 auto it = src.begin();
101 while (it != (src.end() - 1))
102 {
103 difference_vector.push_back(*(it + 1) - *it);
104 it++;
105 }
106
107 T mean_difference;
108
109 it = difference_vector.begin();
110 mean_difference = *it;
111 it++;
112
113 while (it != difference_vector.end())
114 {
115 mean_difference += *it;
116 it++;
117 }
118 mean_difference /= difference_vector.size();
119
120 return mean_difference;
121 }
126 template<typename T>
127 int FindGlobalMaxIdx(std::vector<T> src)
128 {
129 auto it = src.begin();
130 int idx = 0;
131 T last_max = 0;
132 while (it != src.end())
133 {
134 if (*it > last_max)
135 {
136 idx = std::distance(src.begin(), it);
137 last_max = *it;
138 }
139 it++;
140 }
141
142 return idx;
143 }
148 template<typename T>
149 int FindGlobalMinIdx(std::vector<T> src)
150 {
151 auto it = src.begin();
152 int idx = 0;
153 T last_max = 0;
154 while (it != src.end())
155 {
156 if (*it < last_max)
157 {
158 idx = std::distance(src.begin(), it);
159 last_max = *it;
160 }
161 it++;
162 }
163
164 return idx;
165 }
170 template<typename T>
171 T CalculateMaxDifferenceInVector(std::vector<T> src)
172 {
173 std::vector<T> difference_vector;
174
175 auto it = src.begin();
176 while (it != (src.end() - 1))
177 {
178 difference_vector.push_back(*(it + 1) - *it);
179 it++;
180 }
181
182 cv::Scalar cv_scalar_mean_val = cv::mean(src);
183 T mean_val = cv_scalar_mean_val[0];
184
185 return difference_vector[FindGlobalMaxIdx(difference_vector)] / mean_val;
186 }
187
189}
190
191#endif
void DeadzoneFilter(std::vector< T > &input_vector)
Частотный фильтр для нижней части диапазона
Definition: helper.h:61
std::string GenerateCsvFilename(std::string additional_text="")
Генерирует имя CSV файла для сохранения метаданных
Definition: helper.cpp:3
cv::Scalar RatioToRgb(double ratio)
Генерирует имя TXT файла для сохранени
Definition: helper.cpp:28
std::vector< T > MakeShorterFromStart(std::vector< T > src, int n)
Укорачивает вектор, убирая элементы слева (спереди)
Definition: helper.h:75
int FindGlobalMinIdx(std::vector< T > src)
Возвращает индекс самого маленького элемента вектора src.
Definition: helper.h:149
int FindGlobalMaxIdx(std::vector< T > src)
Возвращает индекс самого большого элемента вектора src.
Definition: helper.h:127
std::string ToStringWithPrecision(const T value, const int n=9)
Выполняет округление числа с определенной точностью
Definition: helper.h:49
void FindLocalMaxima(cv::Mat &input_array, cv::Mat &local_maxima, double threshold_value)
Эта функция пригодится. Разберусь с ней чуть позже
Definition: helper.cpp:52
T CalculateMaxDifferenceInVector(std::vector< T > src)
Вычисляет максимальное значение разности элементов массива
Definition: helper.h:171
T CalculateMeanDifferenceInVector(std::vector< T > src)
Вычисляет среднее значение разности элементов массива в виде ((a0 - a1) + (a1 - a2)) / 3.
Definition: helper.h:96
Функции в этом пространстве имен используются для генерирования имени csv-файла для записи и конверти...
Definition: helper.h:17