shikhalev.org
Чешуйки крыла бабочки
Картинка взята с WikiMedia Commons

Первым делом, пожалуй, сошлюсь на источники: ключевым по теме данного поста стал англоязычный пост Barry Gruss­ling — «Focus Stacking in Linux»; прочая информация получена из официального руководства enblend/enfuse. Соб­с­т­вен­но enfuse и будет нашим главным инструментом для стекинга.

Что такое стекинг? Это когда мы делаем несколько кадров одного и того же, в общем случае — с разными параметрами, а затем хитрый алгоритм собирает нам результирующую картинку. Например, если мы сделаем несколько снимков с разной экспозицией, то можем получить в результате что-то очень похожее на результат сведения HDR, о котором я говорил в предыдущем посте. С той лишь разницей, что собственно HDR-изображения (т.е. с динамическим диапазоном более 8 бит на канал) мы не получим, сразу приведение к 8-бит­но­му виду.

Кроме стекинга по экспозиции рассмотрим еще уменьшение шумов и стекинг по фокусу.

Но начнем с экпозиционного. Для примера возьмем те же три снимка, с которыми мы уже имели дело в прошлом посте. И проделаем над ними следующие операции (в командной строке):

$ align_image_stack -a aligned_ IMG_*

Это, как нетрудно заметить, выравнивание. Кстати, Luminance HDR тоже это делает, причем с использованием той же утилиты, которая входит в состав пакета Hugin. Я использовал здесь только самые необходимые параметры, поскольку пока нам этого достаточно.

И сводим выровненные кадры:

$ enfuse -o result.tif aligned_*

Опять же, оставляем все параметры по умолчанию, указав только исходные файлы и конечный… Получаем примерно такое:

А если хочется добавить «драмы», можем чуть усложнить вызов:

$ enfuse -o result.tif --hard-mask aligned_*

И получить:

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

Я отснял четыре кадра на ISO 3200, а затем применил к ним те же самые команды, что и выше для стекинга экспозиции. Давайте посмотрим 100% кроп — было:

Стало:

Для сравнения — кроп с кадра, снятого на ISO 1600:

К сожалению, я тогда не догадался снять тот же кадр на ISO 800, что должно соответствовать сборке из четырех 3200-х, а переснимать всю серию мне лень.

Переходим к самому сложному: к стекингу по фокусу… Тут нас ждет несколько проблем: во-первых, изменение фокуса, в отличие от других параметров, меняет контуры снятых объектов, что затрудняет выравнивание, во-вторых, желание максимальной резкости потребует уже неумолчательных параметров при сведении. И, кстати, для этого примера я был вынужден снимать уже со штатива (все предыдущие были спокойно сняты с рук), отчасти это связано с проблемой контуров, отчасти с тем, что для наглядности съемка делалась с минимальной дистанции, приближено к условиям предметной съемки, для которой стекинг по фокусу обычно и применяется.

Итак, я сделал семь снимков, со штатива, с ручным фокусом. Покажу первый, четвертый и седьмой:

Выравнивание делается так:

$ align_image_stack -a aligned_ -m -g 10 -C IMG_*

Описание параметров можно прочитать здесь. Вкратце: -m позволяет выравнивать контуры разного размера в кадре (а они при разной фокусировке разные), -C выполняет обрезку (crop), а -g 10 задает локальный поиск и размер поля для этого поиска.

Для сведения же выполняем такую команду:

$ enfuse -o result.tif \
    --exposure-weight=0 --saturation-weight=0 --contrast-weight=1 --hard-mask \
    aligned_*

Нам нужны сфокусированные, т.е. наиболее контрастные участки, тогда как все остальное нам не интересно, пусть программа на него не отвлекается. Ну и --hard-mask, чтобы не накладывать размытое на четкое. Получаем:

Неидеально, но вся страница читается. Для получения более высокого качества нужно еще больше шагов, да и снимать не на открытой диафрагме, как в демонстрационном примере…

В целом, стекинг — очень интересная технология, позволяющая обойти различные ограничения, например, на динамический диапазон, ISO или ГРИП, как показано выше. Единственное, что сильно сужает область применения — объект съемки должен быть неподвижен — выравнивание может компенсировать небольшие смещения рук, но вот с движением в кадре сделать ничего не получится.