Monday, August 12, 2013

Усреднение стека одинаковых кадров

Эта статья на других языках: Averaging stack of identical photos (english version)

...или о том, как потратить массу времени на обработку, чтобы получить из такой картинки

Snowflake unprocessed jpg

такую:

Snowflake averaged

Это, конечно, шутка. Первый кадр, макро фотография настоящей снежинки, не содержит в себе достаточно информации, чтобы вытащить из него детали второго. Первый - это обычный JPEG без обработки (один из семи одинаковых кадров этой снежинки, снятых неподвижной камерой). По нему прошлись встроенные шумодав и усилитель резкости (если усилитель резкости JPEG'ов можно при желании выключить в меню фотоаппарата, то шумодав неотключаем). Кадр был снят на минимальном ISO для Canon Powershot A650 (80), и все же содержит заметные остатки шума и мыло вместо мелких деталей. Вторая картинка - результат усреднения всех семи кадров в формате RAW с последующим повышением резкости и шумоподавлением, результат сборки с помощью масок из четырех вариантов с разной силой шумоподавления.


Соотношение сигнал/шум, или почему усреднение кадров лучше плагинов шумоподавления


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



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

full moon photo

В этом снимке Плеяд усреднено 142 кадра. Это позволило получить очень тусклые звезды + правильный цвет звезд (желтых и голубых) в условиях сильной засветки московского неба и при использовании ISO 800 на компактной камере (из-за использования 6-кратного зума я был ограничен 3-секундным временем выдержки, чтобы звезды не превратились в штрихи, и чтобы получить максимум света на этой выдержке, максимально открыл диафрагму и выставил высокую чувствительность матрицы).

Pleiades M45 star cluster photo

Вот три фрагмента в масштабе 1:1, без дополнительного шумоподавления: 1 кадр, усреднено 16 кадров и все 142:




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


Используемый софт


Adobe Photoshop CS4, плагин шумоподавления Noiseware, опционально - панорамный пакет Hugin (из него нужна только утилита командной строки align_image_stack).

В этой табличке - фрагмент снежинки в масштабе 1:1, к единичному RAW и 7 усредненным RAW применено повышение резкости (unsharp mask 300%, radius 1, threshold 0). Во второй строке - те же фрагменты с шумоподавлением Noiseware с одинаковыми параметрами.

JPEGодин RAWсемь RAW
JPEG + noisewareодин RAW + noisewareсемь RAW + noiseware

Начало работы: RAW-конвертер


Использую встроенный в фотошоп Adobe Camera RAW. Загружаю первый кадр из серии и подбираю для него параметры (баланс белого, exposure, brightness и т.д.) Выставляю линейную кривую контраста и отключаю шумоподавление и повышение резкости средствами конвертера. Импортирую первый RAW в фотошоп, сохраняю tiff с 16 битами на канал, открываю по очереди все остальные RAW из серии, применяю настройки первого кадра (load presets - previous conversion), сохраняю все кадры в tiff.


Выравнивание


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

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



Загружаю все сохраненные tiff'ы в фотошоп как слои в один документ (file - scripts - load files into stack). Если сдвиги в разных кадрах значительные и сразу заметны, для начала грубо выравниваю все кадры вручную относительно самого нижнего слоя (например, по центру снежинки). Выравнивание удобно делать так: для каждого слоя выбирается blending mode = difference вместо normal, а затем кадр передвигается в нужную сторону до тех пор, пока изображение не станет максимально темным, что указывает на минимум различий с самым нижним кадром, затем blending меняется обратно на normal.

После выравнивания сохраняю документ со всеми слоями, а затем вырезаю снежинку в центре, оставляя немного фона по краям со всех сторон. Полученный фрагмент увеличиваю в 5 раз (500%) в image size.

Само выравнивание можно делать или средствами фотошопа, или hugin'а. Алгоритмы разные, и обычно один из способов дает результат немного лучше, чем другой.

1. Для hugin'а все слои после увеличения экспортируются на диск как 16-битные tiff'ы (file - scripts - export layers to files), затем запускается выравнивание командой "align_image_stack.exe -a aligned -v -v file1.tiff ... file7.tiff". После завершения исходные tiff'ы можно стирать, а полученные aligned*.tiff снова загрузить в фотошоп как слои один поверх другого.

2. Для фотошопа все слои выделяются (в палитре layers) и запускается edit - auto align layers с чекбоксом на "auto".


Усреднение


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

Способ 1

, самый простой и эффективный - с использованием smart objects, появившихся в photoshop CS2 и более новых версиях. Все слои выделяются и преобразуются в smart object командой меню Layer > Smart Objects > Convert to Smart Object. Затем в пункте меню Layer > Smart Objects > Stack Mode выбираем режим Mean и ждем окончания усреднения, затем - Layer > Smart Objects > Rasterize, чтобы получить готовый слой с результатом. Этот способ особенно удобен при большом или некратном числе исходных слоев.

Способ 2



, подходящий для более старых версий фотошопа или других графических редакторов с поддержкой слоев с регулируемой прозрачностью. Этот способ удобен также в случае, если на некоторых кадрах есть какие-то детали, которые не хочется включать в финальную картинку (например, движущиеся объекты) - их легко исключить, назначив таким слоям белую маску и убрав черной кистью эти объекты (это приведет лишь к немного большему уровню шума в этой области картинки). Все, что требуется - это установить opacity (непрозрачность) каждого слоя так, чтобы все они вносили равную долю в финальный результат. Для слоев, начиная с нижнего и дальше вверх, ставятся такие значения opacity: 100%, 50%, 33%, 25%, 20%, 17%, 14% и так далее, то есть opacity каждого слоя равна 100, деленному на его номер в стеке, считая снизу. Если слоев много, такой способ уже не очень хорош из-за ошибок округления до целого числа opacity. Самое простое решение - разделить все слои на равные группы, усреднить их внутри групп, а группы друг с другом (например, для двадцати кадров - 4 группы по 5 штук). Для семи кадров я сложил две группы (4 и 3 кадра) и сложил меньшую группу с бОльшей с opacity 43% (100/7*3). Затем слои сливаются в один (layers - flatten).

После этого нам нужно уменьшить полученную картинку в пять раз до ее исходного размера (20%). Это можно сделать снова фотошоповским бикубиком в image - image size, только желательно уменьшать не в один прием, а в несколько шагов, на 75 или 80% в каждом шаге. При таком сильном уменьшении за один шаг слишком большое число исходных пикселей (области 5*5) превращаются в один результирующий пиксель, и, похоже, бикубик использует только какую-то часть пикселей исходной сетки, а оставшиеся отбрасываются и не участвуют в формировании цвета и яркости результата. Если внимательно, с увеличением в 3-4 раза сравнить две уменьшенных картинки c повышенной резкостью, можно заметить небольшое преимущество в детализации варианта, полученного уменьшением в несколько шагов.

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

Дальше можно заняться обычной постобработкой, как с любым единичным кадром. Нужно повысить резкость любым удобным способом (unsharp mask, smart sharpen, фильтр highpass или что-то еще). Поскольку уровень шума снизился радикально, можно выставлять достаточно агрессивные настройки резкости. На этом можно и остановиться, но маньяк вроде меня еще сделает три-четыре копии слоя, применит на каждую разные настройки шумоподавления (агрессивные для фона, средние и слабые для объекта) и соберет все слои с нарисованными вручную или полу-автоматическими масками (полученными с помощью фильтров find edges, glowing edges), чтобы получить хорошие детали на объекте и чистый фон без остатков шума.

masks

snowflake macro photo

Еще один пример, демонстрирующий преимущества усреднения стека кадров:

averaging technique benefits - gif animation

Такое усреднение (averaging) особенно часто используют в астрофотографии, но его можно применять к любой съемке статичных сцен, если трудно получить хорошее качество одним кадром или просто хочется повысить качество снимка. В последний год, кроме макро, я его использую для улучшения качества исходников ночных hdr. В этой картинке усреднены 2 кадра для самой светлой экспозиции и по 8 для 5 остальных, всего 42 исходных кадра:

HDR фотография московского кремля: вид с Патриаршего моста на центр города с ночным освещением и отражениями в реке

Если хотите, вы можете подписаться на мой блог по Email. Я постоянно работаю над фотографиями снежинок, HDR-фотографиями и в технике световой кисти, и вы увидите новые фото или обои на рабочий стол в день публикации:


Почтовая рассылка осуществляется сервисом Google Feedburner, и вы можете от нее отписаться в любой момент.

Автор: Алексей Клятов (E-Mail: chaoticmind75@gmail.com)

1 comment:

  1. Ну, слава богу - я не один. Тоже люблю по 40-80 слоев поскладывать :)

    ReplyDelete