Сергей Делов ([info]izhkul) wrote,
@ 2009-04-18 00:31:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
Entry tags:linux, photosoft, закладка, фото

Linux, UFRAW и lensfun


Я изредка использовал ufraw для преобразования файлов из формата raw в tiff и давно хотел посмотреть, какие возможности добавляет lensfun.

После безуспешного поиска закладки lensfun в последней версии ufraw я понял, что Udi Fuchs, его нынешний заведущий, принял lensfun, мягко говоря, с прохладцей.

Пришлось собирать ufraw+lensfun самому и смотреть, что же там полезного.
Эксперименты провел на рыбьем глазе Зенитар 2.8/16мм и моем любимом Canon 4.0/17-40mm L.


Коррекция хроматической аберрации.


Не сильно удобно, поскольку максимальное увеличение, которое дает ufraw, это 1/2 (50%), а 1:1 мне не удалось получить даже после кавалерийского наскока на код ufraw.
Иначе говоря, очень плохо видно, что же там корректировать.

Далее скриншоты, один к одному как оно было на экране.

Зенитар 16мм/2.8 рыбий глаз

До



После



Canon 17-40mm 4.0 L. Хоть он и L, но...

До



После




Скажем, в Gimp то же самое делать гораздо удобнее с помощью прилады Fix-CA (http://registry.gimp.org/taxonomy/term/234), да и опций поболе будет.

Коррекция виньетирования


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

Исправление геометрических искажений


Вот эта вещь просто замечательная. Насколько я знаю, есть одна коммерческая программа, DxO Optics Pro, которая преобразует из RAW с коррекцией искажений оптики.

К примеру, фото, сделанное на 17мм 4.0/17-40L



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

Преобразование типа объектива


Для рыбьего глаза коррекция геометрических искажений смысла не имеет - он как раз и сделан, чтобы все искажать.

А вот преобразование снимка в другой тип проекции довольно забавно

Исходное



Преобразованное в правильное, прямоугольное изображение



То же прямоугольное изображение, но без кадрирования:


У Зенитара 16мм угол зрения по диагонали кадра 180o, вот он как натягивает эти градусы :).

Я и раньше разлекался такими преобразованиями, сильно нравился угол зрения объектива.

Преобразованное в панорамное изображение. Автоматическое масштабирование неточно кадрировало, углы без картинки.



Панорамное без кадрирования


равнопрямоугольная, эквидистантная проекция:



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

Zap, в миру Андрею Заболотному, с меня причитается пиво.

