Visual Vibration Tracking 0.2
Загрузка...
Поиск...
Не найдено
colored_point_handler.cpp
1#include "VVT-V2/colored_point_handler.h"
2
3ColoredPointHandler::ColoredPointHandler(Point2f init_coordinates, double sampling_rate, int point_id, float radius_resize_factor, std::string output_csv_filename) :
4 Histogram{ 600, 300, sampling_rate / 2, point_id, x_, y_ },
5 OutputToCsv{ output_csv_filename, point_coordinates_, point_time_coordinates_, point_id },
6 point_id_{ point_id },
7 radius_resize_factor_{ radius_resize_factor },
8 coloring_mode_{ COLORING_BASED_ON_FREQUENCY }
9{
11 sampling_rate_ = sampling_rate;
12
13 // Добавляем первые координаты клика мышью
14 point_coordinates_.push_back(init_coordinates);
15 interaction_box_ = Rect(
16 Point2i(init_coordinates.x - interaction_offset_, init_coordinates.y - interaction_offset_),
17 Point2i(init_coordinates.x + interaction_offset_, init_coordinates.y + interaction_offset_)
18 );
19 interacted_ = false;
20
21 default_point_radius_ = 4 * radius_resize_factor;
23
24 frequencies_.push_back(0.0);
25 relative_amplitude_ = Point3f(0.0, 0.0, 0.0);
26
27 sensivity_ = 0.01;
29
30 point_color_ = Scalar(0, 0, 255);
31}
32
34{
35 Write();
36}
37
39{
40 // отрисовываем круг вокруг точки
41 DrawPoint(frame);
42 // отрисовываем гистограмму
44}
45
47{
48 coloring_mode_ = coloring_mode;
49}
50
52{
54 {
58 }
59}
60
62{
64 // отрисовываем круг вокруг точки
65 circle(frame, point_coordinates_.back(), current_point_radius_, point_color_, FILLED);
66}
67
69{
70 rectangle(frame, interaction_box_, Scalar(0, 0, 255), 1);
71}
72
74{
75 switch (coloring_mode_)
76 {
77 case DEFAULT:
78 {
80 point_color_ = Scalar(0, 0, 255);
81 break;
82 }
83 case COLORING_BASED_ON_FREQUENCY:
84 {
86 // переведём диапазон частоты [0; range_limit] в [0; 255] int color value;
87 if (!frequencies_.empty())
88 {
90 }
91 break;
92 }
93 case COLORING_BASED_ON_AMPLITUDE:
94 {
96 // переведём диапазон амплитуд [0; max_amplitude_] в [0; 255] int color value;
97 double current_amplitude_absolute = sqrt(current_amplitude_.x * current_amplitude_.x + current_amplitude_.y * current_amplitude_.y);
98 double ratio = (current_amplitude_absolute - extremum_amplitude_.second) / (extremum_amplitude_.first - extremum_amplitude_.second);
100 if (point_color_ == Scalar(0, 0, 0))
101 {
102 std::cout << "ratio: " << ratio << std::endl;
103 std::cout << "current_amplitude_.x: " << current_amplitude_.x << std::endl;
104 std::cout << "max ampl: " << extremum_amplitude_.first << std::endl;
105 std::cout << "min ampl: " << extremum_amplitude_.second << std::endl;
106 }
107 break;
108 }
109 }
110 if (interacted_)
111 {
112 point_color_ = Scalar(255, 255, 255);
114 }
115}
void DrawPoint(Mat &frame)
Отрисовывает точку на кадре
void DrawHistogram() override
Отрисовывает гистограмму
Scalar point_color_
Цвет точки
ColoredPointHandler(Point2f init_coordinates, double sampling_rate, int point_id, float radius_resize_factor, std::string output_csv_filename)
Конструктор этого класса
~ColoredPointHandler()
Деструктор этого класса
void SetColoringMode(int coloring_mode)
Устанавливает нужный режим отрисовки цветом
coloring_mode
Перечисление, используемое для более удобного отображения текущего режима подсветки точки
void Draw(Mat &frame) override
Отрисовывает точку и данные, связанные с ней
void UpdatePointColor() override
Обновляет текущий цвет точки
void DrawInteractionRectangle(Mat &frame)
Отрисовывает прямоугольник взаимодействия
Класс для создания объектов-гистограмм, на которые можно выводить различную информацию
Definition: histogram.h:17
void ShowHistogram()
Выводит гистограмму в окно гистограммы
Definition: histogram.cpp:54
void SetYValues(std::vector< float > y_values)
Устанавливает Y-ы
Definition: histogram.cpp:69
void SetXValues(std::vector< double > x_values)
Устанавливает X-ы
Definition: histogram.cpp:64
bool is_histogram_plotted_
Флаг для отрисовки гистограммы
Definition: histogram.h:93
Класс для сохранения метаданных (временных и пространственных координат, ID точки)
Definition: output_to_csv.h:18
void Write()
Добавляет данные для записи
bool interacted_
Флаг взаимодействия с точкой
Point3f current_amplitude_
Фактические амплитуды вибрации по x, y. Выражаюытся в пикселях
Rect interaction_box_
Прямоугольник (область) взаимодействия с точкой
std::vector< double > x_
Контейнер для хранения координат гистограммы по оси X (фактически - найденный спектр частот вибрации ...
double sampling_rate_
Частота сэмплирования (фактически - FPS исходного видео)
double confidence_level_
Рейтинг достоверности вибрации
int interaction_offset_
Половина длины прямоугольника взаимодействия
Point3f relative_amplitude_
Относительные амплитуды вибрации по x, y. Выражается отношением амплитуды
double main_frequency_
Главная частота (основная)
std::vector< float > y_
Контейнер для хранения координат гистограммы по оси Y (фактически - найденные магнитуды точки после в...
double sensivity_
Чувствительность определения вибрации
int current_point_radius_
Радиус точки, который нужен для её отрисовки
std::vector< double > frequencies_
Контейнер для частот точки
int default_point_radius_
Дефолтный радиус точки
std::vector< Point2f > point_coordinates_
Контейнер для координат точки
static std::pair< double, double > extremum_amplitude_
Максимум и минимум амплитуды среди всех VibratingPoint объектов-наследников
cv::Scalar RatioToRgb(double ratio)
Генерирует имя TXT файла для сохранени
Definition: helper.cpp:28