Архивы: по дате | по разделам | по авторам

Art’e’facts

АрхивОфисные приложения (архив)
автор : Сергей Токарев (eSTet)   29.05.2001

Они питаются пикселями и пожирают электронные изображения. Словно пылевые клещи, они почти неощутимы и обитают повсеместно. Они вызывают аллергию у работников препресса и недоумение у заказчика. Если вы еще не знакомы с ними, представляем: JPEG-артефакты!

Как они заводятся

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

JPEG-сжатие, названное так по имени своих создателей (Joint Photographic Experts Group), использует особенности человеческого восприятия для максимального сжатия фотоизображений. В процессе создания метода был обобщен мировой опыт больше чем за полвека, включающий компьютерные, телевизионные и другие исследования.

По последним научным изысканиям, наш глаз реально видит только размытые образы, которые потом обрабатываются мозгом с целью повышения качества. Но тогда подобные научные изыски еще не вышли за рамки гипотез, поэтому наиболее смелым шагом экспертной группы явилось признание того, что наши глаза больше реагируют на изменение яркости, чем цвета. Решено было значительно проредить цветовую информацию и сосредоточиться на яркости. Для этого были разработаны рекомендации по сжатию фотографических изображений, известному сейчас как JPEG-сжатие с потерями. Добавлю, что попутно было изучено JPEG-сжатие без потерь, но результаты исследований, очевидно, были засекречены [1].

Как бы там ни было, на начальном этапе кодирования JPEG-метод переводит изображение в трехканальную систему с одним каналом яркости и двумя цветовыми каналами. В то время как яркостная составляющая кодируется полностью, для кодировки цветовых данных используется в два раза меньший диапазон. Это было сделано под действием сильного лобби дальтоников и Лиги защиты прав животных, которые, как известно, цвета не различают. Один этот шаг уже позволял уменьшить объем хранимой информации на треть. Он же приводил и к первой, «неощутимой для человеческого глаза», потере цветовых данных.

Потом выяснилось, что нам, людям, важнее воспринимать полутоновую картину в целом. Мы видим, что дерево зеленое, а яблоко в целом красное, как это хорошо показывают рисунки от руки и векторные клипарты. И только вблизи мы различаем дополнительные оттенки, игру цвета. JPEG также сначала определяет полутоновой характер в целом, а потом уточняет детали, кодируя данные о цвете как изменение относительно среднего значения. Для этого используется математический метод DCT (дискретное косинусное преобразование). На этом этапе происходит еще одна потеря данных — за счет математических погрешностей. Для увеличения быстродействия обработки методом DCT изображение разбивается на блоки 8 на 8 пикселей, которые и создают характерную JPEG-структуру сжатой картинки.

Не следует забывать, что главной целью группы экспертов был оптимальный метод сжатия фотоизображений. Как правило, это изображения с мягкими цветовыми переходами, в отличие от набросков карандашом или чертежей. Поэтому на третьем этапе отбрасывается очередная порция данных, отвечающая за резкие контуры, после чего границы блоков 8 на 8, использованных в предыдущем шаге, зачастую перестают совпадать. Вдобавок обычно цветовые каналы обрабатываются в два раза грубее, чем канал яркости (вспомним особенность наших глаз!). Поскольку информацией о том, как воспринимают изображения глаза мушки дрозофилы, несмотря на протесты со стороны Лиги Защиты животных, решено было пренебречь, на сем было решено остановиться.

После того, как информация была сто раз обработана, причесана и прорежена, наступает черед собственно сжатия, которое происходит без потерь. Мы уже привыкли, что JPEG-сжатие — это сжатие с потерями. Так вот, все потери относятся только к этапу подготовки данных, само сжатие происходит по стандартным алгоритмам. Но поэтапное выкидывание информации при подготовке приводит к дрожанию линий, появлению «грязных» пятен около контуров предметов на однородном фоне, видимым квадратам 8х8 и прочим «приятностям», называемым одним термином: JPEG-артефакты.

Есть лишь одно утешение: при небольшом сжатии артефакты действительно не воспринимаются глазом и качество практически сохраняется. Огромный плюс JPEG — это действительно сильное уменьшение объема файла ценой малых потерь.

Источники заразы

Откуда же берутся все эти сильно загаженные jpeg'ом картинки?

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

Во-вторых, на шестой части суши продолжает оставаться популярным такой источник клипартов, как диски с пиратскими коллекциями. И если вы держите в руках диск с надписью «5000 фото высшего качества», то знайте, что скорее всего вы не найдете там ну абсолютно ничего хорошего — ни по размеру фото, ни по качеству. JPG–файлы размером менее 100 КБайт в большинстве случаев пригодны максимум для визиток.

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

Еще один источник — графический редактор Corel Draw, печально известный своей маниакальной тягой к JPG-сжатию импортированных изображений. По умолчанию сжатие растровых изображений включено, и это приносит неизбежные искажения в импортированные иллюстрации. Поэтому при ориентации на полиграфию необходимо отключать компрессию растровых изображений в файле, как все и делают, но, как говорят знающие люди, Corel все равно что-то там втихую мутит с картинками, потому что крохотные JPG-артефакты все равно появляются [2].

