Опубликовано 31 июля 2007, 00:15

Ваши изображения могут стать лучше. Часть II. Убираем шум и «чиним» JPG

Как улучшить любимый снимок с вашего мобильника? Как вытянуть фотографию с большим количеством ряби? Изучаем простые, но эффективные способы избавления от шума в фото. Очередной раз убеждаемся в преимуществе человека перед работой стандартных фильтров.
Ваши изображения могут стать лучше. Часть II. Убираем шум и «чиним» JPG

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

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

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

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

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

Что же это за потери? Всё очень просто: пиксели близкого оттенка перекрашиваются в общий цвет, таким образом информация о цвете сокращается и вуаля! файл занимает меньше места на носителе.

Что при этом происходит? Давайте посмотрим поближе.

У нас есть вот этот снимок, он сделан камерофоном Sony Ericsson w800.

Rotation of DSC00284_s

Rotation of DSC00284_s

Снимок так себе, давайте увеличим его как следует.

zoom1_s

zoom1_s

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

Итак, первое, что мы будем делать, уничтожать границы.

Стираем лишние границы

Для этого нам потребуется найти и выделить начальный элемент сжатия.

  • Увеличиваем фотографию, видим злополучные квадраты и выделяем любой из них.
step1

step1

  • Создаём новый слой, жмём Ctrl+Shift+N.

Этот слой у нас пустой и прозрачный, и сейчас у нас есть выделение (наш квадрат). В этом слое применяем к выделению команду Stroke (обводка) закладка Edit: Stroke.

stroke

stroke

Делаем обводку чёрного цвета по центру нашего выделения.

stroke2

Так выглядит наш обведённый квадратик

stroke2

Так выглядит наш обведённый квадратик

Теперь выключаем глаз на нижнем слое (Background), чтобы нашего фото не было видно, а квадратик оказался на девственно-чистом прозрачном фоне, выделение не отключаем.

stroke3

stroke3

Теперь из этого элемента мы будем делать паттерн для заливки: жмём Edit: Define Pattern. Присваиваем паттерну имя.

В данный момент содержимое слоя вместе с обведённым квадратиком нам больше не нужно, квадратик у нас всё ещё выделен, поэтому радостно жмём кнопку Delete и наш второй слой снова чист.

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

Мы только что нажали Delete и удалили всё из слоя, у нас по-прежнему мигает рамка выделения. Чтобы сделать Deselect, жмём Ctrl+D.

Заливаем пустой слой паттерном и делаем сетку: Edit: Fill. Здесь выбираем наш паттерн квадратик. Жмём ОК и получаем следующую картину: у нас есть слой с фото и слой с чёрной сеткой.

grid_s

grid_s

В данный момент нам нужно сделать выделение, состоящее из сетки, которая и перекроет границы. Чтобы получить выделение, кликаем по слою с сеткой, удерживая кнопку Ctrl. Те, кто не ищет лёгких путей, могут проделать следующее: меню Select: Load Selection.

load

load

Итак, мы получили нужный селекшн, слой с сеткой нам теперь не нужен, отключаем глаз в палитре Layers. Если не хотим оставить его на всякий случай под рукой, то удаляем.

Теперь мы можем стереть эти отвратительные лишние границы: применяем к выделению в слое с нашим фото различные варианты Blur и Blur More. Размытие по Гауссу (Gaussian Blur) лучше не делать, потому что размытие может оказаться слишком сильным и наша стека станет видимой, что ухудшит изображение. Зато мы можем несколько раз повторить действие Blur или Blur More до появления нужного результата.

bylo

Было

bylo

Было

stalo

Стало

stalo

Стало

Убираем цветовой шум

Часть проблемы мы решили, вылечили сильно сжатый jpg, теперь будем избавляться от цветного шума, что лучше делать именно в каналах. И вот почему. Избавиться от шума можно размытием. Но ведь мы не хотим нарушить фокус изображения, тем более что он у нас и так не лучший в данном случае. Что вы, возможно, делали с этим раньше? Применяли ко всему изображению различные фильтры вроде Dust & Scratches, Median, Despeckle, а то и Gaussian Blur, что крайне неважно сказывалось на резкости изображения. Мы ведь не хотим потерять столько деталей.

И вот здесь нам снова приходит на помощь пространство Lab. Переводя наш файл из RGB в Lab, мы ничего не теряем в цвете, поскольку Lab может передать больше цветов, то есть цветовой охват в Lab больше. Как вы помните из предыдущей статьи, Lab состоит из трёх каналов, где вся информация о цвете содержится в каналах a (красно-зелёный) и b (жёлто-синий), а вся информация о свете и тенях, вся резкость и детали находятся в канале Lightness. То есть, размывая каналы с цветом а или b, мы ничего не теряем в деталях. Но давим при этом лишний цветовой шум. Как правило, особенно много шума содержится в синем канале RGB, то есть, размывая в Lab жёлто-синюю составляющую (канал b), мы избавляемся от шума.

rgb

Изображение в RGB

rgb

Изображение в RGB

r

Красный канал

r

Красный канал

g

Зелёный канал

g

Зелёный канал

b

Больше всего шума в синем канале

b

Больше всего шума в синем канале

b_channel

Канал b, в котором можно подавить шум

b_channel

Канал b, в котором можно подавить шум

lightness

В канале Lightness содержатся все детали

lightness

В канале Lightness содержатся все детали

Для надёжности можете размыть и канал a. Для размытия идём в меню с каналами (Layers) и применяем Blur More к каналу b или a, выделив этот слой в палитре Layers. Смотрим на результат.

stalo

До подавления шума

stalo

До подавления шума

stalo2

После подавления шума

stalo2

После подавления шума

Теперь повышаем резкость методами, о которых мы говорили в предыдущей статье.

Доводим фотографию до ума, настраиваем контрастность в канале Lightness, с помощью маски затемняем волосы (об этом мы поговорим в других материалах) и смотрим, что у нас с цветом лица. Лицо находится в тени, но сочетание M (magenta) и Y (yellow) вполне благополучно. О цвете лица и о том, как с ним бороться, поговорим в другой статье.

Подведём итоги:

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

Сравним, что бы на нашем месте сделали стандартные фильтры.

podavlenie

Наш результат подавления шума с размытием каналов a и b в пространстве Lab

podavlenie

Наш результат подавления шума с размытием каналов a и b в пространстве Lab

despeckle

Применение фильтра Despeckle

despeckle

Применение фильтра Despeckle

gaussian_blur

Применение фильтра Gaussian Blur

gaussian_blur

Применение фильтра Gaussian Blur

dust_&_scratches

Применение фильтра Dust & Scratches

dust_&_scratches

Применение фильтра Dust & Scratches

median

Применение фильтра Median

median

Применение фильтра Median

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

Использование фильтров Photoshop ко всему изображению даёт худшие результаты, нежели размытие каналов цвета в Lab.

Продолжение в следующих статьях.

Выражаем отдельную благодарность Павлу Синякову, руководителю проекта Ferra.ru, послужившему моделью для наших упражнений.