Есть ли способ удалить GoPro рыбий глаз с помощью ffmpeg
Кажется возможным компенсировать искажение типа "рыбий глаз" с помощью ffmpeg благодаря фильтру lenscorrection:
ffmpeg -i in.mp4 -vf "lenscorrection=cx=0.5:cy=0.5:k1=-.25:k2=-.25" out.mp4
Какие значения для k1
а также k2
особенно для гопро? Есть ли способ их вычислить?
2 ответа
Я не думаю, что есть общие настройки для всех моделей и объективов GoPro. Фактор также в том, что люди могут использовать некоторые настроенные / сменные линзы.
Я надеялся на пример изображения, с которым вы должны работать, но не берите в голову...
Надеюсь, что ниже полезно для вас в некотором роде
Проверьте эту ссылку для GoPro Hero 3 settings
(относится к другим моделям). Чтобы получить общее представление о лучших k1
а также k2
значения, вы должны найти ближайшее соотношение сторон к вашему разрешению изображения, то...
Разделите H. FOV deg
с V. FOV deg
и умножить результат на Diag. FOV deg
,
Пример: где размер изображения составляет 1920 x 1080: это делает его широкоэкранным 16:9.
Настройка GoPro 3: 16 х 9 широкоформатный::
H fov
= 69,5 ||V fov
= 118,2 ||Diag
= 133,6
Так 118.2 / 69.5 * 133.6 = 227.216 etc
за k1
результат теперь целочисленный 227
(опустить десятичные точки).
за k2
Значение 0.022
кажется универсальным (все тестовые изображения), так что вы можете попробовать k2=-.022
,
за cx
а также cy
сохранить их как: cx=0.5:cy=0.5:
,
Пример:
ffmpeg -i in.mp4 -vf "lenscorrection=cx=0.5:cy=0.5:k1=-0.227:k2=-0.022" out.mp4
Результат: (оригинальное изображение, найденное через Google изображения видео GoPro Hero-2).
Для GoPro Hero 5 и 6:
ffmpeg -i input.mp4 \
-vf 'lenscorrection=k2=0.006:k1=-0.18' \
output.mp4
FFmpeg имеет lenscorrection
фильтр, который можно использовать для исправления радиального искажения в видео. Тем не менее, без большего контекста - такого как модель и настройки вашей камеры - было бы трудно предоставить больше информации. Я подозреваю, что это все равно потребует проб и ошибок.
PS: Вы пробовали запустить программное обеспечение камеры под WINE? Некоторые его версии, по-видимому, имеют этот вид фильтра коррекции, предопределенный и легко доступный.
Я написал пост о различных методах исправления искажений с помощью ffmpeg - думаю,lensfun
или v360
фильтры являются лучшими вариантами, чем фильтр коррекции объектива.
Тем не менее, теоретически вы должны иметь возможность вычислять значения для k1 и k2, используя функцию OpenCV- calibrateCamera. Вы бы хотели использовать флагиCALIB_FIX_PRINCIPAL_POINT
(вместе с координатами для фиксации главной точки в центре изображения, как предполагает коррекция объектива), CALIB_FIX_K3
(поскольку коррекция объектива не использует k3
), а также CALIB_FIX_S1_S2_S3_S4
(поскольку линзовая коррекция не учитывает тангенциальные искажения). Доступен пример кода, который вы можете просто изменить для этого.
Однако, когда я попытался, я застрял, потому что не мог найти способ исправить фокусное расстояние в OpenCV, но при коррекции объектива фокусное расстояние жестко закодировано на половину диагонали изображения.
Для GoPro 3+, 16:9 с широким полем зрения
ffmpeg -i input.mp4 -vf "lenscorrection=0.5:0.5:-0.335:0.097" output.mp4
Вы можете исправить рыбий глаз с помощью ffmpeg's lenscorrection
, но по краям результат будет плохо выглядеть.
ht tps://stackru.com/images/5ed33c14c84997eadeffcad8f04967ec8782d9e5.png