11 рисунков

Фотография в Linux: исправление дефектов

Александр Толстой


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

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

Инструментарий

Применим для восстановительной работы всем известный редактор изображений The GIMP. Это будет наш главный инструмент. Не секрет, что сила GIMP заключается в его расширяемости, и потому нам не обойтись без плагинов. Бороться с нерезкостью мы будем с помощью Refocus и Refocus-it, шумы подавим, установив GREYCstoration и некоторые плагины с сайта GIMP Plugin Repository, а для исправления искажений оптики в свежих версиях GIMP есть соответствующие встроенные средства. Нужно отметить, что для описываемых здесь операций очень важна вычислительная мощь процессора. Так, удаление шумов на 7-Мпикс фотографии может занять больше 1 ч, если используется AMD Athlon X2 бюджетной модели или более медленный ЦП.


Борьба с нерезкостью

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

Разумеется, сильно размазанный кадр спасти не удастся, но с легким дрожанием рук вполне можно справиться. Заметьте, что фильтрами типа Sharpen и «Нерезкая маска» нельзя воздействовать на фокусное расстояние -- они работают с деталями «на плоскости» и не влияют на глубину резкости. Для решения нашей задачи нужен плагин Refocus, который после установки появляется в GIMP в разделе «Фильтры > Улучшение».


Refocus

Откроем окно плагина Refocus. Справа от окна предварительного просмотра представлены пять параметров, и от того, правильно ли они будут настроены, напрямую зависит результат работы Refocus.

>>> 01.png

Рис. 1. Окно плагина


Matrix Size -- данный параметр отвечает за размер матрицы, по которой будут просчитываться точки изображения. Большие значения этого параметра полезно использовать вместе с пропорционально увеличенными числами для Radius и Gauss. Возрастание размера матрицы влияет на скорость работы плагина: время увеличивается в геометрической прогрессии.

Radius -- радиус, по которому будут «подкручиваться» точки относительно друг друга (таким образом Refocus пытается вернуть резкость). Радиус подкручивания (также называемого конволюцией) -- самый важный элемент при восстановлении резкости. При несильном размытии подойдет его значение по умолчанию, равное 1. Если же изображение размыто сильно, то величину радиуса нужно увеличить, подбирая вручную.

Gauss -- радиус размытия по Гауссу. Логично, что наилучшим образом этот параметр влияет на изображения именно с таким типом размытия. Во всех остальных случаях здесь можно оставить 0 -- значение по умолчанию. Нужно учитывать, что ненулевые значения данного параметра добавляют в изображения неприятные артефакты, которые рекомендуется подавлять параметрами Correlation и Noise.

Correlation -- параметр, смягчающий действие Refocus и помогающий избавиться от артефактов (когда, к примеру, чрезмерно резкими становятся края блоков в сжатом файле JPEG). Диапазон его значений -- от 0 до 1. Полезными из них являются 0,5 и 0,95--0,99.

Noise -- способ подавления шумов. Очень важно правильно подобрать нужное значение этого параметра. Так, при 0 качество изображения будет ужасным, в то время как показатель 0,2 и более уже будут работать против повышения резкости и лишь «замылят» картинку.

Если умело использовать все параметры, то можно заметно повысить качество фотографии (рис. 2).


>>> поставить рядом рисунки 02a.png и 02b.png

Рис. 2: а -- оригинал; б -- после обработки плагином Refocus



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

Refocus-it

Данный плагин также предназначен для борьбы с нерезкостью, однако он предоставляет более тонкие параметры настройки. Refocus-it способен эффективно восстановить фокус в фотоснимках, сделанных с расфокусировкой, а также исправить такие дефекты, как размытие в движении (Motion blur) и гауссово размытие. Основное окно плагина представлено на рис. 3.


>>> 03.png

Рис. 3. Основное окно плагина


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

Практическая польза Refocus-it особенно заметна в ситуациях, когда из-за смазанности не удается прочитать или распознать нечто значимое. Возьмем, к примеру, фрагмент фотографии страницы журнала (рис. 4,а).


Очевидно, что прочитать такой текст почти невозможно -- с трудом различимы только отдельные очертания, а фильтр «Нерезкая маска» лишь подчеркнет имеющиеся искажения.

Работа плагина Refocus-it будет чрезвычайно эффективной, если точно подобрать необходимые параметры. Пожалуй, главный из них -- величина размытия (радиус). При наличии на снимке резких объектов на контрастном фоне нужно приблизить изображение и посчитать, сколько точек создают ореол размытия. Если такой способ не подходит, то остается метод проб и ошибок. Когда будет подобрано верное значение, результат получится примерно такой же, какой показан на рис. 4,б:

