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

Дочерний (от EulerEnlarger) класс для визуального увеличения вибрации на видео Подробнее...

#include <movement_enlargement.h>

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

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

 MovementEnlarger (std::string input_file_name, std::string output_file_name)
 Конструктор этого класса Подробнее...
 
void ExecuteLaplaceEnlargement ()
 Выполняет визуальное увеличение движения Подробнее...
 

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

std::string input_file_name_
 имя (путь) входного файла (видео) Подробнее...
 
std::string output_file_name_
 имя (путь) выходного файла (видео) Подробнее...
 
std::string win_name_
 Имя окна, в которое будет выводиться обработанный кадр Подробнее...
 
Mat frame_to_be_enlarged_
 Изображение (кадр), движение на котором будет увеличено Подробнее...
 
Mat frame_enlarged_
 Изображение (кадр), движение на котором было увеличено Подробнее...
 
Mat frame_with_motion_info_
 Mat-сущность, содержащая информацию об увеличенном движении Подробнее...
 

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

- Защищенные члены унаследованные от EulerEnlarger
void LaplaceEnlarge (Mat &motion_pyramid_level, int current_level)
 Осуществляет увеличение движения на конкретном уровне пирамиды Подробнее...
 
void Attenuate (Mat &motion_frame)
 "Приглушает" усиленные цвета на кадре Подробнее...
 
void BuildLaplacePyramid (const Mat &input_frame, std::vector< Mat > &input_pyramid, const int levels)
 Создает пирамиду изображений Подробнее...
 
void IirFilter (Mat &input_pyramid_level, Mat &motion_pyramid_level, Mat &low_pass_high_level, Mat &low_pass_low_level, double cutoff_low, double cutoff_high)
 Фильтр для отсекания низких и высоких "пространственных" частот ("фильтр с бесконечной импульсной характеристикой" - infinite impulse response) Подробнее...
 
void BuildFromLaplacePyramid (std::vector< Mat > &motion_pyramid, Mat &motion_frame, int levels)
 Извлекаем выходное изображение из пирамиды Лапласа Подробнее...
 
- Защищенные данные унаследованные от EulerEnlarger
std::vector< Mat > low_pass_high_pyramid_
 
std::vector< Mat > low_pass_low_pyramid_
 
double cutoff_low_
 
double cutoff_high_
 
int levels_amount_
 Количество уровней (слоев) пирамиды Подробнее...
 
double exaggeraiton_coefficient_
 Коэффициент увеличения. Чем выше - тем больше шума, тем сильнее увеличиваются небольшие движения. Подробнее...
 
double lambda_
 Показательная длина волны Подробнее...
 
double lambda_cutoff_
 
double color_attenuation_coefficient_
 Коэффициент приглушеняи цвета Подробнее...
 
double delta_
 Коэффициент, использующийся при увеличении Подробнее...
 
double alpha_
 

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

Дочерний (от EulerEnlarger) класс для визуального увеличения вибрации на видео

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

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

◆ MovementEnlarger()

MovementEnlarger::MovementEnlarger ( std::string  input_file_name,
std::string  output_file_name 
)

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

Аргументы
input_file_nameимя (путь) входного файла (видео)
output_file_nameимя (путь) выходного файла (видео)

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

3 :
4 input_file_name_{ input_file_name },
5 output_file_name_{ output_file_name },
6 win_name_{ "Movement Enlarger" }
7
8{
9 std::cout << "Movement Enlarger constructor" << std::endl;
10}
std::string win_name_
Имя окна, в которое будет выводиться обработанный кадр
std::string input_file_name_
имя (путь) входного файла (видео)
std::string output_file_name_
имя (путь) выходного файла (видео)

◆ ~MovementEnlarger()

MovementEnlarger::~MovementEnlarger ( )

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

13{
14 std::cout << "Movement Enlarger destructor" << std::endl;
15}

Методы

◆ ExecuteLaplaceEnlargement()

void MovementEnlarger::ExecuteLaplaceEnlargement ( )

Выполняет визуальное увеличение движения

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

