Jump to content
Compvision.ru
bluebyte

Стабилизация видеопотока

Recommended Posts

Есть задача стабилизировать видео. Что посмотреть на эту тему в openCV? Беглый осмотр не привел к результату.

Или openCV тут не нужен? Тогда как подойти к задаче?

У меня пока такие мысли. Взять видео. Построить график смещений. Сгладить его. Выдать видео, смещая каждый кадр по сглаженным данным.

Share this post


Link to post
Share on other sites

Да, в OpenCV ничего готового нет. Обычно кадр разбивают на блоки, ищут их смещение и с помощью RANSAC отбирают вектора смещений, наиболее точно удовлетворяющие модели преобразования кадра в кадр. Модели бывают разные: просто смещение, плюс поворот, плюс приближение/удаление камеры.

Если видео было предварительно пережато каким-нибудь потоковым кодеком, то такой подход не сработает. Можно искать на изображении дескрипторы и смотреть на их вектора смещения. Этот метод гораздо медленней.

  • Like 1

Share this post


Link to post
Share on other sites

Можно искать на изображении дескрипторы и смотреть на их вектора смещения. Этот метод гораздо медленней.

А что такое дескрипторы?

Share this post


Link to post
Share on other sites

Вот, почитайте : http://habrahabr.ru/blogs/algorithm/103107/

И дипломная работа по этой теме: http://se.math.spbu.ru/SE/diploma/2011/Gladysheva%20Julija%20-%20text.pdf

И документ на англ. про стабилизацию изображения с использованием дескрипторов и фильтра Кальмана. http://117.211.100.42:8180/jspui/bitstream/123456789/1171/1/ECSP10.pdf

  • Like 1

Share this post


Link to post
Share on other sites

Вот, почитайте : http://habrahabr.ru/blogs/algorithm/103107/

И дипломная работа по этой теме: http://se.math.spbu.ru/SE/diploma/2011/Gladysheva%20Julija%20-%20text.pdf

И документ на англ. про стабилизацию изображения с использованием дескрипторов и фильтра Кальмана. http://117.211.100.42:8180/jspui/bitstream/123456789/1171/1/ECSP10.pdf

Огромное спасибо!:)

Share this post


Link to post
Share on other sites

Вспомнил! Лаборатория компьютерной графики этим занималась. Посмотри здесь, здесь и вообще здесь.

  • Like 1

Share this post


Link to post
Share on other sites

Нужна еще помощь!)

Смотрите. Вот я нашел совпадающие ключевые точки на соседних кадрах с помощью SURF-дескрипторов. Есть ли какой-нибудь инструмент в openCV для анализа этих точек и построения модели движения камеры?

PS: прошу прощения за глупые вопросы, я только учусь

Share this post


Link to post
Share on other sites

Вопрос не глупый. Это непростая задача.

Посмотрите библиотеки MRPT и OpenSLAM (EKFMonoSLAM).

Там есть средства для этого.

  • Like 1

Share this post


Link to post
Share on other sites

Вопрос не глупый. Это непростая задача.

Посмотрите библиотеки MRPT и OpenSLAM (EKFMonoSLAM).

Там есть средства для этого.

Спасибо! Библиотеки буду изучать позже, пока решил пойти другим путем. Просто сдвигаю кадры относительно сглаженных данных. В общем-то получилось то, что хотел, хотя scale и rotate не обрабатываются.

Есть еще один вопрос!) Можно как-нибудь сдвигать изображение на долю пикселя? Нет, я, конечно, в курсе, что бит не делим. Снимаемый на камеру мир непрерывен, поэтому малейшее смещение отразится не в смещение пиксела, а в изменение, передаваемой им информации. Ой, ну и умею же я запутать)

Share this post


Link to post
Share on other sites

Можно попробовать сначала увеличить все изображение с необходимой интерполяцией (линейной или может более сложной), затем сдвинуть и снова уменьшить. Способ незатейливый, но думаю должен работать.

Share this post


Link to post
Share on other sites

В целом неплохо. Есть несколько проблем:

1. Аппаратная: при резких движениях камеры изображение с ней размазывается - качество стабилизации, соответственно, падает. Можешь покадрово просмотреть своё видео и убедиться. Чтобы этого не происходило надо на камере увеличить скорость электронного затвора. Очень немногие камеры такое умеют, в основном для профессионального видеонаблюдения или распознавания номеров.

2. Когда ты двигаешь камеру руками, то происходят не только сдвиги по вертикали и горизонтали, но и повороты вокруг 3-х осей. Особенно трудно бороться с поворотом вокруг оптической оси камеры. Мне показалось, что этот вариант у тебя не учитывается.

P.S. Стабилизацию на основе дескрипторов делаешь?

Share this post


Link to post
Share on other sites

Вначале правое изображение почему-то ползет по горизонтали вправо.

Накопление статистики с нулевых значений?

В матлабе стабилизацию делают по шаблону. http://www.mathworks.com/products/computer-vision/demos.html?file=/products/demos/shipping/vision/videostabilize.html

Может быть и Вам найти область, где концентрация дескрипторов побольше, взять с нее шаблон или несколько таких шаблонов, и искать их на следующих 5-и 7-и кадрах, так и повороты можно определять. На 3-м - 4-м кадрах подбирать следующий набор, и так перехватывать.

Еще документ, который может быть Вам интересен: http://research.microsoft.com/en-us/people/yasumat/fullframe_cvpr05.pdf

