Вот фотография новогодней ёлки в том виде, в котором видит матрица камеры:

Она даже не чёрно-белая, а серо-серая.
Причина этого в том, что хотя аналогово-цифровой преобразователь (АЦП) камеры теоретически способен выдавать значения от 0 до 16382, данные не покрывают весь этот диапазон:

Реальный диапазон значений АЦП приблизительно равен от 2110 до 13600. Давайте представим эти значения в изображении в виде чёрного и белого:
Vnew = (Vold - Black)/(White - Black)

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

Давайте раскрасим каждый пиксель в цвет того фильтра, через который он виден:

Эта версия более цветная, но каждый пиксель имеет лишь одну треть от своего RGB-цвета.
Чтобы исправить это, я просто усреднил значения каждого пикселя с его соседями:

Если применить этот процесс ко всему фото, свет получит цвет:

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

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

Из-за этого в случае непосредственного отображения линейных данных они кажутся гораздо темнее, чем должны быть.
Обе эти проблемы можно решить, применив к каждому цветовому каналу нелинейную кривую, чтобы сделать тёмные области более яркими… но в итоге получается не очень:

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

… а вот изображение с ослабленным зелёным, чтобы он соответствовал остальным каналам:

… и снова применяем кривую:

Наконец-то мы получили неплохое фото.
Но на самом деле, это самый минимум: я не выполнял никакой калибровки цветов, баланс белого неидеален, точки чёрного слишком высоко, на изображении много шума, который нужно подчистить…
Кроме того, применение кривой к каждому цветовому каналу непроизвольно привело к снижению насыщенности ярких участков. Этот эффект выглядит вполне неплохо (и именно его мы привыкли ожидать от плёнки), но из-за него звезда стала менее жёлтой. Можно выделить светлоту и применить к ней кривую, сохранив при этом цвет. Само по себе это превратило бы светодиодную гирлянду в перенасыщенный хаос, но если объединить оба способа, то можно получить красивые результаты.
Вот для сравнения фотография, которую сгенерировала моя камера из тех же данных:

Фотография явно далеко «не оригинальная»: чтобы достаточно точно отразить, как объект выглядит на самом деле, нужен приличный объём вычислений.
Все изменения контрастности или баланса белого, вносимые вами в графическом редакторе, выполняет «за кулисами» и сама камера. Отредактированное фото не становится «фальшивей», чем оригинал, это просто разные визуальные представления одних и тех же данных.
В конце концов, воссоздать восприятие человека сложно, и ещё сложнее оказывается это сделать в условиях ограничений дисплейной технологии или печати. Нет ничего плохого в настройке параметров изображения, если автоматизированные алгоритмы в чём-то просчитались.
Комментарии (35)

wtigga
30.12.2025 07:41Спасибо. Первый раз вижу доступное объяснение всех шагов "проявки" цифровой фотографии от начала до конца.

gotch
30.12.2025 07:41Вот фотография новогодней ёлки в том виде, в котором видит матрица камеры
Данные матрицы с 14-битными значениями АЦП, преобразованными в значения 0-255 RGB.
16384 -> 255*255*255 <> 16 581 375? Что-то это всё разводом отдаёт.
(АЦП) камеры теоретически способен выдавать значения от 0 до 16382
Реальный диапазон значений АЦП приблизительно равен от 2110 до 136000.

buinovb
30.12.2025 07:41Данные матрицы с 14-битными значениями АЦП, преобразованными в значения 0-255 RGB.
Думаю, что конвертировал в оттенки серого для показа.
Реальный диапазон значений АЦП приблизительно равен от 2110 до 136000.
Просто лишний нолик в 136000, исходя из изображения.

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

luchinkinkos
30.12.2025 07:41Так написано жеж всё) Над каждым пикселем матрицы находится цветофильтр, который пропускает, например, только красные волны. Под ним фиксируется значение освещенности в 14 бит. Вот и получается что каждый элемент даёт только яркость и т.е. диапазон от черного до белого

gotch
30.12.2025 07:41Это понятно, а противоречивое колдовство с цифрами - сомнительно.

luchinkinkos
30.12.2025 07:41Так 14 бит, которые выдает матрица это по сути значение одного цвета. После усреднения получаем, что пиксель - 42 бита, по 14 на компоненту. Далее происходит дискретизация и получается 8 бит на компоненту.

