Найти тему
ZDG

Фотокамера чёрно-белая, а снимки цветные – как?

Что делает материал про фотографию на канале про программирование? Не спешите с выводами, это реально программистская тема.

"A это цветной или чёрно-белый фотоаппарат?"

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

И кто бы знал, что пройдёт много лет, и этот вопрос перестанет быть смешным.

Сейчас цифровой фотоаппарат может быть или чёрно-белым, или цветным. Это зависит от того, какая матрица в нём стоит. Можно сравнить матрицу с плёнкой, но её нельзя менять, она является частью фотоаппарата и поэтому какая она, такой и весь фотоаппарат.

Значит, бывают чёрно-белые и цветные матрицы? Да. Но есть нюанс.

На самом деле они все чёрно-белые.

Матрица покрыта пикселами – маленькими фотоэлементами, которые улавливают свет и накапливают электрический заряд. Но по сути они улавливают только лишь энергию. Они не знают, какой свет на них светит – красный, жёлтый, фиолетовый? Им всё равно. Свет это просто энергия, и они регистрируют количество этой энергии.

Поэтому с чёрно-белой (точнее, монохромной) матрицей всё понятно. Нет энергии – это чёрный цвет. Максимальная энергия – это белый цвет.

Но как быть с цветной?

По интернету с давних времён гуляет подборка фотографий, и я уверен, что вы её видели. Достаточно набрать в поиске "Цветные фотографии начала века".

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

Что получалось в результате: красный фильтр пропускал только красную часть света, и значит, на монохромной пластине сохранялась информация только о красном цвете. С зелёным фильтром сохранялась информация только о зелёном цвете, и с синим – только о синем.

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

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

И вот эта 100-летняя технология внезапно оказалась применимой и к электронным матрицам.

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

А что, если...

А если разместить фильтр не перед всей матрицей, а перед каждым пикселом? Если вы посмотрите на экран своего монитора под увеличением, то увидите, что каждый пиксел состоит из трех светящихся точек - красной, зелёной и синей. То есть из трёх субпикселов. И в фотоматрице можно было бы сделать так, чтобы вместо одного пиксела было три, и над каждым стоял бы фильтр своего цвета.

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

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

Над каждым пикселом поставили фильтр своего цвета. И расположили фильтры в таком порядке:

-3

Теперь каждый пиксел матрицы мог быть только красным, только зелёным или только синим. Вся остальная информация о цвете просто выбрасывалась. Да-да, те цветные цифровые фото, которые мы видим – это на самом деле меньше чем половина той информации, которая попала на матрицу.

Вот так выглядит изображение с потерянной информацией, которое "видит" матрица фотоаппарата:

-4

Как тогда получаются нормальные цветные фотографии?

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

-5

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

В общем, выяснилось, что интерполяция цветов достаточно достоверно восстанавливает отсутствующую цветовую информацию.

Хотя у неё были и есть свои недостатки: падение чёткости изображения, цветовой муар (алиасинг), и вообще говоря, это обман, ненастоящий цвет, но плюсы перевесили минусы: более дешёвые матрицы, меньший объем данных (нужно хранить только 1/3 всей информации).

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

Есть и два совершенно других подхода к цвету: матрицы Foveon и 3CCD. Если захотите, расскажу и про них.