Исправление теней и баланса белого

15.03.2021

За последние несколько дней я выяснил, что в чистом виде Krita неважно годится для цветокоррекции фотографических изображений. Например, здесь нет инструмента «Яркость/контрастность» (вместо него предлагается использовать кривые), а при редактировании уровней нельзя скорректировать баланс белого. Однако, эти недостатки с лихвой компенсируются наличием G’MIC, точнее специальным плагином, позволяющем использовать инструментарий G’MIC в Krita. Поэтому, всё не так уж плохо! Начнём с проверки установленных в системе пакетов. Например, в openSUSE нужное нам ПО выглядит так:

Понадобится сама Krita, плюс плагин G’MIC для неё

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

Есть ли тут надежда на улучшение?

Я вижу тут две проблемы:

  • Проблема с яркостью, в особенности — слишком тёмные глаза;
  • Неверный баланс белого при наличии в кадре эталона (лист бумаги).

Подобные проблемы неизбежно проявляются при съёмке с искусственным светом, находящимся над объектом съёмки (люстра над головой).

Если слишком тёмные глаза для нас не принципиальны, то можно пойти по лёгкому пути. Итак,

Способ 1

1. Берём пипеткой самую светлую часть листа бумаги

2. Затем создаём новый слой с типом «Тонирующая маска» и заливаем эту маску цветом переднего плана (Shift+Backspace).

3. Картинка стала ещё темнее и желтее, но это потому, что у корректирующего слоя-маски стоит тип «Умножение». Если же поменять его на «Деление», то мы получим именно то, что нужно:

Можно на этом и закончить, но у меня есть ещё кое-что)

Способ 2

Нам нужно что-то придумать с глазами ребёнка, поэтому мы начнём обработку снимка сначала.

1. Запустим G’MIC (Фильтры > Запустить G’MIC-Qt) и перейдём к инструменту Colors > Color grading

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

3. Сатло лучше, но очевидно, что фото всё ещё требует вмешательства, поэтому мы снова открываем G’MIC-Qt, но теперь переходим к инструменту Auto Balance. В нём интересен параметр Area, отвечающей за размер шага карты, которую инструмент применяет для изменения баланса цветов. Значение этого параметра (в пикселях) влияет на «высвечивание» деталей изображения. По умолчанию, там стоит значение 30, но я экспериментальным путём выяснил, что в случае с портретами людей лучше подходит размер, составляющий примерно 25-30% ширины зрачка. В Krita есть инструмент для измерения расстояний, и с его помощью несложно выяснить, что зрачок в моём фото занимает около 75 пикселей. Соответственно, в Area нужно установить значение 18-25.

4. Видно, что теперь баланс белого снова немного «поехал». Существует много способов его исправить, но я решил просто повторить описанный выше трюк с тонирующим слоем в режиме «Деления». Получилось так:

5. На этом можно было бы и остановиться, но мне показалось, что теперь снимку не хватает «локальной» контрастности и он стал слегка «пережаренным». Что ж, обратимся к ползунку локального контраста в Color grading. Заодно, есть смысл уменьшить обычный контраст (чтобы щёки не засвечивали), и снизить гамма-канал насыщенности (для более естественного цвета кожи):

Результат:

G’MIC — невероятно мощная штука! Инструментов цветокоррекции там не счесть, их примерно столько же, сколько в профессиональных RAW-редакторах. Инструменты G’MIC одинаково хорошо работают как для Gimp, так и для Krita, однако в последней они безальтернативны, потому что штатных средств изменения цвета в Krita очень мало. Тем не менее, обрабатывать обычные смартфонные фото в Linux вполне можно и не прибегая к Gimp’у, в чём вы, надеюсь, только что убедились!


Анонс про Krita

11.03.2021

У меня давно чешутся руки перейти с Gimp на Krita в том, что касается ретуши изображений. С наскоку это сделать трудно: например, я потратил кучу времени, чтобы найти в Krita «лечащую» кисть (а раньше считал, что её там нет). Krita — супер-крутая программа, которая годится далеко не только для рисования и раскрашивания. Я попробую поредактировать в ней фотографии. Посмотрим, что из этого выйдет!


Повышение резкости

17.12.2020

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

Фрагмент одного из «подарочных» снимков. У волн видна «гусиная кожа»

Конечно, так делать не надо. А как надо? Дело в том, что подобное выкручивание резкости изначально навязывается нам автоматикой многих современных смартфонов. Мы постоянно видим «перешарпленные» снимки и со временем начинаем думать, что это нормально. Однако в окружающем нас мире подобной сверхрезкости не существует — в этом достаточно убедиться, сняв на хорошую камеру любой пейзаж. Даже при идеальной фокусировке края и очертания объектов будут всегда плавными.

Фрагмент снимка на Leica S3. Пример правильной резкости.

Некоторые смартфоны, кстати, умеют делать качественные снимки, не испорченные излишним применением нерезкой маски. Хороший пример — Nokia 808 Pureview, который умеет фотографировать лучше, чем многие более новые аппараты (пример).

