9

JPEG2000 на пальцах. Часть 3. Схема сжатия и итоги

Доброго времени суток, друзья!


Представляю Вам третью и последнюю часть статей по JPEG2000.

Предыдущие части:

1) Вейвлеты

2) Арифметический кодер


После разбора вейвлетов и арифметического кодера можно посмотреть на схему кодирования и оценить достоинства и недостатки данного формата. Схема кодирования:

JPEG2000 на пальцах. Часть 3. Схема сжатия и итоги JPEG, Jpeg2000, Сжатие, Длиннопост

Сначала во входном изображении выравнивается динамический диапазон, что увеличивает степень сжатия. А затем производится преобразование из цветового пространства RGB в YCbCr (подробнее об этом в статье). Эти операции называются “препроцессингом”.


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

Как было описано в статье про вейвлеты, после ДВП у нас имеется два набора данных, т.е. на выходе объем информации увеличивается в два раза. Поэтому после каждого раунда изображение уменьшается в 2 раза. Раунд — это проход отдельно по столбцам и строкам. После каждого раунда мы имеем 4 части:

1) LL – низкие частоты по строкам и столбцам

2) HL – высокие частоты по строкам и низкие по столбцам

3) LH – низкие частоты по строкам и высокие по столбцам

4) HH – высокие частоты по строкам и столбцам


В следующем раунде будет обрабатываться только область LL (уменьшенная в 2 раза) из предыдущего раунда, так как является наиболее значимой. Об этом подробнее написано в статье про вейвлеты. Раундов может быть до 32-х. Тем не менее, чаще всего их не проводят более 8-ми раз, т.к. вейвлетное преобразование является вычислительно сложным.


Это проиллюстрировано на рисунке ниже:

JPEG2000 на пальцах. Часть 3. Схема сжатия и итоги JPEG, Jpeg2000, Сжатие, Длиннопост

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


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

JPEG2000 на пальцах. Часть 3. Схема сжатия и итоги JPEG, Jpeg2000, Сжатие, Длиннопост

Теперь подведем итоги, действительно ли данный формат лучше, чем JPEG, почему он не “выстрелил” и т.д.


В JPEG2000 поддерживается прозрачность на уровне формата. Для этого используется отдельный альфа-канал. Тем не менее, эффективность сжатия в этом случае будет ниже.


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


Поддержка кодирования тайлов (блоков) разных размеров — это действительно хорошо, если блок одноцветный. Но разбиение на блоки перед сжатием все портит.


Ну и напоследок, скорость кодирования/декодирования в сравнении с JPEG куда ниже, т.к. косинус-преобразование менее затратно, чем вейвлет. Это и было основной причиной непопулярности этого формата.


Не смотря на эти недостатки, JPEG2000 сжимает одни и те же изображения эффективнее, чем JPEG. В среднем, выигрыш 15-20%.



На этом с темой JPEG2000 можно закончить. Надеюсь, что это было познавательно. До скорого!