Visual Vibration Tracking 0.2
Загрузка...
Поиск...
Не найдено
Открытые члены | Закрытые члены | Закрытые данные | Полный список членов класса
Класс LonelyPointHandler

Дочерний (от VibratingPoint) класс. Предназначен для помещения точки на кадр и отслеживания её вибрации впоследствии Подробнее...

#include <lonely_point_handler.h>

Граф наследования:LonelyPointHandler:
Inheritance graph
[см. легенду]
Граф связей класса LonelyPointHandler:
Collaboration graph
[см. легенду]

Открытые члены

 LonelyPointHandler (Point2f init_coordinates, double sampling_rate, int point_id, float text_resize_factor, std::string output_csv_filename)
 Конструктор этого класса Подробнее...
 
 ~LonelyPointHandler ()
 Деструктор этого класса Подробнее...
 
void Draw (Mat &frame) override
 Отрисовывает точку и данные, связанные с ней Подробнее...
 
Point2f GetTextCoordinates ()
 Возвращает точку, необходимую для отображения координат Подробнее...
 
Rect GetInteractionRect ()
 Возвращает координаты прямоугольника взаимодействия Подробнее...
 
- Открытые члены унаследованные от Histogram
 Histogram (int width, int height, int x_limit, int id, std::vector< double > &x_values, std::vector< float > &y_values)
 Конструктор этого класса Подробнее...
 
 ~Histogram ()
 Деструктор этого класса Подробнее...
 
void DetectEvent (int event, int x, int y, int flags)
 callback функция для определения события (используется для хэндлинга клика мышью) Подробнее...
 
void ShowHistogram ()
 Выводит гистограмму в окно гистограммы Подробнее...
 
void SetXValues (std::vector< double > x_values)
 Устанавливает X-ы Подробнее...
 
void SetYValues (std::vector< float > y_values)
 Устанавливает Y-ы Подробнее...
 
void SetHistogramFlag (bool flag)
 Устанавливает статус флага отрисовки гистограммы Подробнее...
 
void SetHistogramWindowProperty (int prop_id, int prop_value)
 Обновляет статус окна гистограммы (например, для вывода на передний план) Подробнее...
 
- Открытые члены унаследованные от VibratingPoint
void ExecuteFFT ()
 Выполняет БПФ для нахождения частоты вибрации. Подробнее...
 
void AddNewPointPosition (Point2f position)
 Добавляет новую пространственную координату в конец контейнера VibratingPoint::point_coordinates_;. Подробнее...
 
void AddNewPointTime (double time)
 Добавляет новую временную координату (время кадра, на котором новая позиция точки была трекнута) в конец контейнера VibratingPoint::point_time_coordinates_;. Подробнее...
 
bool IsInteracted (Point2i coordinates)
 Проверяет точку на наличие взаимодействия с ней (если курсор попал в область взаимодействия точки VibratingPoint::interaction_box_) Подробнее...
 
void SetSensivity (double sensivity)
 Устанавливает чувствительность, влияющую на confidence. Подробнее...
 
void CalculateAmplitude ()
 Проводит необходимые для вычисления амплитуды вычисления Подробнее...
 
virtual void Draw (Mat &frame)=0
 Отрисовывает точку на кадре Подробнее...
 
Point2f GetLastFoundCoordinates ()
 Возвращает последний элемент вектора координат Подробнее...
 
std::vector< double > GetCurrentVibrationFrequency ()
 Возвращает вектор текущих частот точки Подробнее...
 
double GetCurrentMainFrequency ()
 Возвращает текущую "основную" частоту Подробнее...
 
Point3f GetRelativeAmplitude ()
 Возвращает последнюю найденную относительную амплитуду Подробнее...
 
Point3f GetCurrentAmplitude ()
 Возвращает последнюю найденную относительную амплитуду Подробнее...
 
double GetCurrentConfidenceLevel ()
 Возвращает последний найденный уровень достоверности Подробнее...
 