18{
20 int current_num_of_frame = 0;
21 int amount_of_frames = frame_handler.GetAmountOfFrames();
22
23 std::vector<Mat> input_pyramid;
24 std::vector<Mat> motion_pyramid;
25 while (current_num_of_frame < amount_of_frames)
26 {
27 frame_handler.ReadNextFrame();
28 // обновляем номер кадра после чтения
29 current_num_of_frame = frame_handler.GetCurrentPosOfFrame();
30 frame_to_be_enlarged_ = frame_handler.GetCurrentFrame();
31
32 // Конвертим цвет
33 frame_to_be_enlarged_.convertTo(frame_to_be_enlarged_, CV_32FC3, 1.0 / 255.0f);
34 cvtColor(frame_to_be_enlarged_, frame_to_be_enlarged_, cv::COLOR_BGR2Lab);
35
36 // Строим пирамиду
38
39 // Если кадр первый - "инициализируем" его "нетронутой" пирамидой (до фильтрации)
40 if (current_num_of_frame == 1)
41 {
42 low_pass_high_pyramid_ = input_pyramid;
43 low_pass_low_pyramid_ = input_pyramid;
44 motion_pyramid = input_pyramid;
45 }
46 else
47 {
48 for (int current_level = 0; current_level < levels_amount_; ++current_level)
49 {
50 IirFilter(input_pyramid[current_level], motion_pyramid[current_level], low_pass_high_pyramid_[current_level], low_pass_low_pyramid_[current_level], cutoff_low_, cutoff_high_);
51 }
52
53 int width = frame_handler.GetFrameWidth();
54 int height = frame_handler.GetFrameHeight();
55
56 delta_ = lambda_cutoff_ / (8.0 * (1.0 + alpha_));
57
58 // Посчитаем показательную длину волны lambda_ для
59 // самых низких частот пространств пирамиды Лапласиан
60 lambda_ = sqrt((width * width + height * height)) / 3.0;
61
62 // Увеличиваем движение на каждом уровне пирамиды
63 for (int current_level = levels_amount_; current_level >= 0; --current_level)
64 {
65 LaplaceEnlarge(motion_pyramid[current_level], current_level);
66 lambda_ /= 2.0;
67 std::cout << "current lambda_ is " << lambda_ << " on level " << current_level << std::endl;
68 }
69 }
70
71 // Теперь соберем изображения обратно из пирамиды
73
74 // Приглушаем побежавшие цвета
75 //Attenuate(frame_with_motion_info_);
76
77 // Добавляем движение на изначальное изображение, исключая первый кадр
78 if (current_num_of_frame > 1)
80 else
82
83 // Конвертим обратно
84 cvtColor(frame_enlarged_, frame_enlarged_, cv::COLOR_Lab2BGR);
85 frame_enlarged_.convertTo(frame_enlarged_, CV_8UC3, 255.0, 1.0 / 255.0);
86
87 // DEBUG
88 std::cout << "frame " << current_num_of_frame << " is processed. The are also " << amount_of_frames - current_num_of_frame << " frames left. " << std::endl;
89
90 frame_handler.ShowFrame(frame_enlarged_, false);
91 frame_handler.WriteFrame(frame_enlarged_);
92
93 int code = waitKey(20);
94 switch (code)
95 {
96 // пауза (пробел)
97 case 32:
98 {
99 waitKey(0);
100 break;
101 }
102 case 'q':
103 {
104 current_num_of_frame = amount_of_frames;
105 std::cout << frame_handler.GetInputCapStatus() << std::endl;
106 break;
107 }
108 }
109 }
110
111}
double lambda_
Показательная длина волны
void IirFilter(Mat &input_pyramid_level, Mat &motion_pyramid_level, Mat &low_pass_high_level, Mat &low_pass_low_level, double cutoff_low, double cutoff_high)
Фильтр для отсекания низких и высоких "пространственных" частот ("фильтр с бесконечной импульсной хар...
void BuildFromLaplacePyramid(std::vector< Mat > &motion_pyramid, Mat &motion_frame, int levels)
Извлекаем выходное изображение из пирамиды Лапласа
int levels_amount_
Количество уровней (слоев) пирамиды
void LaplaceEnlarge(Mat &motion_pyramid_level, int current_level)
Осуществляет увеличение движения на конкретном уровне пирамиды
double delta_
Коэффициент, использующийся при увеличении
void BuildLaplacePyramid(const Mat &input_frame, std::vector< Mat > &input_pyramid, const int levels)
Создает пирамиду изображений
Класс для чтения и сохранения кадров видео, а также различной их обработки
Definition: frame_handler.h:29
Mat frame_with_motion_info_
Mat-сущность, содержащая информацию об увеличенном движении
Mat frame_to_be_enlarged_
Изображение (кадр), движение на котором будет увеличено
Mat frame_enlarged_
Изображение (кадр), движение на котором было увеличено

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

◆ frame_enlarged_

Mat MovementEnlarger::frame_enlarged_
private

Изображение (кадр), движение на котором было увеличено

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

◆ frame_to_be_enlarged_

Mat MovementEnlarger::frame_to_be_enlarged_
private

Изображение (кадр), движение на котором будет увеличено

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

◆ frame_with_motion_info_

Mat MovementEnlarger::frame_with_motion_info_
private

Mat-сущность, содержащая информацию об увеличенном движении

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

◆ input_file_name_

std::string MovementEnlarger::input_file_name_
private

имя (путь) входного файла (видео)

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

◆ output_file_name_

std::string MovementEnlarger::output_file_name_
private

имя (путь) выходного файла (видео)

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

◆ win_name_

std::string MovementEnlarger::win_name_
private

Имя окна, в которое будет выводиться обработанный кадр

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


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