Visual Vibration Tracking 0.2
Загрузка...
Поиск...
Не найдено
vibrating_point.h
1#ifndef VIBRATING_POINT_H
2#define VIBRATING_POINT_H
3
4// standart headers
5#include <iostream>
6#include <fstream>
7
8// OpenCV headers
9#include <opencv2/opencv.hpp>
10
11// other headers
12#include "VVT-V2/peak_finder.h"
13#include "VVT-V2/helper.h"
14
15using namespace cv;
16
25{
26public:
32 void ExecuteFFT();
37 void AddNewPointPosition(Point2f position);
42 void AddNewPointTime(double time);
47 bool IsInteracted(Point2i coordinates);
51 void SetSensivity(double sensivity);
55 void CalculateAmplitude();
60 virtual void Draw(Mat& frame) = 0;
61
62protected:
66 virtual void DrawHistogram() = 0;
70 virtual void UpdatePointColor() = 0;
71
72
73// Геттеры
74public:
82 std::vector<double> GetCurrentVibrationFrequency();
90 Point3f GetRelativeAmplitude();
94 Point3f GetCurrentAmplitude();
99
100public:
106 static inline std::pair<double, double> extremum_amplitude_;
107
108protected:
123
135 std::vector<Point2f> point_coordinates_;
139 std::vector<double> x_coordinates_;
143 std::vector<double> y_coordinates_;
147 std::vector<cv::Point2f> vec_meaned_coordinates_of_point_;
151 std::vector<double> frequencies_;
159 std::vector<double> point_time_coordinates_;
172
176 std::vector<double> x_;
180 std::vector<float> y_;
189
190private:
195 std::vector<float> mag_max_differences_;
196};
197
198#endif
Абстрактный класс для описания вибрирующей точки
void ExecuteFFT()
Выполняет БПФ для нахождения частоты вибрации.
bool interacted_
Флаг взаимодействия с точкой
double GetCurrentConfidenceLevel()
Возвращает последний найденный уровень достоверности
void AddNewPointPosition(Point2f position)
Добавляет новую пространственную координату в конец контейнера VibratingPoint::point_coordinates_;.
virtual void DrawHistogram()=0
Отрисовывает гистограмму спектра частот колебаний точки (полученную после БПФ в методе ExecuteFFT())
std::vector< double > GetCurrentVibrationFrequency()
Возвращает вектор текущих частот точки
bool IsInteracted(Point2i coordinates)
Проверяет точку на наличие взаимодействия с ней (если курсор попал в область взаимодействия точки Vib...
void AddNewPointTime(double time)
Добавляет новую временную координату (время кадра, на котором новая позиция точки была трекнута) в ко...
Point3f current_amplitude_
Фактические амплитуды вибрации по x, y. Выражаюытся в пикселях
Rect interaction_box_
Прямоугольник (область) взаимодействия с точкой
double GetCurrentMainFrequency()
Возвращает текущую "основную" частоту
std::vector< double > y_coordinates_
Контейнер для координат точки по оси Y.
std::vector< double > x_
Контейнер для хранения координат гистограммы по оси X (фактически - найденный спектр частот вибрации ...
std::vector< double > x_coordinates_
Контейнер для координат точки по оси X.
double sampling_rate_
Частота сэмплирования (фактически - FPS исходного видео)
std::vector< float > mag_max_differences_
Максимальная разнциа в магнитудах в найденном спектре после БПФ
double confidence_level_
Рейтинг достоверности вибрации
virtual void Draw(Mat &frame)=0
Отрисовывает точку на кадре
int interaction_offset_
Половина длины прямоугольника взаимодействия
Point3f relative_amplitude_
Относительные амплитуды вибрации по x, y. Выражается отношением амплитуды
double main_frequency_
Главная частота (основная)
std::vector< float > y_
Контейнер для хранения координат гистограммы по оси Y (фактически - найденные магнитуды точки после в...
std::vector< cv::Point2f > vec_meaned_coordinates_of_point_
Контейнер для координат точки относительно нулевого уровня
virtual void UpdatePointColor()=0
Обновляем текущий цвет точки
double sensivity_
Чувствительность определения вибрации
Point3f GetCurrentAmplitude()
Возвращает последнюю найденную относительную амплитуду
int current_point_radius_
Радиус точки, который нужен для её отрисовки
std::vector< double > point_time_coordinates_
Контейнер для временных координат точки
void SetSensivity(double sensivity)
Устанавливает чувствительность, влияющую на confidence.
std::vector< double > frequencies_
Контейнер для частот точки
Point3f GetRelativeAmplitude()
Возвращает последнюю найденную относительную амплитуду
int default_point_radius_
Дефолтный радиус точки
Point2f GetLastFoundCoordinates()
Возвращает последний элемент вектора координат
std::vector< Point2f > point_coordinates_
Контейнер для координат точки
static std::pair< double, double > extremum_amplitude_
Максимум и минимум амплитуды среди всех VibratingPoint объектов-наследников
void CalculateAmplitude()
Проводит необходимые для вычисления амплитуды вычисления