Однако, иногда повышать резкость всё же приходится. Например, при обработке сканированных или переснятых изображений. Для этого лучше использовать не простые инструменты вроде Sharpen/Unsharp mask, а специализированный Refocus. Его преимущество в том, что в качестве алгоритма применяется фильтр Винера, который используется для улучшения уровня сигнала по отношению к шуму (не только для изображений, но и для звука, например). Refocus — это плагин для Gimp, созданный аж в 2003 году. Сейчас проект заброшен, но его всё ещё можно прикрутить к Gimp 2.10 (к грядущему 3.0 уже не выйдет).

Итак нам понадобится оригинальный архив с исходным кодом, а также набор патчей, благодаря которым работает компиляция в современном Linux:

Патч 1

Патч 2

Патч 3

Патчи нужно сложить в папку с распакованным архивом и применить их:

find -type f -name '*.patch' -print0 | sort -z | xargs -t -0 -n 1 patch -p0 -i

Затем идёт сборка:

aclocal

autoconf

automake --add-missing

./configure --prefix=/usr --bindir=/usr/lib64/gimp/2.0/plug-ins

sed -i '/^CFLAGS =/s/$/ -std=c99/' src/Makefile

make

sudo make install

После установки Refocus появится в меню Фильтры > Улучшение.

Диалог настройки для фильтра Refocus

Пользователю предлагается самостоятельно подобрать оптимальные параметры: размер матрицы, радиус размытия, компенсацию Гауссова размытия, коэффициент корреляции и зерно шума. Суть же в том, что Refocus позволяет очень грамотно убрать лёгкую нерезкость и излишнюю мягкость снимка. При правильном применении результат работы фильтра лишь едва заметен, однако он явно делает картинку лучше и чётче.

Что будет, когда выйдет Gimp 3.0, в котором Refocus больше не будет работать? Ну, во-первых, можно продолжать использовать старый Gimp 2.10. Во-вторых, код Refocus интегрирован в редактор изображений, встроенный в Digikam (F4). Открываем редактор, в меню выбираем Улучшение > Резкость, затем в списке «Метод» устанавливаем значение «Рефокусировка».

Фильтр Refocus, интегрированный в Digikam

Всё очень даже неплохо!


Ретушь старых фотографий

29.05.2020

На днях на Хабре вышла статья про восстановление старых фотоснимков. В ней автор (женщина), пишет следующее:

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

Хотим поделиться со всеми, кому интересно это ремесло, теми программами, которые мы открыли, а также некоторыми способами их комбинирования в правильном порядке. Речь пойдет об онлайн-приложении Remini, сервисе «Компьютерное зрение от почты mail.ru», приложении Google Snapseed, а также о ряде других штуковин.

Далее мой комментарий.

Ретушь старых снимков — одно из моих увлечений. В моей коллекции есть множество фотографий из истории моей семьи, примерно от 1950-х годов до наших дней. Часть снимков имеет дефекты: царапины, сколы, проблемы с резкостью. «Чинить» такие фотографии невероятно увлекательно и приятно, особенно когда в итоге получается что-то действительно интересное и достойное. Мне стало интересно посмотреть, какими инструментами пользовалась автор той стать, а также, какой вышел результат.

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

Уфф… Сложно представить себе более жалкий, поверхностный и наплевательский подход к восстановлению фото! Результат абсолютно на всех примерах, приведённых в статье — отвратительный! Типичные дефекты подобных «улучшателей» сразу бросаются в глаза: потеря деталей (от медианного фильтра), выкручивание контраста, и на десерт — вырвиглазное «нейронное» раскрашивание, от коего любой снимок начинает играть грязными желто-оранжево-голубыми мутными красками. Удачных примеров такого раскрашивания нет, абсолютно каждый снимок выглядит так, будто на него наблевали радугой, а потом протёрли тряпочкой…

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

Первое, что надо уяснить: не следует сделать всё по-быстрому, без траты усилий и времени. Хороший результат — это всегда результат хороших усилий. Не существует «волшебных» кнопок, которые сделают работу за вас. Возьмите свой любимый инструмент, будь то Gimp или Photoshop, и сделайте всё как следует.

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

Третье. Основные инструменты ретуши — это клонирующая и лечащая кисти. Однако есть и другие хитрости. Скажем, вернуть резкость отсканированным изображениям поможет фильтр Refocus (работает на основе свёрточных матриц, появился ещё в начале 2000-х), а для победы над большим количеством пыли подойдёт придуманный мной метод сдвига выделения (LXF 172, 2013 год).

Что касается раскрашивания, то это очень неоднозначный момент. Хороший результат достижим только в руках специалиста, который разбирается в цвете (и как минимум отличает яркость от светимости). Грамотное раскрашивание — трудная и кропотливая работа. Однако, нужно понимать, что добавление цвета в чёрно-белый исходник — это всегда фантазия и предположение. Истинные цвета предметов на старых фото почти всегда неизвестны, поэтому подумайте несколько раз: нужно ли вам это? Большинство старых снимков и так прекрасны в своём оригинальном виде и не нуждаются в раскраске.