- Открытые члены унаследованные от OutputToCsv
 OutputToCsv (std::string output_file_name, std::vector< Point2f > &point_coordinates, std::vector< double > &point_time_coordinates, int point_id)
 Конструктор этого класса Подробнее...
 
void Write ()
 Добавляет данные для записи Подробнее...
 

Закрытые члены

void DrawHistogram () override
 Отрисовывает гистограмму Подробнее...
 
void DrawPoint (Mat &frame)
 Отрисовывает точку на кадре Подробнее...
 
void DrawPointTrack (Mat &frame)
 Отрисовывает линию перемещения (трек) точки Подробнее...
 
void DrawInteractionRectangle (Mat &frame)
 Отрисовывает прямоугольник взаимодействия Подробнее...
 
void DrawTextData (Mat &frame)
 Отрисовывает текстовые данные рядом с точкой Подробнее...
 
void UpdatePointColor () override
 Обновляем текущий цвет точки Подробнее...
 

Закрытые данные

float text_resize_factor_
 Коэффициент рескейла для отрисовки данных Подробнее...
 
int point_id_
 ID точки (нет блин почки) Подробнее...
 
Scalar point_color_
 Цвет точки Подробнее...
 

Дополнительные унаследованные члены

- Открытые статические члены унаследованные от Histogram
static void OnMouse (int event, int x, int y, int flags, void *userdata)
 callback функция для определения события (используется для хэндлинга клика мышью) Подробнее...
 
- Статические открытые данные унаследованные от VibratingPoint
static std::pair< double, double > extremum_amplitude_
 Максимум и минимум амплитуды среди всех VibratingPoint объектов-наследников Подробнее...
 
virtual void DrawHistogram ()=0
 Отрисовывает гистограмму спектра частот колебаний точки (полученную после БПФ в методе ExecuteFFT()) Подробнее...
 
virtual void UpdatePointColor ()=0
 Обновляем текущий цвет точки Подробнее...
 
- Защищенные данные унаследованные от Histogram
bool is_histogram_plotted_
 Флаг для отрисовки гистограммы Подробнее...
 
- Защищенные данные унаследованные от VibratingPoint
Rect interaction_box_
 Прямоугольник (область) взаимодействия с точкой Подробнее...
 
int interaction_offset_
 Половина длины прямоугольника взаимодействия Подробнее...
 
bool interacted_
 Флаг взаимодействия с точкой Подробнее...
 
Point3f relative_amplitude_
 Относительные амплитуды вибрации по x, y. Выражается отношением амплитуды Подробнее...
 
Point3f current_amplitude_
 Фактические амплитуды вибрации по x, y. Выражаюытся в пикселях Подробнее...
 
std::vector< Point2f > point_coordinates_
 Контейнер для координат точки Подробнее...
 
std::vector< double > x_coordinates_
 Контейнер для координат точки по оси X. Подробнее...
 
std::vector< double > y_coordinates_
 Контейнер для координат точки по оси Y. Подробнее...
 
std::vector< cv::Point2f > vec_meaned_coordinates_of_point_
 Контейнер для координат точки относительно нулевого уровня Подробнее...
 
std::vector< double > frequencies_
 Контейнер для частот точки Подробнее...
 
double main_frequency_
 Главная частота (основная) Подробнее...
 
std::vector< double > point_time_coordinates_
 Контейнер для временных координат точки Подробнее...
 
double sampling_rate_
 Частота сэмплирования (фактически - FPS исходного видео) Подробнее...
 
int current_point_radius_
 Радиус точки, который нужен для её отрисовки Подробнее...
 
int default_point_radius_
 Дефолтный радиус точки Подробнее...
 
std::vector< double > x_
 Контейнер для хранения координат гистограммы по оси X (фактически - найденный спектр частот вибрации точки после выполнения БПФ) Подробнее...
 
