Как быстро пополнить базу данных LensFun по объективам

В настоящее время LensFun является не то чтобы самой популярной, а фактически единственной библиотекой, предназначенной для полуавтоматической и автоматической коррекции искажений, вносимых фотооптикой.

LensFun используется в darktable, Rawstudio, digiKam, UFRaw и некоторых других программах и работает вполне прилично, если бы не одно «но»: не все объективы есть в базе данных, и не все существующие данные по объективам достаточно полны.

Проблема осложняется тем, что для LensFun нет графического интерфейса, при помощи которого можно было бы быстро создавать готовые записи для базы. Ну а поскольку для расчётов дисторсий в LensFun используется модель panotools, создатель библиотеки Андрей Заболотный советует просто использовать Hugin.

В состав самой новой версии этой программы вошло приложение Hugin Lens Calibration, которое можно считать первым шагом в сторону интерфейса к LensFun. Скачайте Hugin здесь, и давайте дальше разбираться.

Для начала вам понадобятся снимки, по которым можно создать модель искажений. Тут есть два распространённых варианта.

Во-первых, это напечатанная на принтере и снятая с близкого расстояния мишень, представляющая собой обычную сетку. Мишень желательно при этом закрепить на куске картона, чтобы она нее гнулась. Во-вторых, это фото архитектуры с чётко выраженными горизонтальными и вертикальными линиями.

Если профиль создаётся для объектива с трансфокатором, нужны снимки для максимального числа доступных фокусных расстояний. Кроме того, желательно, чтобы оптическая ось объектива была перпендикулярна плоскости снимаемого объекта. Правда, разработчик Hugin Бруно Постл уже откомментировался в англоязычной версии этого урока, что перпендикулярность не принципиальна, и перспективные искажения допустимы. Но тут уж решайте сами.

Интерфейс у программы максимально простой: список изображений, параметры поиска линий, кнопка  расчёта значений переменных и собственно просмотр.

Hugin lens calibration UI

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

Фокусное расстояние и множитель программа как правило читает из Exif. В тех редких случаях, когда это не срабатывает, вы можете просто подсмотреть их в любом просмотрщике изображений и вбить ручками:

Adding images and setting basic metadata

Разобравшись с этим, вам нужно подобрать оптимальную комбинацию параметров для алгоритма определения краёв. Благодаря ему программа и находит вертикальные и горизонтальные линии в изображении, по которым считает переменные для формулы обратного преобразования. Общий принцип таков: чем больше значения Edge detection scale и Edge detection threshold, тем меньше краёв получается.

Edge detection options

Поиск линий запускается нажатием кнопки Find lines. Для упрощения собственной жизни лучше всего переключиться в режим просмотра Edge detection (переключатель находится над изображением). В этом режиме найденные линии лучше различимы:

Automatically detected horizontal and vertical lines in a photo

Если какие-то из найденных линий совершенно лишние, просто щёлкните по ним указателем мыши, чтобы они не учитывались при вычислении переменных. Такие линии поменяют цвет с зелёного на красный:

A couple of horizontal and vertical lines marked as bad

Когда комбинация параметров даст достаточное количество правильно найденных вертикальных и горизонтальных линий, поставьте галку напротив каждой из переменных a, b и c и нажмите кнопку Optimize для запуска расчёта.

Calculated lens distorsion settings

Для проверки правильности расчётов можно переключиться на режим просмотра Corrected. Если всё нормально, создайте новый файл XML в текстовом редакторе, впишите туда рассчитанные значения, сохраните и отправьте Андрею для включения в состав следующей версии LensFun. Андрей написал достаточно подробное руководство по созданию файлов XML для базы объективов LensFun, повторять его никакого смысла нет.

Дальше можно локально пропатчить файл базы данных, не дожидаясь выпуска новой версии библиотеки. Файлы XML как правило находятся в каталоге /usr/share/lensfun/. После внесения изменений используемый вами фоторедактор подхватит новую версию базы данных и сможет корректировать геометрические дисторсии отпрофилированного объектива.

Что касается возможности сохранять XML из Hugin Lens Calibrator напрямую, разработчики с радостью примут соответствующие патчи.