Учитывая написанное выше, давайте посмотрим на заглавный пример из обсуждаемой статьи:

eb74fed65a2a95b4de69b875d0b755b4

С одной стороны, после такой «обработки» на фото стало меньше пятен и царапин. Но с другой стороны, мы видим:

  1. Паразитное свечение между затенённой стороной лица и фоном (похожий  эффект можно создать в Gimp с помощью Shadows/Highlight);
  2. Безжизненный цвет волос;
  3. Потерю деталей в тёмных участках снимка;
  4. Безобразно грязный китель (в реальности снимка он был, скорее всего чист).

Ценность подобной обработки нулевая. Это шлак, который нужно выкинуть и забыть. В качестве примера, как можно сделать это фото действительно лучше, я покажу результат работы в Gimp в течение примерно 40 минут:

eb74fed65a2a95b4de69b875d0b755b4-fixed

Я уверен, что старые фотокарточки, на которых изображены дорогие вам люди, достойны более бережного и аккуратного отношения!


Растягивание изображений без потерь

05.09.2018

Надеюсь, у меня получился громкий заголовок 🙂 На самом деле, никакого волшебного растягивания без потерь не существует, разве что в голливудских фильмах. В реальном мире есть неплохой алгоритм xBR для растягивания рисованных изображений, есть удобная программа Smilla Enlarger со своей собственной реализацией этой функции для неплохого увеличения фотографий. Но есть и кое-что получше: Waifu2x. В принципе, у этой программы говорящее имя, ведь тут видны отсылки к аниме и к «увеличению вдвое». Так и есть, Waifu2x отлично справляется с растягиванием именно аниме, и всего, что на него похоже. Но и все прочие типы изображений, включая фотографии, Waifu2x увеличивает очень даже неплохо, как минимум не хуже чем обе другие программы, которые я упомянул выше.

Секрет Waifu2x в использовании двух мощных компонентов:

  • Torch7 — MATLAB-подобной библиотеки для языка программирования Lua с открытым исходным кодом, которая предоставляет большое количество алгоритмов для глубинного обучения и научных расчётов;
  • Nvidia CUDA — набора для разработки приложений, в которых часть вычислений производится на графическом процессоре Nvidia.

Таким образом, для развёртывания Waifu2x в Linux вам потребуются видеокарта Nvidia, адекватная инструкция (наподобие этой), терпение и приличный запас кофе. Однако разработчики Waifu2x cжалились над теми, кто не обладает хотя бы одним из перечисленных выше элементов, и выкатили веб-версию своего конвертера. Теперь растягивание доступно каждому!

Мы же пойдём третьим путём. В недрах Гитхаба, который, слава Богу, не испорчен пока Майкрософтом, нашлась альтернативная реализация нашего растягивателя. Она называется Waifu2x-converter-cpp и отличается тем, что для работы не требуется наличие графического ядра Nvidia. По сути, это «программная» реализация Waifu2x, которая работает только с ЦП (и потому медленнее), но гораздо проще в установке и настройке. Например, для пользователей openSUSE имеется уже готовый пакет, который нужно просто установить. Поскольку у меня не Tumbleweed, а Leap 15, я скачал пакет с исходным кодом и пересобрал его сам, это заняло не более 5 минут.

Для растягивания картинки следует использовать следующий синтаксис:
waifu2x-converter-cpp --scale_ratio <X> -i <исходный файл> -o <целевой файл>

Пример команды:

waifu2x-converter-cpp --scale_ratio 2 -i input.jpg -o output.jpg
К счастью, мне удалось найти графическое приложение, которое позволяет избежать возни с командной строкой. Это Qtwaifu2x, интерфейс к Waifu2x, поддерживающий и Waifu2x-converter-cpp. Выглядит программа просто и лаконично:

В самом простом случае достаточно просто перетащить на окно Qtwaifu2x любое изображение и нажать кнопку. Следует учитывать, что чем больше размеры исходного изображения, тем дольше будет длиться преобразование. Поэтому лучше тренировать на маленьких картинках. Результат должен вас порадовать!

Теперь примеры. Я использовал два тестовых изображения: фрагмент экранного снимка выше и фрагмент городского вида. Оба изображения были растянуты вдвое в программе Krita следующими способами: Кубическим (Cubic),  Фильтром Ланцоша (Lanczos3) и фильтром Box (он же Nearest neighbor). После этого я растянул исходные изображения с помощью Waifu2x-converter-cpp. Посмотрим на результаты (нажимайте на изображения для просмотра в полный размер):

Исходное изображение

 

Cubic

 

Lanczos3

 

Box (nearest neighbor)

 

Waifu2x

Исходное изображение

 

Cubic

 

Lanczos3

 

Box (nearest neighbor)

 

Waifu2x

Спасибо за внимание!