std::vector< float > y_
 Контейнер для хранения координат гистограммы по оси Y (фактически - найденные магнитуды точки после выполнения БПФ) Подробнее...
 
double sensivity_
 Чувствительность определения вибрации Подробнее...
 
double confidence_level_
 Рейтинг достоверности вибрации Подробнее...
 

Подробное описание

Дочерний (от VibratingPoint) класс. Предназначен для помещения точки на кадр и отслеживания её вибрации впоследствии

Объект класса - "одинокая" точка на видео, положение которой отслеживается с течением времени для вычисления частоты вибрации этой точки

Точку можно отрисовать методом Draw() на кадре

Также при взаимодействии с точкой (VibratingPoint::IsInteracted()) будет выводиться гистограмма частот в отдельное окно (DrawHistogram())

См. определение в файле lonely_point_handler.h строка 26

Конструктор(ы)

◆ LonelyPointHandler()

LonelyPointHandler::LonelyPointHandler ( Point2f  init_coordinates,
double  sampling_rate,
int  point_id,
float  text_resize_factor,
std::string  output_csv_filename 
)

Конструктор этого класса

Аргументы
init_coordinatesсамые первые координаты точки (фактически - координаты клика мышью на окне, куда выводилось исходное видео)
sampling_rateчастота сэмплирования (фактически - FPS исходного видео)
point_idID точки
text_resize_factorкоэффициент масштабирования текста, выводимого на изображение при отрисовке частоты и относительной амплитуды вибрации
output_csv_filenameимя (путь) csv-файла для записи метаданных
Заметки
Коэффициент масштабирования: FrameHandler::InitTextResizeFactors()

См. определение в файле lonely_point_handler.cpp строка 3