Ну и, наконец, источником являются юзеры, ибо, открыв фотографию в формате JPG и отредактировав ее, обычный пользователь, скорее всего, сохранит результаты в том же файле и в том же формате, что нельзя делать ни в коем случае! JPEG-сжатие кумулятивно — каждое новое сохранение, накапливая искажения, постепенно доводит качество картинки до никакого состояния.

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


[1] - Возможно, потому, что на фотографиях неба, сжатых без потерь, неожиданно появились летающие тарелки и шаттлы земных президентов, подлетающих к ним время от времени? Ведь самое любимое дело у «официального» JPEG – нашинковать небо в окрошку.
[обратно к тексту]

[2] - Самым надежным способом получения высокого качества работы в Corel Draw является использование внешних линков на иллюстрации.
[обратно к тексту]

Метод борьбы

Зарекомендовавший себя в боях с артефактами простой алгоритм приводится «as is», как я использую его в Photoshop. Но в принципе его также можно использовать в любой программе, которая работает в режиме Lab и может выполнять операции, аналогичные Gaussian Blur и Median [3].

  1. Подозреваемое изображение переводится в цветовой режим Lab. На рисунке хорошо видно «дрожание» и квадраты вокруг кольца, которое держит мужчина в черных очках (рис.1).


Рисунок 1

  1. Переключаемся в первый цветовой канал а (Ctrl+2). Смотрим на картинку. Да… все недостатки вылезли как на ладони. Запускаем Filter->Blur->Gaussian Blur. Поскольку результат будущей работы фильтра можно увидеть сразу в окне с изображением, регулируем Radius так, чтобы найти минимальное значение, при котором исчезают JPEG-«квадраты». Как показывает опыт, для большинства JPG-картинок хорошо подходят значения 2 пикселя. Щелкаем по кнопке ОК (рис.2, 3).


    Рисунок 2


              Рисунок 3

  2. Переключаемся во второй цветовой канал b (Ctrl+3). Повторяем операцию с Gaussian Blur. Поскольку это был последний использованный фильтр, достаточно нажать клавиши Ctrl+F.

  3. Переходим в канал яркости L. Этот канал является наименее пострадавшим от сжатия и в то же время несущим наибольшее количество информации. Изучите картину. Если вас устраивает качество, переходите сразу к шагу 8. Если нет (а это почти всегда так) — запускайте Median через меню Filter->Noise->Median. Используйте значение Radius — 2 пикселя (рис.4, 5).


    Рисунок 4


               Рисунок 5

  4. Median очень сильно сглаживает детали, поэтому сразу же применим ослабление фильтра Edit->Fade Median (Ctrl+Shift+F). Выставьте Opacity равным 30-40%, чтобы одновременно и ослабить действие фильтра, и избежать воскрешения JPEG-артефактов.

  5. Изображение все равно очень сильно потеряло в мелких деталях. Если они важны, особенно если это изображения людей, используйте фильтр повышения резкости Unsharp Mask. Запустите Filter->Sharpen->Unsharp Mask. Значение Radius выставляем в соответствии с использованным радиусом фильтра Median. Значение Amount увеличивайте осторожно — примерно 120-200%. В результате большинство мелких деталей восстановится.

  6. Переводим изображение обратно в RGB режим (если надо).

Добавлю, что при тяжелом поражении JPEG-артефактами приходится применять более высокие значения для Radius в фильтре Gaussian Blur. На маленьких картинках это приводит к очень сильному сглаживанию и потере мелких деталей. Тут можно порекомендовать поработать кистью History в канале Lightness над особо важными участками, установив Opacity примерно 60%. Так я восстановил детали лица и кисти рук в приведенном примере. При умелой игре на клавиатуре (горячие клавиши) и наметанном глазе вся процедура занимает от силы 5 минут.

Краткие пояснения к методу

Режим Lab соответствует методу внутренней кодировки JPEG-файла. Как уже говорилось, яркостная и цветовые компоненты подвергаются разным степеням огрубления. Поэтому их следует обрабатывать отдельно, ища компромисс между излишним сглаживанием и откровенной наглостью JPEG-артефактов. Самый важный канал — это яркостный, он же несет наибольшее количество оригинальной информации. Фильтр Median создает контуры (резкие очертания), а Gaussian Blur — наоборот, разрушает. Нам нужно как можно больше деталей в канале яркости и как можно меньше квадратов в цветовых каналах (о деталях там даже не приходится говорить). Не вдаваясь в технические подробности, скажу только, что Median усредняет цвета и частично помогает восстановить первоначальные контуры.


[3] - Горячие клавиши для Photoshop приводятся в скобках по месту описания.
[обратно к тексту]

Обсуждение статьи - в форуме "Обсудим "СофтТерру"

© ООО "Компьютерра-Онлайн", 1997-2024
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.