JPEG
К следующей главе К оглавлению К предыдущей главе

Вниз    На главную

JPEG

Алгоритм компрессии JPEG был разработан группой экспертов в области фотографии специально для сжатия 24-битных изображений. JPEG — Joint Photographic Expert Group — подразделение в рамках ISO — международной организации по стандартизации. В целом алгоритм основан на дискретном косинусном преобразовании (в дальнейшем ДКП), применяемом к матрице изображения для получения некоторой новой матрицы коэффициентов. Для получения исходного изображения применяется обратное преобразование.

Общая структурная схема JPEG кодера

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

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

Рассмотрим работу алгоритм подробнее. Предположим для примера, что мы сжимаем 24-битное изображение. Тогда весь алгоритм представляет собой несколько последовательных шагов:

Шаг 1. Преобразование цветового пространства [RGB] в [YcbCr].
Шаг 2. Разбиение изображения на блоки размером 8*8 пикселей.
Шаг 3. Дискретное косинусное преобразование
Шаг 4. Квантование
Шаг 5. Зигзаг-сканирование
Шаг 6. Групповое кодирование (RLE)
Шаг 7. Кодирование по Хаффману

Шаг 1. Преобразование цветового пространства [RGB] в [YcbCr].

На первом этапе необходимо перевести изображения из цветового пространства RGB, с компонентами, отвечающими за красную (Red), зеленую (Green) и синюю (Blue) составляющие цвета точки, в цветовое пространство YCrCb (иногда называют YUV).

Вся дальнейшая работа производится именно с этим цветовым пространством. В нем Y— яркостная составляющая, а Cr, Cb— компоненты, отвечающие за цвет (хроматический красный и хроматический синий).

Преимущством представления цвета через YCrCb, по сравнению с RGB, является то, что оно наиболее близко к "естественному", тому, которое неосознанно выполняет человек. Y-компонента, или яркость, тесно связана с качеством картинки.

Человеческий глаз устроен таким образом, что наиболее чувствителен именно к яркостной составляющей изображения (Y-компонента) и наименее к цветовым. Причина этого лежит в физиологии. Глаз, имеет два типа визуальных анализаторов: палочки и колбочки. Палочковый аппарат обладает большей чувствительностью, чем колбочковый. Палочковый аппарат начинает реагировать на яркости порядка 10-4…10-5 кд/м2, колбочковый на яркости порядка единиц кандел на квадратный метр. Таким образом, световой динамический диапазон глаза составляет около 109. Еще одно свойство нашего зрительного анализатора заключается в том, что палочковый аппарат абсолютно не чувствителен к цвету. Вечером, когда количества падающего на зрачок света не хватает для того, чтобы вызвать реакцию колбочки, все в какой-то мере теряет цвет.

Причем чувствительность человеческого глаза к разным цветам тоже величина не постоянная. Кривая, определяющая чувствительность глаза к различным длинам волн, называется кривой относительной видности. Следует заметить, что при существенном уменьшении яркости кривая относительной видности изменяется. (рис.2, кривая 2) При нормальных яркостях зрачок оказывается более чувствителен к нижней части цветового спектра, нежели к верхней. Формат JPG как раз и учитывает эти особенности.Именно за счет того, что человеческий глаз менее чувствителен к цвету, чем к яркости, появляется возможность архивировать массивы для Cr и Cb компонент с большими потерями и, соответственно, большими коэффициентами сжатия. Подобное преобразование уже давно используется в телевидении. На сигналы, отвечающие за цвет, там выделяется более узкая полоса частот.

Упрощенно перевод из цветового пространства RGB в цветовое пространство YCrCb можно представить так:

Общая структурная схема JPEG кодера

Обратное преобразование осуществляется умножением вектора YUV на обратную матрицу:

Шаг 2. Разбиение изображения на блоки размером 8*8 пикселей.

Разбиваем исходное изображение на матрицы 8х8. Если горизонтальный размер (Х) исходного изображения не делится на 8, то кодер должен сделать его делимым, дополняя остальные правые столбцы (пока Х не станет кратным 8). Аналогично, если размер Y не делится на 8, кодер должен дополнить строки. Поскольку каждый пиксел в блоке 8*8 имеет три компонента (Y, Cr, Cb), ДКП применяется отдельно к каждому блоку. Таким образом, из каждой матрицы изображения, размером 8*8 пикселей формируются три рабочие матрицы— по 8*8 бит отдельно для каждой компоненты. Изображение делится по компоненте Y— как и в первом случае, а для компонент Cr и Cb матрицы набираются через строчку и через столбец. Т.е. из исходной матрицы размером 16x16 получается только одна рабочая матрица ДКП. При этом, как нетрудно заметить, теряется 3/4 полезной информации о цветовых составляющих изображения и получается сразу сжатие в два раза. Так можно поступать благодаря работе в пространстве YCrCb. На результирующем RGB изображении, как показала практика, это сказывается не сильно.

Шаг 3. Дискретное косинусное преобразование

Блоки 8*8 обрабатываются слева направо и сверху вниз. Применяем ДКП к каждой рабочей матрице.