При выполнении данной обработки употреблялись следующие параметры:

  • Radius: 7.70

  • Gauss: 0.00

  • Motion size: 0.00

  • Motion angle: 0.00

  • Noise: 0.00

  • Iterations: 200

  • Boundary: mirror boundary

Текст стал читаемым, но глазам все равно неприятно продираться сквозь заслон из фоновых черных точек. Теперь немного изменим условия, использовав сглаживание и включив подавление шума:

  • Radius: 7.70

  • Gauss: 0.00

  • Motion size: 0.00

  • Motion angle: 0.00

  • Noise: 1000.00

  • Iterations: 200

  • Boundary: mirror boundary

  • Smoothness: 100.0

  • Area size: 3

  • Adaptive smoothing: yes


В результате страница будет выглядеть так, как показано на рис. 4,в.

Конечно, и этот вариант не идеален, но текст уже легко смогут прочитать как человек, так и OCR-программы (Cuneiform для Linux с ним справляется).

Стоит отметить, что своей эффективностью Refocus-it во многом обязан применению принципа итеративной обработки, т. е. многократному повтору одинаковых действий. В приведенных выше данных было взято высокое значение итераций (200), из-за чего плагин работал чрезвычайно медленно. Для обработки фото столь значительных величин не требуется.

>>>> Поставить рядом рисунки 04a, o4b и 04c

Рис. 4. Фото страницы журнала:

а -- фрагмент страницы; б -- первая обработка; в вторая обработка

Устранение шума

Цифровой шум проявляется в виде случайным образом расположенных элементов, лишающих фотографию естественности. Создается ощущение, будто на изображение наложена маска из точек различной яркости и разного цвета. Это ухудшает восприятие однотонно окрашенных фрагментов изображения (например, голубого неба) и объемных объектов на заднем плане, находящихся не в фокусе. На величину шума более всего влияет значение светочувствительности (ISO), а также конструктивные особенности матриц цифровых фотокамер.

Тем не менее если на вашем снимке присутствует шум, имеется возможность улучшить фото в Linux.


GREYCstoration

Данное приложение может использоваться как отдельно (из командной строки), так и в виде плагина к GIMP. Оно работает на основе принципа избирательного размывания с сохранением очертаний и краев на снимке. Ниже представлено диалоговое окно плагина (рис. 5) в GIMP (раздел «Фильтры > Улучшение»).>>> 05.png

Рис. 5. Окно плагина GREYCstoration


Для примера возьмем снимок, сделанный без вспышки при искусственном освещении с высокой светочувствительностью (ISO 1250). Как поступать в данном случае?

Среди множества параметров наиболее важными являются Noise Scale и Contour preservation. Первый отвечает за физический размер элементов шума и напрямую влияет на степень шумоподавления. Чем точнее вы подберете его значение, тем эффективнее будет работа GREYCstoration в целом. Параметр Contour preservation отвечает за сохранение контуров и, следовательно, влияет на детализацию обработанного снимка. Распознавание контуров производится исходя из контрастности точки относительно соседних, и потому следует помнить, что слишком низкие значения Contour preservation сохранят обводку у шумовых пятен (плагин примет шум за полезный объект), а слишком высокие -- «замылят» изображение.

Если на снимке мало цветовых переходов и преобладают монотонные заливки, то стоит увеличить количество проходов плагина. И здесь поможет параметр Number of Iterations. Если же на снимке сильные шумы сочетаются с высокой детализацией и наличием очень мелких, но важных деталей, то имеет смысл поменять механизм вычисления соседних точек -- Interpolation type. Стандартно в плагине установлено значение Nearest neighbor (ближайший соседний), но также допустимо выбрать Linear или Runge -- Kutta. Последний вариант более предпочтителен, хотя он и замедляет работу GREYCstoration в несколько раз. В этом случае взаиморасположение точек вычисляется с помощью системы дифференциальных уравнений, решаемых по методу Рунге -- Кутты. В результате плагин эффективно удаляет шум, сохраняя тонкие линии и прочие важные детали.

Оригинал снимка и результат работы GREYCstoration представлены на рис. 6.


>>> Поставить рядом 06a.jpg и 06b.jpg

Рис. 6. Оригинал снимка и фото после применения GREYCstoration


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

Теперь нужно подстроить цвета с помощью инструмента «Цвет > Тон > Насыщенность». В данном случае следует уменьшить насыщенность для желтых и пурпурных оттенков и немного повысить освещенность. Так как на данном слое нет мелких деталей, допустимо еще раз применить для него плагин GREYCstoration, увеличив Noise Scale и уменьшив Contour preservation. Теперь слои можно объединить.


>>> 07.jpg