А вот чего там нет и что есть в panorama tools (http://panotools.sourceforge.net/) - так это поворота изображения по 3 осям (коррекция наклона объектива вверх/вниз и вправо/влево, поворота вправо/влево), т.е. программного объектива со сдвигом.
Я ненавижу "падающие" здания и всегда правлю их на своих снимках.

Заодно бы решило и проблему исправления наклонённого горизонта.



(9 comments) - (Post a new comment)


[info]terapixel
2009-04-18 06:59 am UTC (link)
Это все здорово, но вот как бы такие элементарные вещи, как калибрацию монитора, сделать в Линуксе, а? Так, для начала. А то вот есть, скажем, iOne. И что дальше?

(Reply to this) (Thread)


[info]izhkul
2009-04-18 02:53 pm UTC (link)
Для калибровки монитора я использую вот это:
http://www.argyllcms.com/

Ну и как всегда, Linux - это игрушка для самоделкиных в душе.
Т.е. если нет готовности подшаманивать - лучше не трогать.
Я его люблю за то, что всегда можно посмотреть, как оно сделано.

Ну и под винды/мак тоже можно сделать этот ufraw+lensfun, и наверняка кто-то сделал.

(Reply to this) (Parent)


[info]anpaza
2009-04-18 07:13 pm UTC (link)
Привет.

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

Вычислить параметры можно автоматически с помощью утилиты tca_correct из пакета hugin (по-моему он появился только в версии 0.7.0).

К сожалению, мат. модель хроматических аббераций, использующаяся в хугине слишком сложна (в смысле - долго вычисляется), и поэтому я её не имплементировал в lensfun (т.к. хроматические абберации достаточно точно апроксимируются линейной функцией, в hugin'е же используется полином четвёртого порядка, что-то типа:

x' = x * (x^3 * a + x^2 * b + x * c + v))

В lensfun же используется просто

x' = x * k

Вообще надо подумать, возможно добавлю полную модель Hugin'а в след. версии. Пока же заметим, что k это и есть v в уравнении hugin, при a = b = c = 0.

Пока же делаем так: первым делом проявляем негатив без никаких коррекций (и без улучшений типа шарпенинга). Потом:

tca_correct -o v mypic.tiff

На выходе получаем что-то типа:

-r 0.0000000:0.0000000:0.0000000:1.0002551 -b 0.0000000:0.0000000:0.0000000:1.0000963

Нас интересует последняя цифра в линейном уравнении для r и b, однако в lensfun используется обратная величина (1/x). Плюс к этому, в своих моделях hugin предполагает кроп равный 1.0, однако часто это не так. Поэтому вычисляем обратную величину и делим её на кроп фактор:

Kr = 1/(1+(r-1)/crop) = 1/(1+(1.0002551-1)/1.5) = .99982996225108649856
Kb = 1/(1+(b-1)/crop) = 1/(1+(1.0000963-1)/1.5) = .99993580412137540769

Теперь открываем негатив в ufraw, идём на закладку lensfun, tca, ставим модель Linear, в поле kr прописываем 0.99983, в поле kb пишем 0.99994.

Теперь проявляем и смотрим что получилось.

Чтобы не париться, можно эти параметры прописать прямо в базу данных. Для этого находим запись, соответствующую Вашему объективу, куда пишем:



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

(Reply to this) (Thread)


[info]anpaza
2009-04-18 07:14 pm UTC (link)
Чёрт, движок lj сжевал мой xml код. Вот ещё раз:

<tca model="linear" focal="15" kr="0.99983" kb="0.99994" />

(Reply to this) (Parent)


[info]izhkul
2009-04-19 02:18 am UTC (link)
Андрей,
спасибо за коммент.

Я посмотрел доку на lensfun, увидел, что файле описания объективов есть место и параметрам хроматической аберрации, и виньетированию.

Потом глянул на пакеты для скоро выходящей убунты/красной шляпы 9 и увидел, что они влючены в дистрибутив.

Во первых, я Вас поздравляю таким явным признанием.

Во вторых, у меня теперь есть уверенность, что lensfun уже не умрет и база данных объективов будет расшииряться.

Ну и в третьих, надеюсь, что у Вас найдется спонсор... типа Google для дальнейшего развития lensfun. В конце-концов они же сейчас объявили поддержку panotools.

Еще раз спасибо,
и напоминаю, - я в Бостоне, и за мной пиво... ну или вообще, обращайтесь.

(Reply to this) (Parent)(Thread)


[info]anpaza
2009-04-19 12:12 pm UTC (link)
Честно говоря, я бы махнулся "признанием" на появление человека, желающего тянуть эту лямку дальше :-) Увы, я взялся за этот проект от безысходности. Ну да ладно, надеюсь рано или поздно появятся люди, которым это интересно.

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

Насколько я понял, там что-то проклёвывается в отношении lensfun по линии Google Summer of Code. С деталями я пока не знаком, посмотрим...

(Reply to this) (Parent)(Thread)


[info]prokoudine
2009-04-20 01:42 pm UTC (link)
С деталями могу ознакомить, хотя часов через пять-шесть они станут известны всем :)

В hugin/panotools на GSoC2009 запланирован проект "Straight-line detection for automated lens calibration". Заниматься им будет Tim Nugent, который известен тем, что ему, в общем-то, и научный руководитель не нужен: он сам со всем справляется.

Цитата из его заявки:

How I will solve the problem

* Either create a new tab, modify the CP editor tab or create a new dialogue from e.g. the Edit menu. Display an image.
* Semi-automatic: Draw box around line using wxWidgets.
* Fully-automatic: use whole image rather than providing selection.
* Use x,y coordinates of selection to take subsection of image containing a straight line using VIRGA.
* Smooth subsection using Gaussian convulation to highlight regions of theimage with high first spatial derivatives [1].
* Run Canny edge detector [2] on resulting subsection. This will detect the lines that we need to mark with CPs.
* The Canny detector is regarded as state-of-the-art [3] and is also a VIGRA function [4] therefore no external dependencies.
* For fine tuning, scale and threhold paramaters can be user adjusted.
* Threshold resulting image until only 1 edge remains.
* This is potentially difficult and will depend on good (semi-automatic) selection of the line.
* Mark line on image in GUI.
* User decides whether detection is correct. If it is not, go back and adjust selection or paramaters.
* Move across or down resulting edge and gather x,y coordinates.
* Add these coordinates as straight line control points.
* Run optimiser and save lens calibration data.

[1] http://homepages.inf.ed.ac.uk/rbf/HIPR2/canny.htm
[2] http://en.wikipedia.org/wiki/Canny_edge_detector
[3] http://en.wikipedia.org/wiki/Edge_detection
[4] http://hci.iwr.uni-heidelberg.de/vigra/doc/vigra/group__EdgeDetection.html

I've already played around with the VIGRA code and am detecting edges reasonably well (see image). I'm familiar with wxWidget's drawing capabilites so drawing a box around some of the edges should be a matter of a couple of mouse clicks. Then using VIGRA to detect the black pixels on white background is trivial. These become line CPs and we're good to go.

(Reply to this) (Parent)


[info]prokoudine
2009-04-20 07:38 am UTC (link)
Вот ты и попался :)

(Reply to this) (Parent)(Thread)


[info]anpaza
2009-04-20 01:28 pm UTC (link)
А то я прятался :)

(Reply to this) (Parent)


(9 comments) - (Post a new comment)

Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…