Эмулируйте выдержку затвора на фотографиях в формате RAW с использованием укладки экспозиции - Фотопедия
1 голос
/ 26 ноября 2019

Итак, я уже около года занимаюсь этой проблемой и не могу ее решить. Я отказался от этого некоторое время назад, но теперь я исследован и готов получить ответ.

Я пытаюсь подделать длинную выдержку, сделав несколько снимков в формате RAW и делая что-то с Фильтр Байера значений, чтобы получить эффект от того, что затвор оставался открытым на долгое время.

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

Например, если у меня есть три 1/3 секундыфотографии, снятые без перемещения камеры, должны хранить ту же информацию, что и фотографии продолжительностью 1 секунда.

Проблема, которую я получаю, заключается в том, как я могу количественно оценить это объединение. Я обнаружил, что многие разные методы терпят неудачу, и я не уверен, почему. Если я просто усредню несколько фотографий, я получу огромное количество шумоподавления . Так что эту часть приятно иметь. Позже я могу использовать Camera Raw, чтобы осветлить фотографию , и я получу близкое приближение к тому, что я получил бы с 1-секундной выдержкой. Проблема в том, что я хочу сделать это на устройстве. В настоящее время я использую iPhone для тестирования, но я не думаю, что это должно иметь значение.

Текущая настройка и формула

Я использую три 1/3 секунды выдержки, чтобы попытаться подделать1 секунда фото. Моя текущая формула проста:

out_picture[x][y] = picture1[x][y] + picture2[x][y] + picture3[x][y]

Проблема в том, что это дает мне действительно розовые картинки, например:

JPEG version of RAW file

Я пробовал несколько разных вариантов приведенной выше формулы. Одним из тех, что я считал многообещающим, была производная сигмоидальной функции . Причина, по которой я использовал производную сигмоида, заключается в том, что я провел тематическое исследование, в котором изучал влияние конечных выходных сигналов RGB в зависимости от значения ползунка «EV» в Photoshop Camera Raw и обнаружил сигмоидоподобный рисунок. Вот как это выглядит, когда я строю его для некоторых пикселей:

Sigmoid maybe?

Так что я подумал, может быть, производная сигмоида (высокие изменения для средних значенийНизкие изменения для низких и высоких значений фильтра) исправят ситуацию. Я нормализовал значения фильтра до диапазона 0-1, используя уровень черного и максимальное значение в камере. Я сделал несколько модификаций для производной, чтобы она соответствовала диапазону значений 0-1, , это функция , с которой я столкнулся. Затем я умножил количество снимков, чтобы имитировать ползунок EV в Camera Raw.

Вот формула для этого (в python):

def exposureAdjust(x):
   black_level = 528    ## iPhone RAW Photos have a black_level of 528
   max_pixel_value = 2**14 - 1    ## 14-bit depth
   normalized = (x - black_level)/max_pixel_value    ## now x is between [0,1]
   EV = num_pics    ## faking EV value
   adjustment = EV * (np.exp(-10 *(x - 0.25)))/(np.exp(-10*(x - 0.25)) + 1)^2

   return min(x * (1+adjustment), max_pixel_value)    ## Cap at 2**14 


num_pics = 3
out_picture[x][y] = picture1[x][y] + picture2[x][y] + picture3[x][y]
out_picture[x][y] = exposureAdjust(out_picture[x][y]/3)

Запуск этой формулы,Я получаю аналогичный результат:

Still broken


Заключение и наблюдения

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

Розовый цвет возникает при отсутствии зеленого цвета. Камера имеет байеровский фильтр RGGB, но я действительно не понимаю, как я мог получить этот эффект. У любого есть идея, в чем здесь виноват и как я могу это настроить программно. У меня весь трубопровод настроен. Мне нужна только формула, но почему-то она не работает. Я закодировал это в Python и Swift, и результаты те же. Определенно есть проблема с формулой, использующей значения байеровского фильтра RAW. Я думаю, что это крутой вызов, но на этом я дошел до конца.

Есть мысли?


ОБНОВЛЕНИЕ: Вот результаты гистограммы для картинки до и после применяется функция exposureAdjust. Похоже, зеленый канал нужно настроить по-другому?

Ответы [ 2 ]

1 голос
/ 26 ноября 2019

Наблюдения:

  1. Вы суммируете значения каждого пикселя, но ваша функция exposureAdjust() предполагает, что после кондиционирования каждый пиксель будет находиться в диапазоне [0, 1). Это не правильно. Предположим, что значение пикселя в каждом из 3 входных изображений составляет, скажем, 50% полной шкалы (таким образом, 2 13 = 8192). Суммируя, что три раза дает 3 * 8192 = 24 576. Тогда результат после normalized = (x - black_level)/max_pixel_value составляет около 1,47, определенно не нормализуется до менее чем 1.

  2. Удалите свою сигмовидную строку adjustment =, пока не разберетесь с остальной логикой (например,как указано выше). Вот график вашей сигмовидной функции:

    enter image description here

    Обратите внимание, что для значений x выше примерно 0,4, увеличивается x дает быстро меньшие значения y (ваше «скорректированное» значение. Для сравнения, ненастроенное значение должно соответствовать y = x linearграфик на графике.

  3. Для нормализации (при условии правильно ограниченных входных данных [0, max_pixel_value - 1]) вам, вероятно, следует также уменьшить знаменатель на black_level (т.е. normalized = (x - black_level)/(max_pixel_value - black_level)). Если вы этого не сделаете, то ваши нормализованные значения находятся в диапазоне [0, .90,969) (точнее, (2 13 - 511) / (2 14 - 1)).

0 голосов
/ 26 ноября 2019

Ваши результаты явно пурпурные, и это противоположно тому, где они должны быть. Они должны быть зелеными для не исправленного байбера RGB.

Я подозреваю, что на вашу наблюдаемую коррекцию сигмовидности сильно повлияли необработанные данные, уже имеющие коррекцию баланса белого, примененную в ACR. Возможно, в этот момент вы даже получаете «двойную коррекцию», но я не знаю.

Эта статья о Uni-WB содержит много информации о коррекциях / методах необработанных данных и поправочных коэффициентах WB. http://www.guillermoluijk.com/tutorial/uniwb/index_en.htm

...