4 Комментарии

  1. У меня есть пара важных дополнений. Так просто и лаконично, как у Александра, у меня не выйдет. Уж придётся вам помучиться. За что извиняюсь заранее.
    1. У некоторых (как и у меня) Calibrate Lens GUI не хочет находить ни одной линии. Хитрость в параметре Minimum line length. 0.3 — означает, что линии на фото должны быть не короче трети от длинны(ширины). Видимо, смотря что больше. Это хорошо видно по водосточной трубе в уроке. Короче, будьте внимательны при выборе объекта для съёмки. Подробнее на http://wiki.panotools.org/Calibrate_lens_gui
    2. По поводу тестовой мишени. Лично я решил изготовить что-то похожее на «решетку Ронки» . Я нарисовал горизонтальные, довольно широкие линии параллельно друг другу. Всё равно модель дисторсии симметрична относительно центра. Мишень рисовал Inkscape. Что бы быстро проверить, что же вы натворили :), экспортируйте её в png и скормите Hugin. В предложенной мной мишени есть однако один недостаток — у автофокуса от неё съезжает крыша. Так что либо фокусируйтесь вручную, либо наклейте (или поместите на время ) небольшую картинку в центр и фокусируйтесь по центральной точке. Для печати более предпочтителен лазерный принтер, особенно если мишень маленькая. Ещё на заметку, можно взять вариант с сайта Hugin с колышками и натянутой между ними верёвкой. Правда, веревку лучше брать не в тон поверхности. См. http://hugin.sourceforge.net/tutorials/calibration/en.shtml
    3. По поводу как всё это лучше снять? Просто нужен технически качественный снимок — т.е резкий, с правильной экспозицией. Низкая светочувствительность, кроткие выдержки … Этого проще добиться при съёмке днём на улице. Тем более что солнышко уже пригревает. Если у вас сильно трясутся руки, выдержки всё равно длинноваты ( ну не повезло с погодой) или вы обладатель длиннофокусного объектива, не ленитесь — воспользуйтесь штативом и автоспуском. Немного не очевидное, — если на вашей камере есть оптический(или электронный) стабилизатор изображения, обязательно выключите его. Это сильно ухудшает точность измерений.
    4. Что лучше выбрать, специальную мишень или снимок архитектуры? Зависит от того, для чего вы калибруете объектив. Важное «лирическое отступление» — величина дисторсии зависит в том числе и от расстояния. Поскольку на сайте LensFun, ничего конкретного я не нашёл, пришлось забраться аж на сайт PTLens. Поскольку его базы легли в основу LensFun. Поскольку, превращение части базы в «тыкву», на мой взгляд, не лучшая идея, предлагаю действовать следующим образом: Для обычного профиля (архитектура, пейзаж, и пр.) снимаем с расстояния от 8метров. В этом случае дисторсия будет качественно исправлена в диапазоне от трёх метров до бесконечности(см. сайт PTLens). Архитектура предпочтительней современная. Если вам нужен специальный профиль для репродукции, макро режима и т.п снимаем мишень с нужного нам расстояния. Кстати, специальный профиль может мирно сосуществовать с обычным. Примеры, как это организовать, можно найти в самой базе и на сайте LensFun.
    5. С тех пор, как был написан урок, прошло уже порядочно времени… К примеру, вышел Hugin 2012.0 поддерживающий сохранение в формат LensFun. Здесь есть важный момент, который касается обладателей объективов с переменным фокусным расстоянием. В случае оптики с фиксированным фокусным расстоянием, всё идёт как по маслу. Однако, если вы загрузите снимки с разными фокусными расстояниями, то увидите окошко, где на чистом английском, вам объяснят что вы не правы и силу тут применять бесполезно! :) Увы, они не шутят — сохранить его можно, но внутри будет фиг знает что. Ну не предусмотрен пока такой вариант! — даже если сохранять в базу LensFun! На выбор у вас два варианта: Первый, хардкорный — сохранять для каждого фокусного расстояния свой ini файл. Далее, вручную всё сводить вместе. Второй, читерский :), много проще и быстрее. Как я понимаю, это отголоски недописанных будущих возможностей. Сохраняем результаты для первого фокусного расстояния. Открываем результаты в текстовом редакторе и стираем тег «focal». Последовательно, раз за разом, сохраняем оставшиеся фокусные расстояния в тот же файл. Далее опять открываем тот же файл в редакторе. Осталось только подправить в теге focal параметр max на соответствующее максимальное фокусное расстояние вашего объектива. Всё готово!

    • @ForestMen, у вас практически статья получилась :) Может, причесать, дополнить картинками и опубликовать как новый материал? :)

      • Ничего не имею против. Я было даже садился за черновик… но быстро понял, что это может, мягко говоря, затянуться. Однако кому-то эта информация нужна здесь и сейчас. Так и появился мой комментарий выше. Информации по данной теме на русском довольно мало, а на английском она весьма разрозненная. Давайте попробуем с этим что-нибудь сделать. Однако, должен заранее предупредить всех кто это читает, что процесс может затянуться — я известный Слоупог! :)

  2. Спасибо огромное за статью, Александр, и вам ForestMen.
    lensfun — отличная библиотека.
    Пробовал использовать совместно с трекером в blender, но выяснил следующую информацию http://blenderartists.org/forum/showthread.php?314438-Lens-dirtortion-of-Movie-Clip-Editor&highlight=lensfun
    Т.е. в blender модель искажения совсем другая, там opencv (а это для меня нереально осилить)))
    Вот бы конвертор значений, бы)))

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*


Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.