Итак, я уже около года занимаюсь этой проблемой и не могу ее решить. Я отказался от этого некоторое время назад, но теперь я исследован и готов получить ответ.
Я пытаюсь подделать длинную выдержку, сделав несколько снимков в формате 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](https://i.stack.imgur.com/fCbKo.jpg)
Я пробовал несколько разных вариантов приведенной выше формулы. Одним из тех, что я считал многообещающим, была производная сигмоидальной функции . Причина, по которой я использовал производную сигмоида, заключается в том, что я провел тематическое исследование, в котором изучал влияние конечных выходных сигналов RGB в зависимости от значения ползунка «EV» в Photoshop Camera Raw и обнаружил сигмоидоподобный рисунок. Вот как это выглядит, когда я строю его для некоторых пикселей:
![Sigmoid maybe?](https://i.imgur.com/rqF9dSl.png)
Так что я подумал, может быть, производная сигмоида (высокие изменения для средних значенийНизкие изменения для низких и высоких значений фильтра) исправят ситуацию. Я нормализовал значения фильтра до диапазона 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](https://i.stack.imgur.com/pKNZE.jpg)
Заключение и наблюдения
Как видите, он все еще розоватый. Выше приведены фотографии JPEG, но на самом деле я работаю с RAW. Мне просто нужно было загрузить их в формате JPEG, чтобы их можно было вставить в строку.
Розовый цвет возникает при отсутствии зеленого цвета. Камера имеет байеровский фильтр RGGB, но я действительно не понимаю, как я мог получить этот эффект. У любого есть идея, в чем здесь виноват и как я могу это настроить программно. У меня весь трубопровод настроен. Мне нужна только формула, но почему-то она не работает. Я закодировал это в Python и Swift, и результаты те же. Определенно есть проблема с формулой, использующей значения байеровского фильтра RAW. Я думаю, что это крутой вызов, но на этом я дошел до конца.
Есть мысли?
ОБНОВЛЕНИЕ: Вот результаты гистограммы для картинки до и после применяется функция exposureAdjust
. Похоже, зеленый канал нужно настроить по-другому?