bluebyte 1 Report post Posted July 26, 2011 Есть задача стабилизировать видео. Что посмотреть на эту тему в openCV? Беглый осмотр не привел к результату. Или openCV тут не нужен? Тогда как подойти к задаче? У меня пока такие мысли. Взять видео. Построить график смещений. Сгладить его. Выдать видео, смещая каждый кадр по сглаженным данным. Share this post Link to post Share on other sites
Nuzhny 238 Report post Posted July 26, 2011 Да, в OpenCV ничего готового нет. Обычно кадр разбивают на блоки, ищут их смещение и с помощью RANSAC отбирают вектора смещений, наиболее точно удовлетворяющие модели преобразования кадра в кадр. Модели бывают разные: просто смещение, плюс поворот, плюс приближение/удаление камеры. Если видео было предварительно пережато каким-нибудь потоковым кодеком, то такой подход не сработает. Можно искать на изображении дескрипторы и смотреть на их вектора смещения. Этот метод гораздо медленней. 1 Share this post Link to post Share on other sites
bluebyte 1 Report post Posted July 26, 2011 Можно искать на изображении дескрипторы и смотреть на их вектора смещения. Этот метод гораздо медленней. А что такое дескрипторы? Share this post Link to post Share on other sites
Smorodov 569 Report post Posted July 26, 2011 Вот, почитайте : 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 1 Share this post Link to post Share on other sites
bluebyte 1 Report post Posted July 26, 2011 Вот, почитайте : 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
Nuzhny 238 Report post Posted July 27, 2011 Вспомнил! Лаборатория компьютерной графики этим занималась. Посмотри здесь, здесь и вообще здесь. 1 Share this post Link to post Share on other sites
bluebyte 1 Report post Posted July 27, 2011 Вспомнил! Лаборатория компьютерной графики этим занималась. Посмотри здесь, здесь и вообще здесь. Класс! Спасибо! Share this post Link to post Share on other sites
bluebyte 1 Report post Posted July 30, 2011 Нужна еще помощь!) Смотрите. Вот я нашел совпадающие ключевые точки на соседних кадрах с помощью SURF-дескрипторов. Есть ли какой-нибудь инструмент в openCV для анализа этих точек и построения модели движения камеры? PS: прошу прощения за глупые вопросы, я только учусь Share this post Link to post Share on other sites
Smorodov 569 Report post Posted July 30, 2011 Вопрос не глупый. Это непростая задача. Посмотрите библиотеки MRPT и OpenSLAM (EKFMonoSLAM). Там есть средства для этого. 1 Share this post Link to post Share on other sites
bluebyte 1 Report post Posted August 2, 2011 Вопрос не глупый. Это непростая задача. Посмотрите библиотеки MRPT и OpenSLAM (EKFMonoSLAM). Там есть средства для этого. Спасибо! Библиотеки буду изучать позже, пока решил пойти другим путем. Просто сдвигаю кадры относительно сглаженных данных. В общем-то получилось то, что хотел, хотя scale и rotate не обрабатываются. Есть еще один вопрос!) Можно как-нибудь сдвигать изображение на долю пикселя? Нет, я, конечно, в курсе, что бит не делим. Снимаемый на камеру мир непрерывен, поэтому малейшее смещение отразится не в смещение пиксела, а в изменение, передаваемой им информации. Ой, ну и умею же я запутать) Share this post Link to post Share on other sites
Smorodov 569 Report post Posted August 2, 2011 Можно попробовать сначала увеличить все изображение с необходимой интерполяцией (линейной или может более сложной), затем сдвинуть и снова уменьшить. Способ незатейливый, но думаю должен работать. Share this post Link to post Share on other sites
bluebyte 1 Report post Posted August 4, 2011 А попридирайтесь к результату, пожалуйста. Что бросается в глаза? А то я уже ничего не вижу) http://www.youtube.com/watch?v=xSYkE-QRPtc&feature=player_detailpage Share this post Link to post Share on other sites
Nuzhny 238 Report post Posted August 5, 2011 В целом неплохо. Есть несколько проблем: 1. Аппаратная: при резких движениях камеры изображение с ней размазывается - качество стабилизации, соответственно, падает. Можешь покадрово просмотреть своё видео и убедиться. Чтобы этого не происходило надо на камере увеличить скорость электронного затвора. Очень немногие камеры такое умеют, в основном для профессионального видеонаблюдения или распознавания номеров. 2. Когда ты двигаешь камеру руками, то происходят не только сдвиги по вертикали и горизонтали, но и повороты вокруг 3-х осей. Особенно трудно бороться с поворотом вокруг оптической оси камеры. Мне показалось, что этот вариант у тебя не учитывается. P.S. Стабилизацию на основе дескрипторов делаешь? Share this post Link to post Share on other sites
Smorodov 569 Report post Posted August 5, 2011 Вначале правое изображение почему-то ползет по горизонтали вправо. Накопление статистики с нулевых значений? В матлабе стабилизацию делают по шаблону. 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
bluebyte 1 Report post Posted August 5, 2011 В целом неплохо. Есть несколько проблем: 1. Аппаратная: при резких движениях камеры изображение с ней размазывается - качество стабилизации, соответственно, падает. Можешь покадрово просмотреть своё видео и убедиться. Чтобы этого не происходило надо на камере увеличить скорость электронного затвора. Очень немногие камеры такое умеют, в основном для профессионального видеонаблюдения или распознавания номеров. 2. Когда ты двигаешь камеру руками, то происходят не только сдвиги по вертикали и горизонтали, но и повороты вокруг 3-х осей. Особенно трудно бороться с поворотом вокруг оптической оси камеры. Мне показалось, что этот вариант у тебя не учитывается. P.S. Стабилизацию на основе дескрипторов делаешь? 1. Да, с камерой проблема. У меня только на мыльнице есть. Написано, что снимает 50fps, но на деле разницы ни какой. В некоторых кадрах книги сплющиваются, размываются, от этого на итоговом видео куча всяческих дерганий. Надо попробовать что-нибудь в сети нарыть. 2. "Мне показалось, что этот вариант у тебя не учитывается." - совершенно верно. Я пошел по самому простому пути. Определил SURF-дескрипторы, вычислил графики смещений по x y, сгладил их и вывел. Можно еще поворот по этой же плоскости сделать. Но, видимо, хорошего результата так не добиться. Буду думать по поводу того, как сделать на базе ключевых точек модель движения камеры и сглаживать ее. Share this post Link to post Share on other sites
bluebyte 1 Report post Posted August 5, 2011 Вначале правое изображение почему-то ползет по горизонтали вправо. Накопление статистики с нулевых значений? Я в первом проходе собираю данные о смещениях, сглаживаю каждую точку относительно прошлого и будущего - своеобразный аналог 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
mrgloom 242 Report post Posted August 9, 2011 про дрожание камеры http://forum.vingrad.ru/forum/topic-332210.html Share this post Link to post Share on other sites
ProgRoman 9 Report post Posted August 25, 2015 У меня вопрос есть ли стандартные наборы для оценки качества алгоритма стабилизации? Share this post Link to post Share on other sites
Nuzhny 238 Report post Posted August 26, 2015 Не слышал, хотя занимался данным вопросом.Немного мыслей. Есть много нюансов. Надо собрать набор видео, вручную или полуавтоматически найти матрицы преобразования между соседними кадрами и по этим данным тестировать алгоритм поиска этих преобразований1. Камера неподвижна? Тогда проще: тестируем алгоритм поиска преобразований по собранным данным.. Это раз. Далее надо как-то оценивать качество алгоритма слияния кадров (называется warping, warp, fuse). Особенно на границах. Тут могут быть варианты, но основной - неподвижность всех элементов сцены и их минимальное искажение. То есть как ни шатается камера, а здание в центре должно оставаться зданием в центре и не искажаться краевыми эффектами.2. Если камера движется, то дело сильно усложняется. Понятно, что абсолютная неподвижность тут невозможна и вредна. Вот идёт человек с камерой в руках и снимает. Что надо стабилизировать? Очевидно что дрожание рук - да. А раскачивание камеры с каждым шагом? Думаю, что эти движения - нет. Резкий поворот камеры - тоже нет, запаздывания тут вредны, но ситуацию трудно отличить от дрожания камеры. Share this post Link to post Share on other sites
ProgRoman 9 Report post Posted August 27, 2015 камера неподвижная.Далее надо как-то оценивать качество алгоритма слияния кадров (называется warping, warp, fuse). Особенно на границах. Тут могут быть варианты, но основной - неподвижность всех элементов сцены и их минимальное искажение. То есть как ни шатается камера, а здание в центре должно оставаться зданием в центре и не искажаться краевыми эффектами.Неподвижность я думаю просто вектором смещений(dx,dy)(т.к. камера неподвижна) чем меньше тем лучше) а вот о границах я даже не подумал... как я понимаю их же обрезать придётся... Share this post Link to post Share on other sites
ppop21285 6 Report post Posted August 27, 2015 (edited) В OpenCV 3.0 есть целый раздел: opencv_videostab, и пример: ххх\source\samples\cpp\videostab.cpp. Edited August 27, 2015 by ppop21285 Share this post Link to post Share on other sites
ProgRoman 9 Report post Posted August 27, 2015 Да в opencv уже есть реализация, я пока с алгоритмом не определился буду пробовать и opencv конечно тоже, вообще нужна стабилизация за реальное время, так что буду тестировать несколько вариантов, вроде бы на ютубе есть стабилизация... правда не знаю есть ли реализация в открытом доступе) Share this post Link to post Share on other sites