3 :
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 text_resize_factor_{ text_resize_factor }
8{
10 sampling_rate_ = sampling_rate;
11
12 // Добавляем первые координаты клика мышью
13 point_coordinates_.push_back(init_coordinates);
14 interaction_box_ = Rect(
15 Point2i(init_coordinates.x - interaction_offset_, init_coordinates.y - interaction_offset_),
16 Point2i(init_coordinates.x + interaction_offset_, init_coordinates.y + interaction_offset_)
17 );
18 interacted_ = false;
19
20 frequencies_.push_back(0.0);
21 relative_amplitude_ = Point3f(0.0, 0.0, 0.0);
22
23 sensivity_ = 0.01;
25}
Класс для создания объектов-гистограмм, на которые можно выводить различную информацию
Definition: histogram.h:17
float text_resize_factor_
Коэффициент рескейла для отрисовки данных
int point_id_
ID точки (нет блин почки)
Класс для сохранения метаданных (временных и пространственных координат, ID точки)
Definition: output_to_csv.h:18
bool interacted_
Флаг взаимодействия с точкой
Rect interaction_box_
Прямоугольник (область) взаимодействия с точкой
std::vector< double > x_
Контейнер для хранения координат гистограммы по оси X (фактически - найденный спектр частот вибрации ...
double sampling_rate_
Частота сэмплирования (фактически - FPS исходного видео)
double confidence_level_
Рейтинг достоверности вибрации
int interaction_offset_
Половина длины прямоугольника взаимодействия
Point3f relative_amplitude_
Относительные амплитуды вибрации по x, y. Выражается отношением амплитуды
std::vector< float > y_
Контейнер для хранения координат гистограммы по оси Y (фактически - найденные магнитуды точки после в...
double sensivity_
Чувствительность определения вибрации
std::vector< double > point_time_coordinates_
Контейнер для временных координат точки
std::vector< double > frequencies_
Контейнер для частот точки
std::vector< Point2f > point_coordinates_
Контейнер для координат точки

◆ ~LonelyPointHandler()

LonelyPointHandler::~LonelyPointHandler ( )

Деструктор этого класса

Вызывает метод родительского класса OutputToCsv Write() для записи метаданных

См. определение в файле lonely_point_handler.cpp строка 27

28{
29 Write();
30}
void Write()
Добавляет данные для записи

Методы

◆ Draw()

void LonelyPointHandler::Draw ( Mat &  frame)
overridevirtual

Отрисовывает точку и данные, связанные с ней

Аргументы
frameизображение, на котором будет происходить отрисовка

Замещает VibratingPoint.

См. определение в файле lonely_point_handler.cpp строка 55

56{
57 // отрисовываем прямоугольник взаимодействия (если оно есть)
59 // отрисовываем линии точек
60 DrawPointTrack(frame);
61 // отрисовываем круг вокруг точки
62 DrawPoint(frame);
63 // отрисовываем гистограмму
65 // отрисовываем частоту вибрации
66 DrawTextData(frame);
67}
void DrawHistogram() override
Отрисовывает гистограмму
void DrawPoint(Mat &frame)
Отрисовывает точку на кадре
void DrawTextData(Mat &frame)
Отрисовывает текстовые данные рядом с точкой
void DrawInteractionRectangle(Mat &frame)
Отрисовывает прямоугольник взаимодействия
void DrawPointTrack(Mat &frame)
Отрисовывает линию перемещения (трек) точки

◆ DrawHistogram()

void LonelyPointHandler::DrawHistogram ( )
overrideprivatevirtual

Отрисовывает гистограмму

Замещает VibratingPoint.

См. определение в файле lonely_point_handler.cpp строка 69

70{
72 {
76 }
77}
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

◆ DrawInteractionRectangle()

void LonelyPointHandler::DrawInteractionRectangle ( Mat &  frame)
private

Отрисовывает прямоугольник взаимодействия

Аргументы
frameизображение, на котором будет происходить отрисовка

См. определение в файле lonely_point_handler.cpp строка 93

94{
95 if (interacted_)
96 rectangle(frame, interaction_box_, Scalar(0, 255, 0), 2);
97}

◆ DrawPoint()

void LonelyPointHandler::DrawPoint ( Mat &  frame)
private

Отрисовывает точку на кадре

Аргументы
frameизображение, на котором будет происходить отрисовка

См. определение в файле lonely_point_handler.cpp строка 79

80{
82 // отрисовываем круг вокруг точки
83 circle(frame, point_coordinates_.back(), 10, point_color_, 2);
84
85}
void UpdatePointColor() override
Обновляем текущий цвет точки
Scalar point_color_
Цвет точки

◆ DrawPointTrack()

void LonelyPointHandler::DrawPointTrack ( Mat &  frame)
private

Отрисовывает линию перемещения (трек) точки

Аргументы
frameизображение, на котором будет происходить отрисовка

См. определение в файле lonely_point_handler.cpp строка 87

88{
89 if (point_coordinates_.size() > 2)
90 line(frame, point_coordinates_[point_coordinates_.size() - 2], point_coordinates_[point_coordinates_.size() - 1], Scalar(0, 255, 0), 1, LINE_AA);
91}

◆ DrawTextData()

void LonelyPointHandler::DrawTextData ( Mat &  frame)
private

Отрисовывает текстовые данные рядом с точкой

Аргументы
frameизображение, на котором будет происходить отрисовка

См. определение в файле lonely_point_handler.cpp строка 99

100{
101 int font = FONT_HERSHEY_PLAIN;
102 double font_scale = 1.5 * text_resize_factor_;
103 int thickness = 2;
104 int line_spacing = 20;
105 int row_spacing = 5;
106 // Количество строк частот, выводимых на экран
107 int lines_amount = 3;
108 int baseline;
109 // отрисовываем частоту вибрации
110 putText(
111 frame,
113 Point(point_coordinates_.front().x + 15, point_coordinates_.front().y + text_resize_factor_ * line_spacing),
114 font,
115 font_scale,
116 Scalar(0, 69, 255),
117 thickness
118 );
119
120 // отрисовываем амплитуды вибрации и ID точки
121 // ID точки
122 putText(
123 frame,
124 "ID: " + std::to_string(point_id_),
125 Point(point_coordinates_.front().x + 15, point_coordinates_.front().y - text_resize_factor_ * line_spacing),
126 font,
127 font_scale,
128 Scalar(100, 255, 100),
129 thickness
130 );
131
132 // Статус определения вибрации
133
134 std::string confidence_string;
135
136 {
137 if (confidence_level_ > 5.0)
138 confidence_string = "enough";
139 else
141 }
142
143 putText(
144 frame,
145 "Conf: " + confidence_string,
146 Point(point_coordinates_.front().x + 15, point_coordinates_.front().y),
147 font,
148 font_scale,
149 Scalar(100, 255, 100),
150 thickness
151 );
152 putText(
153 frame,
155 Point(point_coordinates_.front().x + 15, point_coordinates_.front().y - text_resize_factor_ * 2 * line_spacing),
156 font,
157 font_scale,
158 Scalar(0, 255, 255),
159 thickness
160 );
161 putText(
162 frame,
164 Point(point_coordinates_.front().x + 15, point_coordinates_.front().y - text_resize_factor_ * 3 * line_spacing),
165 font,
166 font_scale,
167 Scalar(0, 255, 255),
168 thickness
169 );
170 putText(
171 frame,
173 Point(point_coordinates_.front().x + 15, point_coordinates_.front().y - text_resize_factor_ * 4 * line_spacing),
174 font,
175 font_scale,
176 Scalar(0, 255, 255),
177 thickness
178 );
179 // uncomment когда появится 3-я координата для амплитуды :)
180 /*putText(
181 frame,
182 "z: " + std::to_string(relative_amplitude_.z),
183 Point(point_coordinates_.front().x, point_coordinates_.front().y - res_mp_ * 4 * line_spacing),
184 FONT_HERSHEY_PLAIN,
185 font_scale,
186 Scalar(0, 255, 255),
187 thickness
188 );*/
189}
Point3f current_amplitude_
Фактические амплитуды вибрации по x, y. Выражаюытся в пикселях
double main_frequency_
Главная частота (основная)
std::string ToStringWithPrecision(const T value, const int n=9)
Выполняет округление числа с определенной точностью
Definition: helper.h:49

◆ GetInteractionRect()

Rect LonelyPointHandler::GetInteractionRect ( )

Возвращает координаты прямоугольника взаимодействия

Возвращает
Прямоугольник (область) взаимодействия

См. определение в файле lonely_point_handler.cpp строка 39

40{
41 return interaction_box_;
42}

◆ GetTextCoordinates()

Point2f LonelyPointHandler::GetTextCoordinates ( )

Возвращает точку, необходимую для отображения координат

Возвращает
Координаты текста для отображения

См. определение в файле lonely_point_handler.cpp строка 32

33{
34 if (!point_coordinates_.empty())
35 return point_coordinates_[0];
36 else return Point2f(0.0, 0.0);
37}

◆ UpdatePointColor()

void LonelyPointHandler::UpdatePointColor ( )
overrideprivatevirtual

Обновляем текущий цвет точки

Замещает VibratingPoint.

См. определение в файле lonely_point_handler.cpp строка 44

45{
46 // default
47 point_color_ = Scalar(255, 75, 25);
48
49 if (interacted_)
50 point_color_ = point_color_ + Scalar(0, 75, 25); // синий светлее
51
53}

Данные класса

◆ point_color_

Scalar LonelyPointHandler::point_color_
private

Цвет точки

См. определение в файле lonely_point_handler.h строка 108

◆ point_id_

int LonelyPointHandler::point_id_
private

ID точки (нет блин почки)

См. определение в файле lonely_point_handler.h строка 104

◆ text_resize_factor_

float LonelyPointHandler::text_resize_factor_
private

Коэффициент рескейла для отрисовки данных

См. определение в файле lonely_point_handler.h строка 100


Объявления и описания членов классов находятся в файлах: