И всё было бы хорошо, но одной только яркостью не обойтись, нам нужен цвет, поэтому каждый пиксель сверху ещё и накрывается цветным фильтром: красным, синим, зелёным. Вот так называемая RGBG-матрица поверх нашего изображения:
Бывают WRGB (или RGBW) матрицы, где “лишним” зелёным пикселем пожертвовали ради пикселя без фильтра. Но такие встречатся редко, я не видел еще ни одного фотоаппарата или смартфона с такой матрицей:
Бывают и более экзотические расстановки, но суть всегда одна: цветные фильтры.
Синий фильтр пропускает только синий цвет, красный пропускает только красный и так далее. Если разобрать фотоаппарат, добраться до “голой” матрицы, до слоя фильтров и аккуратно их содрать деревянной палочкой, то мы получим монохромную матрицу из полноценных пикселей. Детализация заметно вырастет, но пропадёт цвет.
Будучи накрытым цветным фильтром пиксель не является полноценным. Сейчас я это докажу.
Вот вырезка из реальной фотографии, где каждая полоска имеет ширину в среднем примерно 1.65 пикселей. Если расфокусировать взгляд, то можно увидеть эти полоски и без всякой обработки.
Есть много алгоритмов смешивания (называют еще алгоритмы дебайеризации), все они используют интерполяцию, то есть смешивание соседних пикселей. Вот что популярный алгоритм AMaZE выдаёт для этого участка:
Не лучший результат, но все полоски различимы. А что же будет с полосками, которые толщиной как раз примерно в 1 пиксель?
А вот что:
Переключение алгоритмов здесь не помогает, один алгоритм выдаст гладенький градиент, другой — какие-то лабиринты, третий — ещё какую-то ерунду. Становится невозможно понять: это вертикальные или горизонтальные полоски или вообще сеточка с гладкими островками.
Вот реальный пример, жалюзи (искажено неровностями стекла):
Оригинал: https://cdn.dxomark.com/wp-content/uploads/medias/post-55724...
Видно как некоторые жалюзи перечеркнуты по вертикали, получается сеточка.
Еще подобное:
Оригинал: https://cdn.dxomark.com/wp-content/uploads/medias/post-50844...
Давайте рассмотрим еще один, синтетический, пример. Цветочек на сером фоне:
Вот что увидит матрица фотоаппарата:
Представьте, что вы программа в процессоре фотоаппарата и получили вот такой кадр, вы не знаете, что там был цветочек. Какие цвета и где вы назначите и почему? На каких основаниях алгоритм может решить, что всю верхушку надо залить желтым? Что стебель вообще должен быть зелёным?
А между прочим вот такой цветочек даст совершенно идентичный результат на матрице:
Более того, если весь цветок включая стебель будет желтый — на матрицу придёт всё та же картинка. Как фотоаппарату отличить желтый от зеленого в таком масштабе? Когда на входе может быть много вариантов, а на выходе только один, то мы имеем дело с потерей информации. После дебайеризации картинки с матрицы будет что-то вроде:
Повторяю, такое мы получим даже если весь цветок в реальности был желтым, вот если бы он был сдвинут на пиксель влево, то желтизны было бы больше, потому что сработали бы красные пиксели. Вывод из этого можно сделать какой? Все эти пиксели не способны показывать детали на таком уровне, потому что для каждой точки у нас только одна компонента цвета: красная, зелёная и синяя, то есть информации полной нет. Эти пиксели работают только после смешивания, то есть, усреднения, поэтому деталей выходит меньше, чем пикселей.
Были бы полноценные пиксели, мы бы увидели это:
Но видим лишь это (это если добавить резкости):
Тогда во сколько же раз у нас меньше полноценных пикселей? В 4? Не совсем. Ведь даже если сгруппировать пиксели мы всё еще считываем красный цвет из одного места, зелёный из другого, синий из третьего. Если все четыре места имеют одинаковый цвет, то нам повезло, а если мы попали на переход, то в этом месте будет цветной шум. И всё-таки информация о том, что вот в этом углу зелёный, например, светлее, чем в противоположном углу — она важна и добавляет деталей, путём деления по каждой стороне надвое мы потеряем эту информацию! Приходится мириться с тем, что цветные шумы будут и их придется подчищать (вместе с шумами от высоких ISO). Можно посчитать, насколько мелкие детали вообще различимы (до появления откровенных ошибок, вроде смены направления линий с вертикальных на горизонтальные) и пересчитать это в мегапиксели. И тогда получится, что детализация в таких матрицах примерно в 2.8 раз меньше если считать по площади или же в 1.67 раз меньше по ширине и высоте. Выше я показывал пример с полосками в среднем шириной 1.65 пикселей. Меньше этого размера мне никак не удалось получить различимых результатов, пробовал на нескольких старых и современных камерах и смартфонах с разным количеством мегапикселей: 4, 5, 8, 10, 12, 18. Дело даже не в камере. На этом пределе (1.67пикселей) детали цвета хоть и утеряны, видны какие-то радужные разводы, но вот детали яркости на месте — все полоски можно различить, а с более мелкими линиями всё уже сливается из-за необходимости смешивать цвета. Кстати, не исчезают эти радужные разводы (они похожи чем-то на хроматические аберрации) и при полосках шириной в 3 пикселя и больше.
С этим можно бороться путём шумоподавления в “цветном” канале да и не всегда значительную область кадра занимают настолько контрастные объекты, так что на это можно закрыть глаза, но тем не менее этот неприятный факт не даёт мне называть пересчитанные путём деления на 2.8 пиксели полноценными без вот такой оговорки: условно, с шумами в цветах.
Есть один важный нюанс: пиксели о которых я выше говорю взяты с матриц БЕЗ pixel-shift.
А что такое pixel-shift? Это множественный снимок, при котором матрица в процессе съёмки сдвигается 3 раза и таким образом получается четыре изображения, где каждый пиксель обязательно повторяется в трех разных цветах: красный, зелёный, синий. Это в идеальных условиях, если никаких ошибок в сдвиге. Фотоаппараты с такими матрицами существуют (например, полнокадровые Sony, Pentax). Их пиксели можно условно считать полноценными и не надо делить на 2.8. Технологию pixel shift не стоит путать с sensor shift — стабилизацией (когда матрица сдвигается, чтобы избежать смазывания).
Вот пример pixel shift снимков того самого цветка из четырех положений матрицы:
Видно, что каждый пиксель цветка теперь захвачен как красным, так и зелёным и синим (на цветке виден как чёрный, потому что ни стебель ни лепестки не содержат синего) пикселем. В то же время фон тоже представлен всеми цветами, что важно. Получаем полноценные RGB пиксели. Здесь вся информация о каждом пикселе цветка.
Посмотрите на сравнение снимков с полнокадровых камер без pixel-shift и с pixel-shift:
Благодаря pixel-shift различима сеточка — мельчайшая структура поверхности игральной карты (особенно хорошо видно в черных и синих заливках). Каждый пиксель работает как полноценный пиксель. Слева — не полноценные пиксели, там нет столько деталей, сколько есть пикселей.
Пересчитать в полноценные примерно можно, я уже писал как: делить общее количество (площадь) на 2.8 или каждую из сторон на 1.67, это экспериментальные показатели и это всё же гораздо утешительней, чем распространенное предположение о том, что надо “делить надвое” [каждую сторону] получая в итоге не в 2.8, а в 4 раз меньше пикселей. Нет, если просто сгруппировать пиксели по 4 штуки с 12Мп снимка, то деталей на 3Мп там не наберется, проверено. Чтобы выжать из файла всё что можно, надо использовать все неполноценные 12Мп, применять что-то вроде AMaZE, чтобы получить полноценных (условно, с шумами в цветах) деталей на ~4.3Мп (12/2.8), вот тогда можно и уменьшать и это будут ваши полноценные (условно, с шумами в цветах) пиксели.
Цветастых шумов всё равно не избежать и в этом случае это НЕ последствия слишком высокого ISO и слабого освещения, а последствия именно дебайеризации.
Теперь о Samsung S20 Ultra. Исходя из этого всего логично предположить, что для получения честных (условно, с шумами в цветах) 12Мп без pixel-shift надо увеличить матрицу до 34 Мп, сделать снимок в 34Мп и потом уменьшать.
Смотрите, что сделали Samsung для S20 Ultra, они поставили матрицу 108Мп, но она работает по умолчанию в режиме 12Мп, потому что группы 3х3 пикселя (как обычно накрытых цветными фильтрами) работают как один пиксель да и накрыты они фильтром одного цвета: 3х3 зелёных, 3х3 красных и так далее. Вот как выглядел бы пример на такой матрице из начала поста:
Сделано это для снижения количества шумов при высоких ISO, насколько хорошо это сработало я не берусь судить. Есть однако режим 108Мп (увы, доступен только в JPEG), в котором снимки имеют разрешение 12000x9000 пикселей. Я рассмотрел снимки с этого режима, естественно, не нашел там деталей на 108Мп, детали выглядят скверновато, как будто кистью в краске повозили, но это, скорее всего, из-за агрессивного шумоподавления, которое неизбежно (представьте, у вас группа из 3х3 красных пикселей разной яркости, рядом такая же но зелёные, вам как-то надо извлечь оттуда и яркость и цвет — естественно, придётся сильно размывать цвет и бороться с тем, что яркость одного и того же объекта будет разной у разных групп). Я думаю, они справились хорошо. Рассматривая мелкие детали, особенно всякие заборы, ограждения и рифлёные поверхности вдали, отмечая, когда они начинают переходить в мусор я к насчитал деталей (в яркостном канале) на целых 33Мп! В принципе даже сильно и всматриваться не нужно, чтобы понять, что в 108Мп режиме деталей на снимке гораздо больше чем в 12Мп режиме, например, нечитаемый в "12Мп" режиме текст становится очень даже читаемым на снимке сделанном в "108Мп" режиме.
По моим расчётам 108Мп/2.8 = 38.5Мп — таков должен быть предел детализации для этой матрицы в яркостном канале, вот только расчеты эти были для традиционной матрицы, а не для групп 3х3. Кстати, размер матрицы довольно большой (9.6x7.3мм), поэтому диффракция при f/1.8 (именно такая там диафрагма) тоже не помешает получить 38 Мп.
В любом случае, будь там деталей на 33 или 38.5, мы, судя по всему, получаем более чем достаточно деталей для получения полноценных 12Мп. Я считаю, это большой прорыв для мобильной фотографии, который по отдаче можно сравнить с появлением pixel shift. Только вот снимать надо именно в 108Мп-режиме, а такие JPEGи весят по 20–30 Мб если что.
Не могу не упомянуть печальный факт: как только освещение перестает быть идеальным, начинают стремительно теряться детали и виной тому всё ещё маленькая площадь матрицы S20 Ultra — в 12 раз меньше “фуллфрейма”, как минимум во столько же раз там больше и шумов.
Конечно, разрешающая способность оптики тоже важна и может перечеркнуть весь набор мегапикселей. К счастю, большинство современных объективов к фотоаппаратам и даже на смартфонах разрешают даже больше, чем может матрица (разве что по углам возможны ухудшения) так что об этом можно не беспокоиться. Про дифракцию стоит помнить: с повышением числа диафрагмы падает и разрешение. Чем меньше матрица, тем сильнее заметен этот эффект. Например на f/11 на APS-C (кроп) из-за дифракции деталей будет всего примерно на 6 полноценных мегапикселей.
Сколько нам вообще надо (полноценных) мегапикселей?
Для начала стоит определиться с нужной плотностью пикселей на дюйм, а потом с физическими размерами фотографии при просмотре.Требования к плотности падают вместе с ростом расстояния просмотра.180 dpi (пикселей на дюйм) хватает, чтобы не видеть этих самых пикселей уже с 30 см, но вблизи может быть заметен недостаток деталей.300 dpi считается отличной плотностью для фотографий, которые можно смотреть держа в руках и даже приближать к глазам. На экранах смартфонов такая плотность давно достигнута.Экраны макбуков, к примеру, 226 dpi, что очень неплохо, размер при этом примерно А4.
С очень большими форматами вроде А3, да и даже с А4 надо определяться какое будет расстояние просмотра, исходя из этого требование к dpi можно и понизить и А3 напечатанный из 12 полноценных мегапикселей прекрасно будет смотреться на стене, к которой не подходят вплотную.
В общем, получается, что для идеальной печати А4 (20х30см) надо хотя бы 8Мп (полноценных), но если снимок не будут слишком близко рассматривать то 8Мп (полноценных) это даже много.
На дисплее макбука во весь экран показать фото во всей красе — 5Мп (полноценных), на каком-нибудь FullHD дисплее — 2Мп (полноценных).
Что там еще популярно, фотопечать 20х15см — 4Мп (полноценных), 18х13см — 3Мп(полноценных), 15x10см — 2Мп(полноценных).
Да, я где-то говорил, что достаточно 2Мп, для базовых потребностей вроде посмотреть на FullHD экране или распечатать 15х10. Но на самом деле и 1Мп иногда "ок" для 15х10см фотки если сильно не всматриваться.
Вы всё ещё не печатаете фотографии? Зря. Ладно, это для другой темы.
Выше речь о "полноценных" мегапикселях. Думаю, вы поняли. Не все пиксели одинаково полноценны.UPD: добавил в скобках
На смартфоне смотреть фотографии не совсем удобно из-за не большого экрана, поэтому увеличивать приходится, здесь главное не переусердствовать с увеличением. Можно считать так: представьте, что вы смотрите на фотографию в реальном размере (например 20х15) сквозь подвижную рамку, размер которой равен размеру дисплея смартфона. Вот с таким увеличением и надо смотреть фото на смартфоне:
Начнёте увеличивать сильнее чем нужно и у вас будет просто рассматривание неприглядных погрешностей вместо просмотра фото: шумодав, резкость. Да, это так интересно, увеличивать, рассматривать, это затягивает, но это не более чем вредная привычка. Вам эти погрешности не нужны, вы их не должны видеть при нормальном увеличении, которое соответствует предполагаемому физическому размеру фотографии.
Для какой фотографии какой физический размер предпочтительней это уже надо смотреть по конкретной сцене, например мало кто захочет женский портрет по плечи печатать в А3, а вот детальную панораму города почему бы и нет.
Итоги:
— если в камере нет pixel shift (не надо путать с sensor shift стабилизацией), то пиксели — НЕ полноценные, то есть количество деталей не соответствует количеству мегапикселей
— если есть pixel shift, то деталей можно получить столько сколько есть мегапикселей, пиксели в этом случае являются полноценными
— качество объектива тоже может влиять на количество деталей
— пересчитать неполноценные в полноценные легко (с оговоркой: всё равно неизбежны цветные шумы в деталях даже при низком ISO и хорошем освещении, но эти шумы с переменным успехом можно подавить): количество мегапикселей делим на 2.8. Можно упростить себе расчёты и делить на 3. Но не на 4, это так не работает.
Например, у вас айфон с камерой на 12Мп, сколько у вас полноценных? 4 с чем-то. Знайте, что можете печатать 20х15см фотки с айфона смело, если снято хорошо, не с высоким ISO.
— при плохом освещении и высоких ISO детали теряются, от этого сильнее страдают маленькие по площади матрицы (а не матрицы где мегапикселей больше или меньше): продолжайте делить ваши мегапиксели
— стоит помнить, что закрытая диафрагма ощутимо режет разрешение из-за дифракции, от этого тоже больше страдают маленькие матрицы
— 6.4 Мп (если они полноценны) хватит всем в 99% случаев и напечатать какой угодно размер (с компромиссами разве что для А4+) и на любом дисплее показать, а для этого достаточно иметь матрицу в неполноценных 18Мп