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