AiR_WiZArD
30.12.2025 07:41И то 14 бит это разрядность АЦП, уровень шумов уменьшает полезный сигнал до 6-10 бит в зависимости от усиления и выдержки

kostoms
30.12.2025 07:41Главное - никогда не обрабатывать фотки описанным способом. И не нужен никакой "приличный объём вычислений" - просто надо иметь цветовые профили для своей камеры и объектива.

VictorDmitriev
30.12.2025 07:41Никто так и не обрабатывает. Это простой и доступный пример для непосвящённых.
Цветовые профили для камеры и линзы ЧУТЬ-ЧУТЬ ускоряют процесс. Основное время - решить, в каком положении оставить примерно десяток умолчальных параметров.

Hrr_2
30.12.2025 07:41Я думал результат будет выглядеть привычно, а он темнющий, так что исходник недалеко ушел

gliderman
30.12.2025 07:41
А это после двух запросов к квену - 2 минуты работы И теперь это можно делать просто двумя запросами - получено из первого фото

ArtyomOchkin
30.12.2025 07:41Qwen неплох для кодирования, но обработка RAW с его помощью - весьма странная затея. Вам бы действительно к окулисту сходить, сгенерированный вариант постобработки даже не близок к реальности, к которой ближе всего jpeg.

Astroscope
30.12.2025 07:41воссоздать восприятие человека сложно
На самом деле это и не требуется. Требуется максимальная линейность передачи. Учитывать особенности восприятия важно во всех тех случаях, когда возникают неустранимые искажения или используется сжатие с потерями - очевидный смысл в том, чтобы неизбежные в реальности объективные искажения и потери были субъективно незаметными вовсе или заметными лишь в незначительной, не раздражающей мере. А идеал - абсолютная линейность, но никак не воссоздание человеческого восприятия. Тогда изображение будет восприниматься как неотличимое от настоящего. Собственно говоря, со звуком ровно та же ситуация в принципе.

edo1h
30.12.2025 07:41уверены насчёт линейности? логарифмическая шкала не лучше ли будет?

Astroscope
30.12.2025 07:41Насчет линейности уверен, потому что линейность это отсутствие нелинейных искажений. А шкала - лишь вопрос удобства представления. Иногда (часто) логарифмическая шкала удобнее линейной.

ahabreader
30.12.2025 07:41Линейность нужна между концами цепочки преобразований (свет перед камерой → свет от экрана). А внутри что угодно.
На самом деле не совсем линейность, потому что system gamma (aka OOTF) учитывает окружающее освещение. В сцене вокруг камеры солнечный день, в офисе яркий искусственный свет, а вокруг телевизора приглушённый свет, в кинотеатре так совсем темнота. И вот один исходник в зависимости от освещения показывают с EOTF-гаммой 2.2 или 2.4 или 2.6.
А если вспомнить про баланс белого, то уже не не совсем.
Со звуком похожие сложности. У наших ушей АЧХ меняется вместе с громкостью звука. Если что-то изначально звучало на 80 дБ, то во избежание искажений надо проигрывать на 80 дБ (или делать тонкомпенсацию).
Но конечная цель-то сделать красиво... это художественные инструменты, а не измерительные. Так что вся эта интересная теория не так уж важна.

Vsevo10d
30.12.2025 07:41В принципе автор оригинального поста описал то, о чем я давно хотел написать на Хабор, правда, касательно красивых изображений из космоса и с флуоресцентных микроскопов. Вы получаете фотографию в совершенно условных цветах, а именно - комбинацию ч/б изображений в нескольких каналах, полученных через светофильтры и затем раскрашенных в условные цвета поверх. Просто в случае с цифровым фотиком канала три, по числу типов рецепторов в человеческом глазу, а в микроскопе их может быть пять, например, и для цифрового фото или там телеизображения они раскрашиваются обратно максимально близко к оригиналу, а в микро- и телескопах их бывает меньше и больше, и они раскрашиваются в условные цвета, чтобы сделать наглядные картины колокализации антител к разным антигенам, или тепловые карты в спектрах, невидимых глазу.

Astroscope
30.12.2025 07:41Я регулярно вижу псевдоцветные изображения с метеорологических спутников. У них может вовсе не быть канала изображения, приходящегося на видимый диапазон, зато наверняка есть несколько инфракрасных каналов разной длины волны, как раз-то полезных в метеорологии - естественно, они монохромные. При обработке этим каналам "присваивают" видимые цвета, и композитное изображение в результате выглядит цветным, полноцветным, хотя почти или совсем ничто в этом изображении не соответствует видимому участку спектра.

ahabreader
30.12.2025 07:41Недавно внезапно вспомнили, что привычный вид Нептуна взят с фото в ложных цветах по зелёному и оранжевому каналам, а реальный цвет у него примерно как у Урана.

Javian
30.12.2025 07:41Вы бы статьей обвалили продажи любительских телескопов :)

Vsevo10d
30.12.2025 07:41Да вряд ли, на них цены и так заградительные для завороженных фотками из гугла лохов, но при этом есть свой шарм увидеть в хороший любительский рефлектор тот же Сатурн, для людей шарящих, чтобы создать маленькую нишу. А вот над распространенными комментариями под фотками (не)живой ткани, покрашенной каким-нибудь DAPI и на пару рецепторов, что мол как же прекрасна природа, как красиво это выглядит – остается только снисходительно усмехаться.

Astroscope
30.12.2025 07:41есть свой шарм увидеть в хороший любительский рефлектор тот же Сатурн
Конечно, и оно того стоит, но только мало кто из начинающих отдает себе отчет в том, что увиденное будет, ну, размером поменьше ногтя мизинца на расстоянии вытянутой руки желтоватое пятно, а в случае начального уровня (читай апертуры) оптики - так и вовсе размером со спичечную головку, вокруг которой знаменитое кольцо скорее угадывается, чем реально различается*. И все это плывет в восходящих потоках. Это невероятно захватывающе для любителей и очень уныло в сравнении со снимками с реально больших телескопов, с орбитальных телескопов, и особенно с космических аппаратов, летавших в сторону Сатурна.
* мелким шрифтом
Можно увеличить и больше, очень намного больше, только возможность разглядеть мелкие детали не добавится вообще никак, а яркость упадет до неприемлемой. Поэтому, кроме совсем уж детских и чрезмерно "китайских" (имеется в виду не страна происхождения, а нереальные, недостижимые технические характеристики) моделей, никто не делает кратность ("увеличение", "приближение") больше, чем позволяет разрешение ("детальность", возможность разглядеть мелкие детали) оптики, и поэтому в маленькие телескопы видимое изображение получается меньше, а в большие больше. А разрешение оптики, даже гипотетической идеальной оптики, все равно упирается в фундаментальный дифракционный предел. Только наращивать апертуру, а это деньги что на оптику (в первую очередь), что на монтировку (тоже не забываем). Такие дела.

kostoms
30.12.2025 07:41Кажется, в бложике у автора и об этом заметка есть: https://maurycyz.com/misc/cc/
ManulVRN
Елка, конечно, хороша (сарказм). За статью спасибо.
GidraVydra
А что не так с елкой?
evalazarev
Для кого-то не канон, уверена, что не нравится то, что у неё слишком редкие ветки и иголки, не пышная - да, но зато достаточно ровная и симметричная
patyupin
У меня отец брал и вставлял добавочные ветки в ствол чтобы нарастить пышноту ёлки.
Astroscope
Не видны следы минимум двух падений - два это абсолютный минимум, после которого кот может (но не обязательно) потерять интерес к опрокидыванию елки и заняться другими делами. Вот эта аномалия и обращает на себя внимание, пусть даже не сразу возможно рационально объяснить, что именно не так.
Toxygen
Не скажу точно какое дерево на фото, но настоящая елка примерно так и выглядит. Не такая пышная как пихта к примеру.
Einherjar
Примерно так как в статье выглядят настоящие елки когда их где то к середине февраля-марта вниз к подъездам выносят.
настоящая елка изначально выглядит примерно так
kkuznetzov
Это ёлка без применения фильтров.
nnutts
На реддите есть забава делиться самыми уродливыми ёлками, это как свой ребёнок, какой ни получился — всё равно любишь больше других.