05 March 2018

О проблемах портретного режима фотографирования в смартфонах

В материале DxO, посвященному тестированию камеры Galaxy S9+, есть много интересных полноразмерных снимков, приведенных для сравнения результатов этого телефона с ближайшими конкурентами в лице iPhone X и Pixel 2. Такого рода кадры, сделанные в режиме "портрета" (также известного как "режим боке"), натолкнули меня на идею о создании материала, посвященному проблемам этого режима. Собственно говоря, в данный момент вы этот материал и читаете.


Оригинальные кадры сцены, о которой будет идти речь, можно забрать отсюда: для S9+, для iPhone X и для Pixel 2.


Galaxy S9+

Общий вид кадра:

Кликабельно

Первое, что сразу бросается в глаза -- снимок несколько переэкспонирован (это известная болезнь большого числа камер Samsung) и динамического диапазона сенсора не хватило для самых ярких областей кадра. Из-за этого оказались "выбиты" довольно таки значительные области изображения на лице и левой руке: 

Пересвет на руке

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

Классика -- проблема с обработкой контура волос:


Еще одна, на 100% типичная проблема алгоритмов расчета глубины кадра -- обработка небольших (тонких) объектов, в данном случае -- травы:

Верхушка растения намного более резкая, чем находящийся примерно в той же плоскости стебель

Проблема настолько характерна, что я приведу еще одни, отдельный кадр, наглядно ее демонстрирующий (снято на iPhone 8 Plus):

Слева "режим боке", справа кадр без эффекта. Обратите внимание на верхушку растения, которая пропала на снимке слева 

С разбором кадра Samsung закончили.


iPhone X

Общий вид кадра:

Кликабельно

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

Разумеется, на снимке имеются проблемы с корректным определением контуров объекта. Ровне те же самые области, что и у S9+:

Артефакты на границе волос

Артефакты на траве

Однако проблем у iPhone X больше, чем у корейцев. Обратите внимание на "закрытую" зону, образованную левой рукой модели (S9+ отработал это место без ошибок):

Сила размытия в зоне, образованной рукой, существенно меньше, чем вне ее

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

Дело в том, что портретный режим у Apple имеет одну крайне нехорошую особенность -- в условную зону резкости попадает только лицо человека, для всех остальных областей кадра безусловно применяется эффект нерезкости (даже если телефон однозначно понимает, что некоторые из этих областей находятся в той же самой плоскости, что и лицо). Такое поведение противоречит физике, которая стоит за эффектом малой ГРИП, и зачастую придает кадрам бросающийся в глаза противоестественный вид.

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

Вот еще одна иллюстрация эффекта тотального размытия в сравнении с S9+ (слева):

Неправильно размытая куртка на снимке с айфона (справа)

С айфоном разобрались.


Google Pixel 2

Общий вид кадра:

Кликабельно

Что нужно отметить сразу. В Pixel 2 нет второй камеры, поэтому режим портрета работает за счет цифрового "зума" картинки с широкоугольного сенсора. Зум делается довольно умеренный, меньше 2x, поэтому план получился более общий, чем у S9+ и айфона.

Что касается экспозиции в целом -- у Pixel 2 кадр получился более темным, чем у iPhone X. При этом гуглофон весьма агрессивно поднимает общий контраст, что, с одной стороны, делает картинку более броской и объемной, а с другой, может приводить к потере деталей и нюансов изображения (подробнее смотри тут).

Pixel 2 лучше всех справился с динамическим диапазоном сцены.

Вот сравнение с самсунговской "выбитой" рукой (слева):


А вот сравнение для проблемной области лица на айфоне (слева):

Кликабельно

С другой стороны, не все так у Pixel 2 гладко, как хотелось бы. Цифровой "зум" всегда будет проигрывать "честному" оптическому -- снимок с гуглофона серьезно страдает из-за шумов (особенно хорошо проблему видно в области теней и на волосах).

Кроме этого, отсутствие второй камеры серьезно сказывается на качестве построения карты глубин. В этом плане Pixel 2 серьезно отличается в худшую сторону от своих конкурентов.

Вот кроп уже известной нам "закрытой" зоны, образованной левой рукой:

Полный провал

Вот совершенно дикие и необъяснимые скачки резкости на траве:

Кликабельно

С "пикселем" на этом все.


Бонус: недостаточная освещенность

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

Вот кроп из такого рода сцены (exif из полноразмера был выпилен, поэтому трудно сказать, какое это было ISO). S9+ (слева) и iPhone X (справа):

Кликабельно

Тут комментировать особенно нечего. Единственное что... Во-первых, обращу ваше внимание на то, что и в этой сцене Samsung использовал большую экспозицию. А во-вторых, это хорошая иллюстрация разницы в подходе к вопросу подавления яркостного шума. Samsung использует очень агрессивный шумодав, который напрочь убивает всякую детализацию и снимок нам кажется мыльным. iPhone X шум давит заметно слабее, что позволяет сохранить больше деталей. С другой стороны, грязь и зернистость в данном случае трудно назвать хорошим результатом. 
Мораль здесь будет очень простая -- если снимок получился с такими сильными шумами, ничего хорошего с ним сделать в принципе невозможно. 


Выводы

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

Очень трудно назвать однозначного победителя в нашем сравнении. 

Samsung аккуратнее всего (хотя и не идеально) строит карту глубин, но при этом имеет склонность к выбору неправильной экспозиции и проблемы с динамическим диапазоном.

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

Pixel 2 лучше всего умеет захватывать широкий динамический диапазон сцены, но отсутствие второго модуля камеры губит это полезное свойство -- качество картинки серьезно страдает из-за цифрового "зума" и очень грубых ошибок построения карты глубин.

Результаты всех трех камер катастрофически деградируют в условиях пониженной освещенности (читай -- практически при любой съемке в помещении).

Мораль у всей этой истории может быть только одна: хотите качественный "портретный" режим -- переходите на камеры с большими сенсорами. Кстати, я недавно писал о том, как выбрать себе такую камеру.
Если же вы хотите более детально изучить вопрос разницы в качестве между "взрослыми" камерами и смартфонами на портретных сюжетах, то могу порекомендовать вот этот вот замечательный материал, где сравнивается камера iPhone X и беззеркалка Canon.

На этом все!


No comments:

Post a Comment