1#include "MovEn/eulerian_enlargement.h"
3EulerEnlarger::EulerEnlarger() :
6 exaggeraiton_coefficient_{ 2.0 },
8 lambda_cutoff_{ 16.0 },
9 color_attenuation_coefficient_{ 0.0 },
14 std::cout <<
"Euler Enlarger constructor" << std::endl;
17EulerEnlarger::~EulerEnlarger()
19 std::cout <<
"Euler Enlarger destructor" << std::endl;
29 motion_pyramid_level = motion_pyramid_level * 0;
34 motion_pyramid_level = motion_pyramid_level * std::min(current_alpha, alpha_);
41 if (motion_frame.channels() > 2)
45 split(motion_frame, planes);
49 merge(planes, 3, motion_frame);
55 input_pyramid.clear();
56 std::vector<Mat> pyramid;
57 Mat current_level = input_frame.clone();
59 for (
int level = 0; level < levels; level++)
63 pyrDown(current_level, down);
65 pyrUp(down, up, current_level.size());
66 Mat laplace = current_level - up;
67 pyramid.push_back(laplace);
70 pyramid.push_back(current_level);
71 input_pyramid = pyramid;
74void EulerEnlarger::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)
76 low_pass_high_level = (1 - cutoff_high) * low_pass_high_level + cutoff_high * input_pyramid_level;
77 low_pass_low_level = (1 - cutoff_low) * low_pass_low_level + cutoff_low * input_pyramid_level;
79 motion_pyramid_level = low_pass_high_level - low_pass_low_level;
85 Mat current_level = motion_pyramid[levels];
87 for (
int level = levels - 1; level >= 0; --level)
90 pyrUp(current_level, up, motion_pyramid[level].size());
92 current_level = up + motion_pyramid[level];
94 motion_frame = current_level.clone();
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)
Извлекаем выходное изображение из пирамиды Лапласа
double exaggeraiton_coefficient_
Коэффициент увеличения. Чем выше - тем больше шума, тем сильнее увеличиваются небольшие движения.
int levels_amount_
Количество уровней (слоев) пирамиды
void LaplaceEnlarge(Mat &motion_pyramid_level, int current_level)
Осуществляет увеличение движения на конкретном уровне пирамиды
double delta_
Коэффициент, использующийся при увеличении
void Attenuate(Mat &motion_frame)
"Приглушает" усиленные цвета на кадре
void BuildLaplacePyramid(const Mat &input_frame, std::vector< Mat > &input_pyramid, const int levels)
Создает пирамиду изображений
double color_attenuation_coefficient_
Коэффициент приглушеняи цвета