Sergey1985 0 Жалоба Опубликовано December 6, 2015 (изменено) Доброго времени суток. Вопрос касается размытости изображения и определения сдвига изображения. Для определения сдвига изображения использовал функцию phaseCorrelate но удовлетворительные результаты она приносит лишь тогда, когда изображение является более менее четким. Например снятое на сотовый телефон. Но если видео несколько размыто то эта функция оказывается не работоспособной. А потому возникла необходимость как то его сперва улучшить (увеличить резкость если можно так сказать). Нашел следующую статью и сильно удивился что нет получается никаких стандартных функций для этой цели. На сегодняшний день какие методы решения данной задачи Вы знаете еще или что удалось реализовать? Подскажите (поделитесь) если можно пожалуйста. Изменено December 7, 2015 пользователем Smorodov Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано December 6, 2015 Это сложная проблема. 1. Можно просто увеличить резкость. Это свёртка с простым ядром 3х3, например. Или 1001 другой аналогичный способ. Может справиться с простейшим гауссовым шумом. 2. Найти функцию размытия (PSF) и произвести деконволюцию. Поиск такой функции - ооочень медленный процесс, не видел реалтайм реализаций. Этот способ годится также для убирания motion blur. Что тебе надо? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
boriso 3 Жалоба Опубликовано December 6, 2015 3 hours ago, Sergey1985 said: Вопрос касается размытости изображения и определения сдвига изображения. Вот тут описана теория, плюс есть ссылка на исходники (пусть и ранней версии) программы http://habrahabr.ru/post/175717/ Может быть пригодится Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Sergey1985 0 Жалоба Опубликовано December 7, 2015 Благодарю за ссылку. Задача не тривиальная - это понятно. Ну тогда постараюсь добавить в свой вопрос немного конкретики. Есть видео, кадр из которого я прикрепил (pic). На этом видео данная мира трясется. Необходимо установить максимальное смещение. Были и другие видео. Но как я и говорил phaseCorrelate не самый лучший способ определения смещения. Поэтому я пользовался методом описанным здесь http://robocraft.ru/blog/computervision/3046.html и определял смещение видео по смещению выбранного фрагмента. Но с мирой даже и этот способ оказался не дееспособным. pic.bmp Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ArtemBogatov 2 Жалоба Опубликовано December 7, 2015 Попробуйте оптический поток. Лукаса-Канаде или Фарнебека. Если кроме тряски у Вас нет никакого движения на видео, то просто вычисляете среднее смещение ключевых точек (в случае разреженного оп) или пикселей (в случае плотного оп). А потом по серии кадров вычисляете максимум. Ещё можете посмотреть варианты в исходниках OpenCV в модуле стабилизации видео ( PyrLkRobustMotionEstimator, например ) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано December 7, 2015 Как показывает практика, для поиска глобального движения на отдалённых сценах с небольшими движущимися объектами отлично работает подход, описанный, например, в книге Richard Szeliski в разделе 8.2 Parametric motion. Вот тут можно почитать черновик книги. Подход и быстрый, и точный. По сути это тот же пирамидальный Лукас-Канаде, но не в привычном своём виде для набора точек, а для всего кадра целиком. Работает и для размытый изображений, и для изображений без особенностей, детектируемых алгоритмами типа SIFT. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Sergey1985 0 Жалоба Опубликовано December 7, 2015 Я использую OpenCV2.4.9 поэтому PyrLkRobustMotionEstimator у меня нет. Но cv::videostab идея кажется правильная. В исходниках есть пример, но он во первых слишком сложен для меня, во вторых не программа заканчивается с ошибкой сразу после запуска. Есть ли примеры применения классов из cv::videostab более простые в понимании? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах