Есть ли способ удалить 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

Другие вопросы по тегам