ДКП – разновидность гармонического (спектрального) анализа. Все преобразования, которые обычно проделываются над сигналами при их цифровой обработке, так или иначе сводятся к разложению функций в другие, так называемые базисные функции. В результате ДКП блока 8*8 образуется блок из 64 коэффициентов (амплитуды базисных функций). Коэффициент – это число, выражающее степень присутствия конкретной пространственной частоты, имеющейся в изображении. Такое двумерное представление дает заметить интересные особенности – видно, что горизонтальная координата положения базисной функции характеризует горизонтальную составляющую изменений изображения в исходном квадрате, вертикальная координата - вертикальную составляющую. Чем больше, к примеру, коэффициент перед базисной функцией, расположенной более справа, тем больше резких переходов изображения в горизонтальной плоскости мы имеем.

Блок преобразования 8*8 пикселей

Например, если коэффициент перед 8-й базисной функцией (координаты [8,1]) максимален - мы имеем на изображении вертикальную сетку с шириной линий и промежутков в 1 пиксель (пиксели в горизонтальной плоскости чередуются с максимальной частотой), тогда как максимальный коэффициент 57-й базисной функции (координаты [1,8]) означал бы горизонтальную сетку изображения. Важно, что функции, характеризующие оба направления колебаний сразу, представляет собой не простое сочетание горизонтальных и вертикальных составляющих колебаний - это умножение 'горизонтальных' и 'вертикальных' косинусов. К примеру, 64-я базисная функция (координаты [8,8]) представляет собой максимальные колебания максимальной частоты в центре квадрата, затухающие до нуля к краям

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

В упрощенном виде это преобразование можно представить так:

,где

Шаг 4. Квантование

Процесс квантования играет ключевую роль в JPEG сжатии. Это – процесс, который удаляет высокие частоты, представленные в исходном изображении – впоследствии высокую детализацию. Это делается из-за того, что глаз более чувствителен к низким частотам, чем к высоким. Т.о. можно удалить с очень не большим визуальным убытком высокие частоты. Это выполняется посредством деления амплитуд высокочастотных составляющих на большие величины, чем величины на которые делятся более низкочастотные составляющие. Т.о. квантование - это просто деление рабочей матрицы на матрицу квантования поэлементно. Для каждой компоненты (Y, U и V), в общем случае, задается своя матрица квантования q[u,v] (далее МК).

В стандарт JPEG включены рекомендованные МК, построенные опытным путем. В качестве примера приведем следующие матрицы квантования:

Матрица квантования яркостной компоненты Y q(u, v):

1611101624405161
1212141926586055
1413162440576956
1417222951878062
182237566810910377
243555648110411392
49647887103121120101
7292959811210010399

Матрица квантования цветоразностных компонент Y q(u,v):

1718244799999999
1821266699999999
2426569999999999
4766999999999999
9999999999999999
9999999999999999
9999999999999999
9999999999999999

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

Матрицы для большего или меньшего коэффициентов сжатия получают путем умножения исходной матрицы на некоторое число Q-factor.

При декодировании на приемной стороне коэффициенты матрицы ДКП умножаются на элементы матрицы квантования, что восстанавливает верные значения коэффициентов, но с ошибкой округления.

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

Шаг 5. Зигзаг-сканирование.

Массив коэффициентов, извлекаемых из матрицы ДКП, содержит некоторое количество нулевых значений. Для того, чтобы способствовать объединению нулевых элементов в группы, используется зигзагообразное сканирование матрицы, начиная с левого верхнего угла, т.е. берем элементы с индексами (0,0), (0,1), (1,0), (2,0)...

Таким образом, в начале вектора мы получаем коэффициенты матрицы, соответствующие низким частотам, а в конце— высоким, большая часть которых имеет нулевое значение.

Шаг 6. Групповое кодирование (RLE)

Свертываем вектор с помощью алгоритма группового кодирования (RLE - Run Length Encoding). При этом получаем пары типа (пропустить, число), где “пропустить” является счетчиком пропускаемых нулей, а “число”— значение, которое необходимо поставить в следующую ячейку. Так, вектор 42 3 0 0 0 -2 0 0 0 0 1 0 0 0 0 0 . будет свернут в пары (0,42) (0,3) (3,-2) (4,1) (ЕОВ).
(ЕОВ) –символ "конец блока"

Зигзаг-сканирование позволяет сгруппировать самый большой массив нулевых коэффициентов, обычно располагающийся в правой нижней части блока матрицы коэффициентов. Символ ЕОВ (конец блока) заменяет этот массив нулей.

Шаг 7. Кодирование по Хаффману

Свертываем получившиеся пары кодированием по Хаффману с фиксированной таблицей. Малые серии нулей и малые величины ненулевых коэффициентов более вероятны. поэтому им ставятся в соответствие короткие кодовые слова. Символ ЕОВ кодируется самой короткой кодовой комбинацией.

Шестой и седьмой шаги представляют собой энтропийное кодирование. Процесс восстановления изображения в алгоритме JPEG полностью симметричен. Метод позволяет сжимать некоторые изображения в 10-15 раз без серьезных потерь.

Вверх    На главную


К следующей главе К оглавлению К предыдущей главе
Hosted by uCoz