LINUX.ORG.RU

ffmpeg lens correction

 , , ,


0

1

Приветствую. Если кто-то юзает ffmpeg для коррекций искажений на снимках/фреймах, то подскажите, пожалуйста - какой фильтр лучше брать? Подходящего нашел два - lenscorrection и lensfun, если первый есть из коробки, то для второго нужно пересобирать ffmpeg с поддержкой lensfun.

Оно того стоит? На руках обычный дерьмофон с люто гнущей пространство камерой, и сомневаюсь, что в lensfun базе есть соотвествующий профиль под мой телефон. Видимо, нужно будеть выводить параметры/коэффициенты руками. Какой фильтр лучше взять/где удобней этим заниматься? Ну и максимум доп инфы по теме - приветствуется.

Перемещено hobbit из general



Последнее исправление: kvpfs_2 (всего исправлений: 1)

Ответ на: комментарий от Zhbert

UFRaw работает только с raw снимками, брать не raw он отказался, видос у меня уже готовый, что-то переснять возможности нет, да и не уверен, что смогу заставить телефон сохранять коллекцию raw файлов вместо видосика.

Также наткнулся на протухший софт, который заброшен и уже даже не собирается, не удалось даже собрать плагин для gimp. На проприетарщину не смотрел, но там что-то есть. В общем опробовать lensfun мне так и не удалось. Вроде там есть какой-то петушиный скрпит для c lensfun бэком, но я уже просто забил и начал смотреть в сторону старого, доброго ffmpeg.

kvpfs_2
() автор топика

Какой фильтр лучше взять?

По плодам их узна́ете их. Не попробуешь - не узнаешь. Только желательно, чтобы руки откуда надобно были, а не откуда обычно.

где удобней этим заниматься?

В GUI вестимо. В Kdenlive есть парочка ‘Lens correction’. В Pitivi. Kdnlv/Ptv

В Cinelerra - ‘Lens’. И в Shotcut - ‘Fisheye’. Cnlr/Shtct В последних 2 эффекты богаче и интереснее в настройках, чем в первых 2.

Эту парочку, гуся и гагарочку, и попробуй. Видишь, в шоткате удобные кнопочки сброса параметров. Суровые разработчики синелерра никогда не считали их нужными. В cinelerra-gg там местами пытались их внедрить. Но до Lens effect так и не добрались. Заблудились на дальних подступах. А из таких мелочей и складывается впечатление о юзабилити.

Может тебе еще и эффект Перспектива понадобится.

Да, тьфу *ляха, чуть не забыл - в Cin-GG ж есть ффмпегшный F_lenscorrection. Выделяешь параметр ЛКМ, вводишь значение и бъёшь Enter. Или таскаешь ползунок туда-сюда.

igor_ubuntu
()

Рассказываю как сделал: заюзал lenscorrection фильтр (тот, что дефолтный), с lensfun не связывался, у меня получились следующие коэффициенты:

$ ffmpeg -i %04d.png -vf "lenscorrection=k1=0.35:k2=-0.14" cr/%04d.png

Не идеал, конечно, немного геометрия по краям пострадала, но в средней части удалось получить область, в которой сохраняются размеры объектов при вращении камерой (в принципе они сохраяются и по краям, но там есть некоторое гнутость линий, хоть и незначитьльное, но может быть критично для кого-то).

Пару слов о том, насколько камера искажает без всяких коррекций:
Горизонтальные размеры с краю матрицы больше на 20%, чем в середине матрицы; Вертикальные размеры больше на 34%. Наверное, это лютое дерьмо, и если взять что-то получше + данный фильтр, то можно получить очень достойную картинку с правильной геометрией и без видимых искажений.

О выводе коэффициентов: сначала хотел заюзать opencv (такой вариант предлагал man ffmpeg’a), распечатал шахматную доску, начал делать снимки, и вот не видно на них было больших искажений (хотя должно было быть + и я их видел на своих тестах без всяких досок, в общем хз), бросил и начал делать по своим меткам на кадре. Если кто-то захочет повторить, то сначала ловим k1, когда желаемое примерно получилось, то будет видно, что чем дальше от центра, тем сильнее изогнулись горизонтальные линии, от этой проблемы подкручиваем k2, но не слишком, идеал всё равно не выйдет, края немного погнутся, а в это врем увеличение k2 нивелирует k1 + можно получить лютую изогнутость в углах.

kvpfs_2
() автор топика
Ответ на: комментарий от Zhbert

Кстати и ещё вот о чем думал - а зачем снимки/фреймы в raw формате (видимо что-то напрямую с матрицы, которое содержит доп инфу, главное - расстояние от объекта, выводится через «на что сфокусировалась камера»)?

По наблюдениям, искажения тем сильнее, чем дальше расстояние от объекта, в близи почти незаметны. И вот такие чтуки как Lensfun корректируют с учетом этого. lenscorrection будет «разгинать» все без учета расстояния.

Если размышления верны и я решу взять что-то посерьезней (камеру), то норма ли среди девайсов сохранять фреймы видосика в raw формате или это какая-то экзотика, которую ещё фиг найдешь? И самый нормальный способ получать инфу с матрицы и писать её самому?

kvpfs_2
() автор топика
Ответ на: комментарий от kvpfs_2

