V
V
Vladislav2016-12-04 01:02:51
C++ / C#
Vladislav, 2016-12-04 01:02:51

opencv (emgucv) motion compensation in c#?

Привет. Мне нужно имплементировать алгортм "Exhaustive Block Matching Algorithm" в свою программу на c#. Смысл в компрессии видео. Нужно реализовать такое: a-comparison-of-blockmatching-motion-est
Т.е ищем наиболее похожие блоки и создаем из них новый фрейм. Знаю про функцию optical flow в openCV, но как ее тут использовать? Не нашел документации по этой функции, какие параметры, по какому алгоритму она ищет и т.д. По идеи все просто, функция находит векотры для блоков в искомой области, после чего остается только скопировать блоки в новый фрейм. Так ли я вообще себе это представляю? Спасибо.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
Alexander Kislinsky, 2017-03-08
@Luonic

The optical flow is in OpenCV, in version 3.2.0 a very fast Dense Inverse Search Optical Flow algorithm was delivered, in C ++ it is created like this:

Ptr< cv::optflow::DISOpticalFlow > dis_op = cv::optflow::createOptFlow_DIS(
            cv::optflow::DISOpticalFlow::PRESET_ULTRAFAST);
dis_op->calc(next_frame_gray, prev_frame_gray, opt_flow);

But for video encoding, an optical flow is like a cannon to sparrows, since it is very resource-intensive to calculate, even this DISOpticalFlow. There are other methods, such as Farneback, Simpleflow, but the latter is terribly slow (but very accurate), and farneback does not see fast movement and is slower than DISOpticalFlow.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question