Visual Vibration Tracking 0.2
Загрузка...
Поиск...
Не найдено
vibration_detector.h
1#ifndef VIBRATION_DETECTOR_H
2#define VIBRATION_DETECTOR_H
3
4// VREMENNO
5#define MAIN_WINDOW_NAME "Video"
6#define V_MONITOR_WINDOW_NAME "Vibration Monitor"
7
8// standart headers
9#include <iostream>
10#include <vector>
11
12// OpenCV headers
13#include <opencv2/video/tracking.hpp>
14
15// my headers
16#include "VVT-V2/lonely_point_handler.h"
17#include "VVT-V2/colored_point_handler.h"
18#include "VVT-V2/frame_handler.h"
19#include "VVT-V2/helper.h"
20#include "VVT-V2/contour_handler.h"
21
28{
33 {
34 DEFAULT,
35 SELECTINGROI,
36 PAUSE
37 };
42 {
43 COLORING_DEFAULT,
44 COLORING_BASED_ON_FREQUENCY,
45 COLORING_BASED_ON_AMPLITUDE
46 };
47
48public:
52 VibrationDetector(std::string input_file_name, std::string output_file_name, std::string window_name);
58
59private:
63 void ServeTheQueues();
67 void CreateNewPoint(Point2f mouse_coordinates);
71 void LeftClickHandler(Point2f mouse_coordinates);
75 void CreateNewColoredPoint(Point2f mouse_coordinates);
79 void DeletePoints(Point2i mouse_coordinates);
91 static void OnMouse(int event, int x, int y, int flags, void* userdata);
95 void DetectEvent(int event, int x, int y, int flags);
99 void DefaultModeHandler(int event, int x, int y);
103 void RoiSelectionModeHandler(int event, int x, int y);
107 Mat MakeWarpedFrame(Mat frame, std::vector<Point2i> warping_figure);
111 void TrackAndCalc();
115 std::vector<Point2f> FindGoodFeatures(Mat frame, Rect roi);
119 void DrawDebugLkWinRectangle(Mat& frame);
123 void DrawAndOutput(Mat& frame);
124
125private:
138 float res_mp_;
155
157 // NORMAL MODE
159
162 std::vector<Point2i> l_click_queue_;
166 std::vector<Point2f> c_point_queue_;
170 std::vector<Point2i> delete_queue_;
174 std::vector<Point2i> histograms_queue_;
178 std::vector<LonelyPointHandler*> vec_lonely_point_handlers_;
182 std::vector<ColoredPointHandler*> vec_colored_point_handlers_;
183
185 // ADJUST SENSIVITY MODE
187
195
214
216 // ROI SELECTING MODE
218 //
231
235 std::string input_file_name_;
239 std::string output_file_name_;
248 std::string window_name_;
249
257 std::vector<Point> warping_figure_;
258
275
276
277 // Для быстрого преобразования Фурье
281 int fps_;
286};
287
288#endif
Класс для чтения и сохранения кадров видео, а также различной их обработки
Definition: frame_handler.h:29
Класс для создания объектов-детекторов вибрации
Mat next_img_gray_
Следующий (или текущий после "предыдущего" - смотря как удобнее для понимания) кадр видео в грейскейл...
std::vector< Point2i > histograms_queue_
Очередь на отрисовку гистограм
void CreateNewPoint(Point2f mouse_coordinates)
Создаем "обычную" точку
std::string window_name_
Имя главного окна
void DefaultModeHandler(int event, int x, int y)
Обычный режим
std::vector< Point2i > delete_queue_
Очередь на удаление точек
int level_amount_
Количество слоев пирамиды изображений в алгоритме Л-К
void RoiSelectionModeHandler(int event, int x, int y)
Режим выделения региона интереса
static void OnMouse(int event, int x, int y, int flags, void *userdata)
callback functions for detecting the click
bool warping_figure_selecting_
Флаг, показывающий, происходит ли в данный момент выделение фигуры (эта возможность отключена временн...
Mat prev_img_gray_
Предыдущий кадр видео в грейскейл и с небольшим блюром (FrameHandler::MakeGrayFrame())
Mat current_tracking_frame_
Текущий Mat-instance только что найденного кадра из видео
Mat grad_scale_
Изображение цветной шкалы внизу экрана
int sensivity_in_percents_
Чувствительность при трекинге вибрации
std::vector< Point2f > c_point_queue_
Очередь на создание "цветных" точек
bool fullscreen_
Флаг для полноэкранного режима
double frame_time_
Текущее время кадра в мс (таймкод)
std::vector< LonelyPointHandler * > vec_lonely_point_handlers_
Вектор обработчиков "одиноких" точек
std::vector< Point2i > l_click_queue_
Очередь на создание "обычных" точек
FrameHandler * frame_handler
Фреймпроцессор
std::vector< Point2f > FindGoodFeatures(Mat frame, Rect roi)
Находит подходящие для трекинга точки на изображении
float res_mp_
Коэффициент автоскейла размеров окна в зависимости от разрешения исходного видео
std::string input_file_name_
Имя (путь) входного видео
Point last_mouse_position_
Последняя позиция курсора в главном окне
void DeletePoints(Point2i mouse_coordinates)
Удаляем объект "обычную" точку
void CreateNewColoredPoint(Point2f mouse_coordinates)
Обработчик "цветных" точек
int fps_
ФПС входного видео (две ширины полосы частот вибрации, которые можно отследить)
void DetectEvent(int event, int x, int y, int flags)
callback functions for detecting the click
std::string output_file_name_
Имя (путь) видео, в котором будет результат детектинга
void TrackAndCalc()
Трекает точки алгоритмом Лукаса-Канаде и вызывает БПФ
std::vector< Point > warping_figure_
Координаты фигуры для исправления перспективы
void LeftClickHandler(Point2f mouse_coordinates)
Обработчик левых кликов
bool roi_selecting_
Флаг, показывающий происходит ли в данный момент выделение ROI.
void DeleteColoredPoints()
Удаляем объекты "цветная" точка
bool running_
Флаг запущенного основного алгоритма
void FindAndDeleteUncofidentPoints()
Удаляет "цветные" и "обычные" точки, если уровень доверия к нми слишком низкий
int lk_win_size_
Размер окна для алгоритма Лукаса-Канаде
Mat frame_to_be_shown_
Mat-instance, который будет показан в окне
int current_mode_
Основной режим работы (enum main_mode)
void DrawAndOutput(Mat &frame)
Масштабирует, рисует и выводит на экран обработанный кадр с точками
void DrawDebugLkWinRectangle(Mat &frame)
Рисует точки и выводит данные
std::vector< ColoredPointHandler * > vec_colored_point_handlers_
Вектор обработчиков "цветных" точек
std::string output_csv_file_name_
Имя (путь) файла для хранения метаданных
Mat MakeWarpedFrame(Mat frame, std::vector< Point2i > warping_figure)
Удаляет перспективные искажения
void ExecuteVibrationDetection()
Выполняет детекцию вибрации
Point2i tl_click_coords_
Координаты первой точки прямоугольник (top left, bottom left, top right, bottom right - смотря "в как...
void ServeTheQueues()
Обслуживает очереди на удаление и создание. Необходимо для того, чтобы не нарушить нумерацию точек во...
int point_id_
Псевдо-id (порядковывй номер точки)
int colored_point_mode_
Текущий режим подсветки точек при выбранном регионе интереса (по амплитуде/по частоте)
bool roi_selected_
Флаг, показывающий был ли выделен ROI или нет