RAW - это несжатый снимок с матрицы «как есть». Вот что видит камера, то и сохраняется в RAW. Его гораздо проще затем обрабатывать, поэтому это стандарт для фотографов, например. В нем нет потерь от сжатия, поэтому и на обработке можно вытянуть гораздо больше. Но тут надо фотографов наших позвать, они больше расскажут, я пока еще не настоящий сварщик. @ist76 @AP @Aceler

Насчёт видео в RAW я не знаю, к сожалению. Казалось, что камера в любом случае жмет как-то кадры кодеком.

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

RAW формат нужен не для того, что там нет потерь от сжатия - потери там как раз вполне себе могут быть. RAW формат нужен, чтобы снять все 12-14 бит разрешения в каждом цветовом канале, вместо 8 в стандартном jpeg, что позволяет потом при обработке поднять, к примеру, яркость или насыщенность, не получая артефакты в виде цветных полос.

Видео в RAW существует, но там объёмы данных такие получаются, что проще с ним не связываться. Вместо этого используют разнообразные *-log форматы, которые имеют нелинейную яркость, что позволяет дать больше гибкости на постобработке, чем линейные форматы, но меньшую, чем RAW. Плюс, в видео кодеках часто применяют читерские способы записи информации о цвете, типа 4:2:2, когда на 4 пикселя записывают 4 пикселя информации о яркости, но только два о цвете. Это позволяет записать больший динамический диапазон, слегка потеряв в качестве картинки.

Короче, каждый извращается как может. Некоторые камеры действительно пишут честный RAW, например, для научных целей, но у вас таких денег нет :-)

Что касается ТС, то ему RAW не нужен, вообще совсем. У него какие-то геометрические преобразования, их можно делать даже из mjpeg :-)

Aceler ★★★★★
()
Ответ на: комментарий от kvpfs_2

Кстати и ещё вот о чем думал - а зачем снимки/фреймы в raw формате

Оно тебе просто не надо
Видео в raw тебе не надо совсем, потому что оно будет огромное, обрабатывать придётся на чём-то очень производительном, а плюсов ты не увидишь
Снимать фото в raw имеет смысл, когда ты чётко понимаешь для чего ты это делаешь и снимаешь несколько не так, как снимают в tiff/jpeg; в почти любом другом случае никаких плюсов от съёмки в raw ты не получишь, а получишь минусы в виде напрасной траты времени

ist76 ★★★★★
()
Ответ на: комментарий от Aceler

В raw формате сохраняется инфа о расстоянии до объекта? У камеры ведь она есть, она сфокусировалась, значит плюс минус удалённость знает, можно ли её узнать из raw, вот вопрос. Если нет, то он мне действительно на фиг не нужен.

kvpfs_2
() автор топика
Ответ на: комментарий от kvpfs_2

Расстояние до точки фокусировки сохраняется в метаданных любого формата, если камера его пишет. Вот как оно выглядит в jpeg, например: https://ibb.co/hDD3c22

Если камера его не пишет, то увы.

Aceler ★★★★★
()

Ну и по теме треда: в любом редакторе на MLT (kdenlive, например) есть эффект Lens correction. Можно начать с него.

Если тебе этого мало, можно ивзратиться сильнее. Сумрачный гений оригинального автора darktable произвёл на свет замену под названием vkdt, где есть и поддержка видео, и коррекция дисторсий. Я с видео не пробовал, да и в целом у меня этот проект вызывает некоторое непонимание, скажем так. Но может быть тебе подойдёт.

AP ★★★★★
()
Ответ на: комментарий от AP

Не понимаю вопроса. На сайте Blackmagic прямо пишут, что он «nearly lossless». Это уже значит, что там сжатие с потерями. Плюс, в полученном файле уже должна быть сделана сделана демозаика и можно выбирать степень сжатия. Всё это говорит нам о том, что это сжатие с потерями. На сколько нечестен получившийся кадр? На сколько-то.

Ссылки на исследования можно нагуглить, но я для себя решил, что сжатые RAW меня устраивают, поэтому никогда не интересовался.

Да и какое отношение это имеет к обсуждаемому вопросу.

Aceler ★★★★★
()
Ответ на: комментарий от AP

ffmpeg это всё умеет, либо сам, либо через lensfun, зачем что-то ещё? Оно умеет лучше?

Действительно открытие для меня - камеры пишут расстояние до объекта, значит кореекцию можно делать с коэффициентом расстояния, ибо даль гнется сильно, близкое - нет.

Балуюсь вставкой cgi штучек в реальные сцены, делать это без коррекции просто невозможно, минимальное изменение угла даёт лютые сдвиги и перекосы. Ну и камера дерьмо. Смотрел какие-то фотки до и после коррекции, там снимали на что-то приличное, так вот коррекции небольшие получились (видно по сплющиванию/растягиванию краев фрейма), у меня же коррекции просто огромные на значительно более маленьких дистанциях.

kvpfs_2
() автор топика
Ответ на: комментарий от Aceler

На сайте Blackmagic прямо пишут, что он «nearly lossless». Это уже значит, что там сжатие с потерями.

Там может быть crf 0, например, не говоря о том, что камеры пишут с запасом битрейта, никакого многопроходного кодирования в заданный размер.

Ну и если там внутри FFmpeg, то Lagarith или Huffyuv должно, по идее, прожеваться.

anonymous
()