Казахстан |
Сжатие изображений с потерями
14.4. Алгоритм сжатия изображений JPEG
Алгоритм сжатия, используемый в формате хранения изображений JPEG1Joint Photographic Experts Group организация, занимающаяся разработкой и стандартизацией алгоритмов и форматов сжатия изображений. [49], построен на использовании дискретного косинусного преобразования. Схема сжатия в алгоритме представляет собой конвейер, где данное преобразование - лишь одна из стадий (хотя, возможно, и важнейшая). Опишем алгоритм, предполагая, что на вход дано 24 -битное изображение, значения атрибутов пикселей которого являются элементами цветового пространства RGB ( "Основные понятия. Представление цвета в машинной графике" ).
-
Перевод в цветовое пространство YCbCr (подробнее
"Основные понятия. Представление цвета в машинной графике"
). Здесь Y - компонента яркости, Cb и Cr - компоненты цветности. Человеческий глаз более чувствителен к яркости, чем к цвету. Поэтому важнее сохранить большую точность при передаче Y, чем при передаче Cb и Cr. Перевод осуществляется по следующей формуле:
обратный перевод:
-
Субдискретизация компонент цветности. После перевода в цветовое пространство YCbCr осуществляется субдискретизация по следующим соотношениям: 4:4:4 (отсутствие передискретизации), 4:2:2 (компоненты цветности меняются через одну по горизонтали), 4:2:0 (компоненты цветности меняются через одну по горизонтали; при этом по вертикали они меняются через строку). Проиллюстрируем подробнее данные соотношения на примерах. Будем преобразовывать блок 4 x 4 пикселя изображения:
Y00Cb00Cr00 Y01Cb01Cr01 Y02Cb02Cr02 Y03Cb03Cr03 Y10Cb10Cr10 Y11Cb11Cr11 Y12Cb12Cr12 Y13Cb13Cr13 Y20Cb20Cr20 Y21Cb21Cr21 Y22Cb22Cr22 Y23Cb23Cr23 Y30Cb30Cr30 Y31Cb31Cr31 Y32Cb32Cr32 Y33Cb33Cr33
тогда:
- 4:4:4. Cубдискретизированный блок будет таким же.
-
4:2:2. Cубдискретизированный блок будет таким:
Y00Cb00Cr00 Y01Cb00Cr00 Y02Cb02Cr02 Y03Cb02Cr02 Y10Cb10Cr10 Y11Cb10Cr10 Y12Cb12Cr12 Y13Cb12Cr12 Y20Cb20Cr20 Y21Cb20Cr20 Y22Cb22Cr22 Y23Cb22Cr22 Y30Cb30Cr30 Y31Cb30Cr30 Y32Cb32Cr32 Y33Cb32Cr32
-
4:2:0. Cубдискретизированный блок будет таким:
Y00Cb00Cr00 Y01Cb00Cr00 Y02Cb02Cr02 Y03Cb02Cr02 Y10Cb00Cr00 Y11Cb00Cr00 Y12Cb02Cr02 Y13Cb02Cr02 Y20Cb20Cr20 Y21Cb20Cr20 Y22Cb22Cr22 Y23Cb22Cr22 Y30Cb20Cr20 Y31Cb20Cr20 Y32Cb22Cr22 Y33Cb22Cr22
- Применение дискретного косинус-преобразования. Изображение (точнее, полученные после субдискретизации компоненты) разбивается на блоки 8 x 8 ; к каждому блоку применяется дискретное косинус-преобразование (отдельно для компонент Y, Cb и Сr ). Если изображение не делится нацело на блоки 8 x 8, то добавляется соответствующее количество строк и столбцов по непрерывности.
-
Квантование. Человеческий глаз практически не замечает изменения в высокочастотных составляющих, следовательно, коэффициенты, отвечающие за высокие частоты, можно хранить с меньшей точностью. Квантование осуществляется с помощью умножения матрицы коэффициентов ДКП на так называемую матрицу квантования:
где означает покомпонентное умножение и взятие целой части, т.е. Tij = [tijqij ], где tij - исходные коэффициенты ДКП, qij - компоненты матрицы квантования, [] - операция взятия целой части. Таким образом, происходит квантование области определения коэффициентов исходной матрицы. Матрицы квантования разные для компонент цветности и яркости.
На данной стадии можно задавать степень сжатия путем изменения матриц квантования. Чем ближе к нулю элементы матрицы квантования, тем меньше будет диапазон значений элементов матрицы Tij, а значит, их можно закодировать, затратив меньшее количество информации. Например, если элементы qij достаточно близки к нулю, то большинство элементов Tij будет нулями.
Матрицы квантования оговорены в стандарте, а для изменения степени сжатия их умножают на определенный коэффициент. Очевидно, что потери на этой стадии самые большие; если убрать слишком много информации из низкочастотных компонент (т.е. слишком сильно огрубить компоненты), то появятся артефакты: распадение на квадраты 8 x 8, эффект Гиббса (возникновение ореола рядом с местами резких цветовых переходов) (см. рис. 14.3 и "Дискретизация. Антиалиасинг. Геометрические преобразования растровых изображений" ).
- Зигзаг-упорядочивание. К каждой квантованной матрице применяется так называемое зигзаг-упорядочивание. Это особый проход матрицы для получения последовательности (см. рис. 14.4). Сначала идет элемент T00, затем T01, T10, T11 . .. Причем для типичных фотореалистических изображений сначала будут идти ненулевые коэффициенты, соответствующие низкочастотным компонентам, а затем - множество нулей.
-
Сжатие методом RLE. Полученная последовательность кодируется с помощью модифицированного алгоритма группового кодирования. Выводятся пары чисел: первое - число нулей, второе - значение после подпоследовательности нулей. Например, закодируем такую последовательность:Получим: (0, 122) (1, 125) (2, 44) (4, -1). Также существует специальный код для обозначения того факта, что оставшиеся значения в последовательности суть нули.
122 0 125 0 0 44 0 0 0 0 -1.
- Сжатие методом Хаффмена. Проводится кодированием методом Хаффмена со специальной фиксированной таблицей. Подробно этот метод описан "Алгоритмы сжатия изображений без потерь" .
Рис. 14.3. Артефакты JPEG. Вверху - исходное изображение, внизу - изображение, сжатое в 30 раз алгоритмом JPEG
Алгоритм восстановления изображения суть инверсия вышеприведенных действий. Степень сжатия от 5 до 100 и более раз (варьируется с помощью матриц квантования и задания метода субдискретизации). При этом визуальное качество для большинства фотореалистичных изображений остается на хорошем уровне при сжатии до 15 раз.
Данный алгоритм и формат являются самыми распространенными для передачи и хранения полноцветных изображений. Столь широкое распространение объясняется несколькими причинами: относительно невысокой вычислительной сложностью (что было очень актуально до 1996 года), достаточной степенью стандартизованности формата и алгоритма, а также отсутствием необходимости платить какие-либо лицензионные отчисления (т.к. отсутствуют патентованные алгоритмы). К недостаткам алгоритма относят возникновение упоминавшихся выше артефактов, которые слишком заметны для человеческого глаза.
Описанная выше схема сжатия является типичной для алгоритмов сжатия изображений с потерями (за исключением фрактального). Отличие в основном состоит в типе преобразования на шаге 3. Далее мы рассмотрим другой вид преобразования.