Рис. 7. Итоговый результат обработки фотографии с помощью GREYCstoration


С получившегося в результате снимка будут убраны не только шумы, но и зернистость (рис. 7). Чтобы избавиться от хроматических шумов, не размывая совсем изображение, имеет смысл воспользоваться сочетанием разных плагинов.


Альтернативные способы удаления шума

На сайте проекта GIMP Plugin Registry представлены и другие плагины, помогающие бороться с шумом на фотоснимках. Среди них стоит отметить Wavelet denoise, а также несколько сценариев на языке Script-fu (плагины выглядят, как файлы *.scm; для установки их следует просто скопировать в папку /usr/share/gimp/2.0/scripts).

Плагин Wavelet denoise отличается тем, что позволяет удалять шум не из всего изображения, а либо отдельно по каждому каналу RGB, либо по индивидуальным каналам YcbCr. Он борется не с зернистостью, а с хроматическими искажениями (цветными пятнами), поэтому в число его настроек входят движки, отвечающие за пороговые значения хроматических пятен, а не величина радиуса.

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

Есть ли способы подавить шум стандартными средствами GIMP? В принципе в GIMP имеются обычные фильтры в разделе «Улучшение», к ним относится «Сгладить» (в других программах его часто называют «Медиана»), а также «Удаление пятен» (часто упоминаемый как Despeckle). Однако последний подходит только для удаления шума на темном фоне; в случае же фотографии дартса этот фильтр бессилен.


Исправление искажений оптики

Известно, что даже автомобильное лобовое стекло слегка искажает изображение, а уж граненый стакан и вовсе дает повод повеселиться, настолько смешные выходят диспропорции. Не лишены такого недостатка и линзы в фотоаппаратах, особенно в тех из них, где оптика встроена в камеру и не может быть заменена. Лучше всего оптические искажения заметны в тех кадрах, где присутствуют строго вертикальные и горизонтальные линии, а также объекты прямоугольной формы. Многим знаком эффект «сходящихся вертикалей», почти всегда возникающий при съемке интерьеров (особенно снизу вверх). Сейчас мы будем бороться с другим распространенным оптическим дефектом -- с так называемыми бочкообразными формами прямоугольных объектов. Возьмите свою «мыльницу» и сфотографируйте в портретном режиме рамку на стене. У вас получится кадр, похожий на представленный на рис. 8.


>>>> 08.jpg

Рис. 8. Изображение с оптическим искажением


Наверняка вы уже знаете, что с ним делать. Откройте снимок в GIMP и выберите инструмент «Перспектива». Потяните изображение за угловые точки и исправьте угол обзора. Теперь вы будете смотреть на рамку под прямым углом (рис. 9).


>>> 09.png

Рис. 9. Исправляем перспективу


Однако проблема закругляющихся линий осталась, и потому сразу же на ум приходит мысль кадрировать снимок так, чтобы рамки не было вообще. Но что делать, если белую рамку по каким-либо причинам нужно сохранить? Тогда следует выбрать инструмент «Фильтры > Искажения > Исправить искажения оптики». Появится диалоговое окно, в котором легко компенсировать бочкообразные края (рис. 10).


>>> 10.png

Рис. 10. Исправляем бочкообразные края


В вашем распоряжении имеются шесть параметров, из которых все (кроме, пожалуй, «Яркости») отвечают за определенные пространственные манипуляции с плоскостью снимка. Названия параметров говорят сами за себя, а требующиеся для них значения несложно подобрать вручную. После нажатия ОК снимок с правильными вертикальными и горизонтальными линиями будет готов к итоговому кадрированию (рис. 11).

>> 11.png

Рис. 11. Результат исправления оптических искажений

***

Мы рассмотрели, как справиться с тремя распространенными дефектами, возникающими при любительской фотосъемке. Разумеется, есть еще много разных особенностей цифровой фотографии, которые успешно «лечатся» в GIMP. Если вы овладеете искусством применять и сочетать фильтры из богатейшей коллекции расширений этого редактора, то сумеете исправлять хроматические аберрации (голубые и фиолетовые ореолы вокруг краев объектов), растягивать маленькие изображения почти без потерь в качестве, повышать яркость снимков, сохраняя оттенки на светлых областях, и многое-многое другое.

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


Полезные ссылки

Реестр плагинов для GIMP: http://registry.gimp.org/

Домашняя страница Refocus: http://refocus.sourceforge.net/

Refocus для новых версий GIMP + инструкция: http://www.cooptel.qc.ca/~rlemieu/refocus.html

Домашняя страница Refocus-It: http://refocus-it.sourceforge.net/

Домашняя страница GREYCstoration: http://cimg.sourceforge.net/greycstoration/guide.shtml