И здесь посмотрите: http://www.codeproject.com/KB/recipes/ImgAlign.aspx?display=Print

Share this post


Link to post
Share on other sites

В целом неплохо. Есть несколько проблем:

1. Аппаратная: при резких движениях камеры изображение с ней размазывается - качество стабилизации, соответственно, падает. Можешь покадрово просмотреть своё видео и убедиться. Чтобы этого не происходило надо на камере увеличить скорость электронного затвора. Очень немногие камеры такое умеют, в основном для профессионального видеонаблюдения или распознавания номеров.

2. Когда ты двигаешь камеру руками, то происходят не только сдвиги по вертикали и горизонтали, но и повороты вокруг 3-х осей. Особенно трудно бороться с поворотом вокруг оптической оси камеры. Мне показалось, что этот вариант у тебя не учитывается.

P.S. Стабилизацию на основе дескрипторов делаешь?

1. Да, с камерой проблема. У меня только на мыльнице есть. Написано, что снимает 50fps, но на деле разницы ни какой. В некоторых кадрах книги сплющиваются, размываются, от этого на итоговом видео куча всяческих дерганий. Надо попробовать что-нибудь в сети нарыть.

2. "Мне показалось, что этот вариант у тебя не учитывается." - совершенно верно. Я пошел по самому простому пути. Определил SURF-дескрипторы, вычислил графики смещений по x y, сгладил их и вывел. Можно еще поворот по этой же плоскости сделать. Но, видимо, хорошего результата так не добиться. Буду думать по поводу того, как сделать на базе ключевых точек модель движения камеры и сглаживать ее.

Share this post


Link to post
Share on other sites

Вначале правое изображение почему-то ползет по горизонтали вправо.

Накопление статистики с нулевых значений?

Я в первом проходе собираю данные о смещениях, сглаживаю каждую точку относительно прошлого и будущего - своеобразный аналог moving avarage, который знает будущее:) Плюс я еще раз сгладил этот же график более быстрой, но уже настоящей moving avarage, чтобы меньше была реакция на резкие движения.

В матлабе стабилизацию делают по шаблону. http://www.mathworks.com/products/computer-vision/demos.html?file=/products/demos/shipping/vision/videostabilize.html

Может быть и Вам найти область, где концентрация дескрипторов побольше, взять с нее шаблон или несколько таких шаблонов, и искать их на следующих 5-и 7-и кадрах, так и повороты можно определять. На 3-м - 4-м кадрах подбирать следующий набор, и так перехватывать.

Еще документ, который может быть Вам интересен: http://research.microsoft.com/en-us/people/yasumat/fullframe_cvpr05.pdf

И здесь посмотрите: http://www.codeproject.com/KB/recipes/ImgAlign.aspx?display=Print

Спасибо за ссылки, буду продолжать изучать. Потом в конце поделюсь реализацией. Вдруг кому будет интересно.

Share this post


Link to post
Share on other sites

У меня вопрос есть ли стандартные наборы для оценки качества алгоритма стабилизации?

Share this post


Link to post
Share on other sites

Не слышал, хотя занимался данным вопросом.

Немного мыслей. Есть много нюансов. Надо собрать набор видео, вручную или полуавтоматически найти матрицы преобразования между соседними кадрами и по этим данным тестировать алгоритм поиска этих преобразований

1. Камера неподвижна? Тогда проще: тестируем алгоритм поиска преобразований по собранным данным.. Это раз. Далее надо как-то оценивать качество алгоритма слияния кадров (называется warping, warp, fuse). Особенно на границах. Тут могут быть варианты, но основной - неподвижность всех элементов сцены и их минимальное искажение. То есть как ни шатается камера, а здание в центре должно оставаться зданием в центре и не искажаться краевыми эффектами.

2. Если камера движется, то дело сильно усложняется. Понятно, что абсолютная неподвижность тут невозможна и вредна. Вот идёт человек с камерой в руках и снимает. Что надо стабилизировать? Очевидно что дрожание рук - да. А раскачивание камеры с каждым шагом? Думаю, что эти движения - нет. Резкий поворот камеры - тоже нет, запаздывания тут вредны, но ситуацию трудно отличить от дрожания камеры.

Share this post


Link to post
Share on other sites

камера неподвижная.

Далее надо как-то оценивать качество алгоритма слияния кадров (называется warping, warp, fuse). Особенно на границах. Тут могут быть варианты, но основной - неподвижность всех элементов сцены и их минимальное искажение. То есть как ни шатается камера, а здание в центре должно оставаться зданием в центре и не искажаться краевыми эффектами.

Неподвижность я думаю просто вектором смещений(dx,dy)(т.к. камера неподвижна) чем меньше тем лучше) а вот о границах я даже не подумал... как я понимаю их же обрезать придётся...

Share this post


Link to post
Share on other sites

 В OpenCV 3.0 есть целый раздел: opencv_videostab, и пример: ххх\source\samples\cpp\videostab.cpp.

Edited by ppop21285

Share this post


Link to post
Share on other sites

Да в opencv уже есть реализация, я пока с алгоритмом не определился буду пробовать и opencv конечно тоже, вообще нужна стабилизация за реальное время, так что буду тестировать несколько вариантов, вроде бы на ютубе есть стабилизация... правда не знаю есть ли реализация в открытом доступе)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×