При использовании алгоритмов сжатия с потерями, как правило, коэффициент сжатия, следовательно, степень потерь качества можно задавать. При этом достигается компромисс между размером и качеством изображений.
Одна из серьезных проблем машинной графики заключается в том, что до сих пор не найден адекватный критерий оценки потерь качества изображения. А теряется оно постоянно − при оцифровке, при переводе в ограниченную палитру цветов, при переводе в другую систему цветопредставления для печати, и, что для нас особенно важно, при сжатии с потерями. При правильном применении алгоритмов сжатия с потерями мы не отличим исходное изображение от сжатого , при этом значительно уменьшим размер файла.
Сжатие с потерями лучше всего работает с теми изображениями, на которых нет повторяющихся узоров или больших областей однотонной закраски. В растровом рисунке, который содержит множество слегка отличающихся друг от друга пикселов (например, 100 немного отличающихся оттенков голубого цвета неба), большие области могут заполняться пикселами одного цвета или пиксельным узором, имитирующим вид исходной области.
В настоящее время создано несколько алгоритмов сжатия с потерями, самым известным из которых является JPEG.
Человеческий глаз более восприимчив к изменениям яркости, нежели цвета, поэтому для разных каналов изображения применяются различные степени сжатия − информация теряется, но визуально это не заметно. Чувствительность глаза к мелким элементам изображения невелика, что позволяет без ущерба для качества их удалить.
JPEG
Название алгоритма компрессии − аббревиатура от Joint Photographic Expert Group, инициативной группы, образованной из экспертов ITU (International Telecommunication Union) и ISO (International Organization for Standartization). Именно поэтому в ее названии присутствует приставка Joint. В 1992 г. JPEG был объявлен международным стандартом в области графических изображений.
При компрессии методом JPEG качество теряется всегда. При этом всегда есть выбор: отдать предпочтение качеству в ущерб объему (размер файла сожмется приблизительно в три раза) или же наоборот, добиться минимального размера изображения, при котором оно еще останется узнаваемым (степень компрессии может достигать 100). Сжатие, при котором различие в качестве между получающимся изображением и оригиналом еще остается незаметным, дает 10-20-кратное сокращение размера файла.
Строго говоря, JPEG не формат, а алгоритм сжатия, в основе которого лежит не поиск одинаковых элементов, как в случае RLE и LZW, а поиск разницы между пикселами.
Кодирование данных с помощью используемого в JPEG алгоритма сжатия осуществляется в несколько этапов.
1. Первый этап заключается в конвертировании цветовой модели изображения (обычно RGB) в модель, где яркостная и цветовая составляющие разнесены (например, Lab), что позволяет оптимально подойти к выбору степеней компрессии для каждого канала (с учетом особенностей восприятия глазом). Мы уже говорили о том, что глаз более чувствителен к информации о яркости, так что имеет смысл ее отделить и обращаться дальше аккуратно. На цветности же можно сэкономить. Это преобразование вносит первые искажения из-за округления значений, однако эти искажения незначительны.
2. На следующем этапе происходит префильтрация, при которой соседние пиксели отдельно в каждом из каналов a и b группируются попарно в горизонтальном и вертикальном направлениях, а яркостный канал L оставляется без изменений. После этого вся группа пикселов получает усредненное значение. В результате отбрасывается половина или три четверти информации о цвете (в зависимости от реализации алгоритма).
3. Полученная информация, прошедшая стадию первичной "очистки", отдельно в каждом канале снова группируется в блоки, но уже размером 8x8, после чего для них применяется основное сжатие − дискретное косинусное преобразование, для краткости − DCT (discrete cosine transform). В результате информация о распределении яркости пикселов преобразуется в другой вид, где она описывается распределением, основанным на частоте появления той или иной яркости пикселов. DCT имеет ряд преимуществ перед другими преобразованиями (например, перед преобразованием Фурье), обеспечивая лучшее восстановление информации.
Вместо массива из 64 значений (8x8 пикселов) для каждого блока, из которых состоит изображение, мы получаем массив из 64 частот. Основная цель преобразования − выяснить общую картину распределения крупных и мелких объектов, что пригодится потом, при устранении малозначимой информации. Упрощённо: низкочастотная составляющая определяет общий цвет блока, высокочастотные − изменениия цвета внутри блока.
4. Следующий этап − квантование (quantization). На этом этапе в зависимости от выбранного нами уровня качества, отбрасывается некоторая часть чисел, характеризующих тонкие детали.
Все составляющие делятся на различные коэффициенты, определяющие значимость каждой из них для качественного восстановления исходного изображения, и результат округляется до целого значения. Именно эта процедура вносит наибольшие потери качества, снижая конечный объем изображения. Высокочастотные составляющие квантуются грубо, а низкочастотные − точнее, поскольку наиболее заметны. Дабы несколько сгладить понижение качества, в канале яркости используются меньшие коэффициенты деления, чем в каналах цветности. Но чаще (это делается для ускорения расчетов) вместо специально подобранных значений берется всего одно − то, которое вводит пользователь при выборе степени компрессии.
В результате квантования получается набор составляющих, по которым исходное изображение восстанавливается с заданной точностью.
Рис. 4.24. Результат восстановления черно-белого квадрата соответственно одной, четырьмя и пятнадцатью составляющими
5. После выполнения основной работы по сжатию изображения дальнейшие преобразования сводятся к второстепенным задачам: оставшиеся составляющие собираются в последовательность таким образом, чтобы сначала располагались отвечающие за крупные детали, а потом − за все более мелкие. Если посмотреть на рисунок, то движение кодировщика похоже на зигзагообразную линию. Этап так и называется − ZigZag (рис. 4.25).
Рис. 4.25. ZigZag
Затем получившаяся последовательность сжимается: сначала обычным RLE, затем методом Хаффмана.
6. И наконец, чисто техническая стадия − данные заключаются в оболочку, снабжаются заголовком, в котором указываются все параметры компрессии с тем, чтобы изображение можно было восстановить. Впрочем, иногда в заголовки не включают эту информацию, что дает дополнительный выигрыш в компрессии, однако в этом случае нужно быть уверенным, что приложение, которое будет читать файл, о них знает.
Восстановление данных происходит в обратном порядке. Таким образом, чем выше уровень компрессии, тем больше данных отбрасывается и тем ниже качество. Используя JPEG, можно получить файл в 1-500 раз меньше, чем BMP. Этот формат аппаратно независим, полностью поддерживается и PC и Macintosh, однако он относительно новый и не понимается старыми программами (до 1995 г.). JPEG не поддерживает индексированные палитры цветов. Первоначально в спецификациях формата не было поддержки цветовой модели CMYK и только в последние годы фирмой Adobe добавлена поддержка цветоделения.
Итак, достоинства JPEG очевидны: малый размер файла при приемлемых потерях качества, аппаратная независимость. А недостатки? Они также очевидны исходя из всего сказанного выше. Это
1. Невозможность достичь высоких степеней сжатия за счет ограничения на размер блока (только 8x8).
2. Блочность структуры на высоких степенях компрессии.
3. Закругление острых углов и размывание тонких элементов в изображении.
При сохранении графических изображений в формате JPEG следует учитывать следующее.
JPEG лучше подходит для сжатия растровых картинок фотографического качества, чем для логотипов или схем. Это связано с тем, что в них больше полутоновых переходов, в то время как при сжатии однотонных заливок появляются нежелательные помехи.
Лучше сжимаются (и с меньшими потерями) большие изображения для web и изображения с высоким разрешением для печати (200-300 dpi и более), так как в каждом квадрате (8x8 пикселов) переходы получаются более мягкими за счет большего числа квадратов в таких файлах.
Нежелательно сохранять в JPEG-формате любые изображения, в которых важны тонкие нюансы цветопередачи (репродукции), так как во время сжатия происходит отбрасывание цветовой информации.
Этот формат следует использовать только для сохранения конечного варианта работы, потому что каждое последующее сохранение приводит к новым потерям (отбрасыванию) данных.