Перейти к содержимому
Compvision.ru
bluebyte

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

Recommended Posts

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот, почитайте : 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот, почитайте : 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А попридирайтесь к результату, пожалуйста. Что бросается в глаза? А то я уже ничего не вижу)

http://www.youtube.com/watch?v=xSYkE-QRPtc&feature=player_detailpage

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

В матлабе стабилизацию делают по шаблону. 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Я в первом проходе собираю данные о смещениях, сглаживаю каждую точку относительно прошлого и будущего - своеобразный аналог 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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Изменено пользователем ppop21285

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×