Компенсация движения opencv (emgucv) в c#?

Привет. Мне нужно имплементировать алгортм "Exhaustive Block Matching Algorithm" в свою программу на c#. Смысл в компрессии видео. Нужно реализовать такое: a-comparison-of-blockmatching-motion-est

Т.е ищем наиболее похожие блоки и создаем из них новый фрейм. Знаю про функцию optical flow в openCV, но как ее тут использовать? Не нашел документации по этой функции, какие параметры, по какому алгоритму она ищет и т.д. По идеи все просто, функция находит векотры для блоков в искомой области, после чего остается только скопировать блоки в новый фрейм. Так ли я вообще себе это представляю? Спасибо.
  • Вопрос задан
  • 563 просмотра
Пригласить эксперта
Ответы на вопрос 1
Luonic
@Luonic
Студент, Unity3d, DotNet, Xamarin
Оптический поток есть в OpenCV, в версии 3.2.0 завезли очень быстрый алгоритм Dense Inverse Search Optical Flow, в с++ создается он так:
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);

Но для кодирования видео оптисеский поток - это как с пушки по воробьям, так как он очень ресурсоемок для вычисления, даже этот DISOpticalFlow. Есть и другие методы, например Farneback, Simpleflow, но последний ужасно медленный (но очень точный), а фарнбэк не видит быстрого движения и он медленнее, чем DISOpticalFlow.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы