Найти тему
Электромозг

Тернистый путь цифрового изображения от матрицы фотоаппарата до графического файла

Оглавление

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

Современный цифровой зеркальный «Зенит-М», фото с сайта производителя.
Современный цифровой зеркальный «Зенит-М», фото с сайта производителя.

Замечу, что в разных фотоаппаратах или RAW-конверторах некоторые преобразования могут слегка отличаться порядком следования, но основной смысл всегда остаётся прежним.

I. Получение RAW-файла.

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

-2

Далее происходит следующее:

  1. Под воздействием электромагнитной бомбардировки фотонами, в полупроводнике каждого фотосенсора повышается энергетический уровень его электронов, они выходят с орбит своих атомов в зону проводимости, возникает фототок.
    В результате приобретения более высокого энергетического уровня, электроны получают возможность перейти в смежный полупроводник, в котором приложением разных напряжений к специальным микроэлектродам (иначе называемым вентилями или затворами) создаётся потенциальная яма (карман), удерживающая электроны в себе. Чем больше фотонов за время экспозиции попало на фотосенсор, тем больше электронов скапливается в кармане, и эта зависимость линейна.
  2. Меняется напряжение на электродах, открываются карманы, потенциал накопленных электронов (их напряжение), усиливается аналоговыми усилителями (как правило, линейными). Величина этого аппаратного усиления зависит от установленной в камере чувствительности (ISO). Затем аналоговые величины напряжения оцифровываются АЦП (глубина оцифровки сигнала 12-14 бит для современных зеркальных камер). Чем выше напряжение, тем больше цифра.
  3. Из массива оцифрованных сигналов осуществляется вычитание «тёмного кадра» (кадра, сделанного тут же матрицей без открытия затвора) для снижения характерных для каждой матрицы паразитных сигналов (шумов) и исключения «горячих пикселей». Происходит некоторая подстройка уровней сигналов в каналах, известная только разработчикам, отрабатывается усиление по цифровому ISO, если аппаратного усилителя оказывается недостаточно.
  4. Полученная от каждого сенсора информация один к одному записывается в RAW-файл. В область его метаданных записывается карта цветовых линз матрицы, а также другая информация, относящаяся к установкам камеры на момент произведения фотоснимка.

II. Преобразование RAW-файла.

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

Итак, в RAW-конвертерах (и во внешних, и во внутрикамерных) изображение проходит следующие этапы:

  1. Разделение цветов и предварительные регулировки. На основе имеющейся в RAW-файле информации о том, фильтр какого цвета стоял над тем или иным сенсором при съёмке, происходит разделение сенсоров по цветности RGBG (на один сенсор красного и один синего приходится 2 сенсора зелёного). После этого здесь уже могут осуществляться такие регулировки, как баланс белого, а после него и различные другие преобразования (регулировка экспозиции, точки чёрного, яркости, контраста и гаммы), хотя конкретная последовательность определяется изготовителем ПО и может быть различной.
  2. Демозаик (дебайеризация, распознавание цветов путём интерполяции шаблона Байера, на основе которого построено большинство матриц). Этот метод позволяет отказаться от субпикселей, к которым мы привыкли в мониторах, и использовать для формирования пикселей изображения то же число сенсоров, которое содержится в матрице. Пиксели перемешаны таким образом, что любая взятая квадратная четвёрка (2х2 — зелёный-красный-зелёный-синий) однозначно определяет цвет, а половина одной четвёрки входит в состав соседней (четвёрки перекрываются). Таким образом, используя информацию из метаданных RAW-файла о расположении цветных линз над пикселями, специальный алгоритм рассчитывает приблизительный цвет каждого пикселя. Количество зелёных пикселей удвоено по сравнению с другими, чтобы дать на вход алгоритма больше информации о расположении зелёных элементов изображения. Глаз человека наиболее чувствителен именно к зелёному цвету, поэтому более правильное определение зелёной составляющей делает изображение более чётким для восприятия. На выходе из демозаика мы получаем линейное относительно количества исходных фотонов, но уже трёхканальное (цветное) изображение в аппаратном цветовом пространстве конкретной фотокамеры, известном только разработчику. Замечу, что в процессе ручного редактирования в raw-конвертере на этом этапе конвертер для удобства выводит нам на монитор уже преобразованное, нелинейное к числу фотонов (гамма-компенсированное) согласно профилю фотокамеры и профилю нашего монитора изображение, поэтому мы видим его нормально, хотя на самом деле оно в памяти компьютера пока ещё линейно и гамма-неадаптировано для прямого просмотра.
  3. Различные регулировки. Если предварительные регулировки баланса белого, экспозиции, точки чёрного, яркости, контрастности и гаммы не были произведены до демозаика, они производятся сейчас. Дополнительно здесь регулируется насыщенность, резкость и происходит шумоподавление, а также применяются все оставшиеся параметры и фильтры.
  4. Перевод в нужное цветовое пространство. При подготовке к записи в файл происходит пересчёт полученных с матрицы значений в указанное в настройках гамма-компенсированное цветовое пространство (sRGB или AdobeRGB). При гамма-компенсации происходит т.н. линеаризация яркости (см. ниже), позволяющая более рационально использовать битовую глубину файла изображения (см. далее), а также подготовить файл к выводу на монитор.

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

Кроме более эффективного использования битовой глубины, гамма-компенсация оказывается полезной при отображении информации на мониторе. Электронно-лучевая трубка монитора имеет одну физическую особенность — она отображает яркости нелинейно поданному на неё управляющему напряжению. И эта нелинейность как раз описывается гамма-функцией, похожей применённой нами к файлу, но обратной по форме. Таким образом, в простейшем случае, нам остаётся просто подать этот гамма-компенсированный файл прямо на монитор без каких-либо дополнительных гамма-компенсирующих преобразований, и он отобразится более-менее правильно. То есть, введённая в файл гамма одновременно компенсирует гамму монитора. Кстати, именно поэтому целевое цветовое пространство называется гамма-компенсированным. Замечу, что ЖК-мониторы эмулируют поведение ЭЛТ-мониторов, тоже отображая яркость нелинейно, поэтому всё вышеописанное справедливо и для них.

III. Сохранение данных в файл графического формата.

  1. Округление чисел каждого цветового канала до значений конкретного формата файла (обычно 8 или 16 бит на канал, то есть 24 или 48 бит на пиксель).
  2. Внедрение в файл изображения профиля цветового пространства, в которое были преобразованы RAW-данные, чтобы отображающие программы знали, в каком именно пространстве сохранено изображение, и при отображении интерпретировали записанные в нём значения правильно.
  3. Сохранение данных в файл выбранного формата.

IV. Отображение файла на мониторе

  1. Программа отображения читает файл и пересчитывает сохранённые в нём значения каждого пикселя из цветового пространства камеры (sRGB, AdobeRGB) в цветовое пространство монитора (sRGB или AdobeRGB). Для получения информации об этих цветовых пространствах для правильного пересчёта она использует, с одной стороны, внедрённый в изображение на стадии сохранения файла профиль, а с другой стороны, прописанный в операционной системе профиль монитора.
    Кстати, вместо универсальных профилей для цветовых пространств и в изображении и в операционной системе могут использоваться более точные профили, полученные в результате калибровки как камеры, так и монитора.
    В профилях содержится информация о цветах, однозначно определённых в цифрах специального эталонного цветового пространства (CIE XYZ). Профиль фотокамеры, как правило, уже зашит в камеру или RAW-конвертер, но может подгружается в последний и из отдельного файла. Профиль целевого цветового пространства, как уже я упоминал выше, находится в виде файла в операционной системе.
  2. Пересчитанный массив данных изображения отправляется на видеокарту, где ещё раз каждый из трёх цветовых каналов преобразовывается через LUT видеокарты. Затем готовый массив передаётся через интерфейсный кабель в монитор. При этом битовая глубина значений может урезаться до 8 бит на канал, если интерфейс не поддерживает большую глубину.
  3. В мониторе массив данных изображения снова преобразовывается через LUT, но уже мониторный. В ЖК-мониторах эмулируется гамма ЭЛТ-мониторов. Затем происходит обратное цифро-аналоговое преобразование (ЦАП) и подача соответствующих напряжений на матрицу монитора, на её жидкокристаллические субпиксели с фильтрами разных цветов. Напряжения разной величины заставляют жидкие кристаллы в субпикселях определённым образом менять свою ориентацию. В результате этого субпиксели приобретают свойство поворачивать поляризованный свет на определённый угол, пропорциональный напряжению.
    Свет от тыловой подсветки монитора на входе в субпиксель проходит через поляризационный фильтр, и становится поляризованным. На выходе стоит второй поляризационный фильтр, через который (в зависимости от угла поворота поляризации света внутри субпикселя) проходит разное его количество. Таким образом каждый субпиксель приобретает свой уровень яркости. Из групп субпикселей формируются пиксели определённого цвета и изображение появляется на экране.
    В мониторах с дешёвой 6-битной матрицей происходит моделирование нужного оттенка с помощью мерцания яркости субпикселей между ближайшими значениями 6-битной разрядности или дизерингом (пространственным чередованием цветов пикселей).

Работа жидких кристаллов:

https://www.china-lcd-touchscreen.com/info/what-is-lcd-how-does-it-work-34251656.html
https://www.china-lcd-touchscreen.com/info/what-is-lcd-how-does-it-work-34251656.html

Вот и всё. На этом приключения изображения завершаются.

Ставьте лайки, если было интересно. Подписывайтесь на канал. Пишите комментарии. Удачи!