Читать в оригинале

<< ПредыдущаяОглавлениеСледующая >>


3.7. JPEG

JPEG является очень изощренным методом сжатия изображений с потерей и без потери информации. Он применим как к цветным, так и к полутоновым изображениям (но не к мультфильмам и анимациям). Этот алгоритм не очень хорошо сжимает двухуровневые черно-белые образы, но он прекрасно обрабатывает изображения с непрерывными тонами, в которых близкие пикселы обычно имеют схожие цвета. Важным достоинством метода JPEG является большое количество настраиваемых параметров, которые пользователь может выбирать по своему усмотрению, в частности, он может регулировать процент теряемой информации, а, значит, и коэффициент сжатия, в широком диапазоне. Обычно глаз не в состоянии заметить какого-либо ущерба даже при сжатии этим методом в 10 или 20 раз. Имеется две основные моды: с потерей (называемая также базелиной) и без потерь информации (которая не слишком эффективна и обычно дает фактор сжатия около 2). Большинство приложений прежде всего используют моду с потерей данных. Эта мода также содержит прогрессирующее и иерархическое кодирование.

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

JPEG был разработан как метод сжатия непрерывно-тоновых образов. Основные цели метода JPEG состоят в следующем:

1. Высокий коэффициент сжатия, особенно для изображений, качество которых расценивается как хорошее или отличное.

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

3. Хорошие результаты для любых типов непрерывно-тоновых изображений независимо от их разрешения, пространства цветов, размера пикселов или других свойств.

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

5. Несколько мод операций: (а) Последовательная мода: все цветные компоненты сжимаются в виде простого сканирования слева неправо и сверху вниз; (b) Прогрессирующая мода: изображение сжимается в виде нескольких блоков (называемых «сканами»), позволяющими делать декомпрессию и видеть сначала грубые, а потом все более четкие детали изображения; (с) Мода без потерь информации (нужная на случай, если пользователь желает сохранить пикселы без изменений; при этом приходится расплачиваться низкой степенью сжатия); и (d) Иерархическая мода, когда изображение сжимается со множеством разрешений, позволяющая создавать блоки низкого разрешения, которые можно наблюдать перед блоками высокого разрешения.

Сокращение JPEG произведено от Joint Photographic Experts Group (объединенная группа по фотографии). Проект JPEG был инициирован совместно комитетом CCITT и ISO (the International Standard Organization, международная организация по стандартам). Он начался в июне 1987 года, а первый черновой алгоритм JPEG был разработан в 1991 году. Стандарт JPEG доказал свою эффективность и стал широко применяться для сжатия изображений, особенно во всемирной паутине.

Основные шаги сжатия метода JPEG, которые будут подробно описываться в следующих параграфах, состоят в следующем.

1. Цветное изображение преобразуется из RGB в представление светимость/цветность (§ 3.7.1; для полутоновых черно-белых изображений этот шаг опускается). Глаз чувствителен к малым изменениям яркости пикселов, но не цветности, поэтому из компоненты цветности можно удалить значительную долю информации для достижения высокого сжатия без заметного визуального ухудшения качества образа. Этот шаг не является обязательным, но он очень важен, так как остальная часть алгоритма будет независимо работать с каждым цветным компонентом. Без преобразования пространства цветов из компонентов RGB нельзя удалить существенную часть информации, что не позволяет сделать сильное сжатие.

178.jpg

Рис. 3.48. 2h2v и 2h1v укрупнение пикселов.

2. Цветное изображение разбивается на крупные пикселы (этот шаг делается, если необходимо иерархическое сжатие; он всегда опускается для полутоновых изображений). Эта операция не делается для компоненты яркости. Укрупнение пикселов (рис. 3.48) делается или в соотношении 2:1 по горизонтали и вертикали (так называемое укрупнение 2h2v или «4:1:1» ) или в пропорциях 2:1 по горизонтали и 1:1 по вертикали (укрупнение 2h1v или «4:2:2»). Поскольку это делается для двух компонентов из трех, 2h2v сокращает изображение до  его размера, a 2h1v до  его размера. Компонента светимости не затрагивается, поэтому не происходит заметной потери качества изображения.

3. Пикселы каждой цветной компоненты собираются в блоки 8x8, которые называются единицами данных. Если число строк или столбцов изображения не кратно 8, то самая нижняя строка и самый правый столбец повторяются нужное число раз. Если мода с чередованием выключена, то кодер сначала работает со всеми единицами данных первой цветной компоненты, затем второй компоненты, а потом третьей компоненты. Если мода с чередованием включены, то кодер обрабатывает три самых верхних левых единицы данных трех компонентов (#1), затем три единицы данных (#2) справа от них и так далее.

4. Затем применяется дискретное косинус-преобразование (DCT, § 3.5.3) к каждой единице данных, в результате чего получаются блоки 8x8 частот единиц данных (§ 3.7.2). Они содержат среднее значение пикселов единиц данных и следующие поправки для высоких частот. Все это приготавливает данные для основного шага выбрасывания части информации. Поскольку DOT использует трансцендентную функцию косинус, на этом шаге происходит незначительное изменение информации из-за ограниченности точности машинных вычислений. Это означает, что даже без основного шага потери данных (шаг 5 далее), происходит небольшое, крайне слабое искажение изображения.

5. Каждая из 64 компонент частот единиц данных делится на специальное число, называемое коэффициентами квантования (QC), которая округляется до целого (§ 3.7.4). Здесь информация невосполнимо теряется. Большие коэффициенты QC вызывают большую потерю, поэтому высокочастотные компоненты, обычно, имеют большие QС. Все 64 коэффициента QC являются изменяемыми параметрами, которые, в принципе, пользователь может регулировать самостоятельно. Однако большинство приложений используют таблицу QC, рекомендуемую стандартом JPEG для компонентов светимости и цветности (табл. 3.50).

6. Все 64 квантованных частотных коэффициента (теперь это целые числа) каждой единицы данных кодируются с помощью комбинации RLE и метода Хаффмана (§ 3.7.5). Вместо кодирования Хаффмана может также применяться вариант арифметического кодирования, известный как кодер QM [Salomon 2000].

7. На последнем шаге добавляется заголовок из использованных параметров JPEG и результат выводится в сжатый файл. Сжатый файл может быть представлен в трех разных форматах: (1) формат обмена, когда файл содержит сжатый образ и все необходимые декодеру таблицы (в основном это таблицы квантования и коды Хаффмана), (2) сокращенный формат для сжатого изображения, где файл может не содержать всех таблиц, (3) сокращенный формат для таблиц, когда файл содержит только таблицы спецификаций без сжатых данных. Второй формат применяется, если при сжатии некоторые параметры и таблицы использовались по умолчанию, поэтому декодер их знает. Третий формат бывает полезен, если сжимается много однотипных изображений с помощью одних и тех же параметров. Если необходимо раскрыть эти изображения, то декодеру сначала направляется файл со спецификациями.

Декодер JPEG совершает обратные действия. (Значит, JPEG является симметричным методом сжатия.)

Прогрессирующая мода является опционной для JPEG. В этой моде высокочастотные коэффициенты DCT записываются в сжатый файл блоками, называемыми «сканами». Каждый прочитанный декодером скан дает возможность подправить и уточнить картинку. Идея заключается в том, что несколько первых сканов используются для быстрого показа изображения низкого качества. Далее происходит или декодирование следующих сканов, или отказ от дальнейшего декодирования. Плата за это заключается в том, что кодер должен хранить в буфере все коэффициенты всех единиц данных до того, как их послать в скан (так как они посылаются в скан в обратном порядке, а не в порядке их генерации, см. 176). Кроме того приходится делать весь процесс декодирования для каждого скана, что замедляет прогрессирующее декодирование.

На рис. 3.49а показан пример изображения с разрешением 1024х512. Это изображение разделено на 128х64=8192 единиц данных, каждая из которых преобразована с помощью DCT в блок из 64 чисел по 8 бит. На рис 3.49b изображен параллелепипед, длина которого равна 8192 единицам данных, высота равна 64 коэффициентам DCT (коэффициент DC расположен наверху с номером 0), а ширина равна 8 битам каждого коэффициента.

После представления всех единиц данных в буфере памяти, кодер записывает их в сжатый файл одним из двух способов: с помощью отбора спектра или методом последовательных приближений (рис. 3.49c,d). В обоих случаях первый скан состоит из коэффициентов DC.

181.jpg

Рис. 3.49. Сканы в прогрессирующей моде JPEG.

Если делается отбор спектра, то каждый следующий скан состоит из нескольких последовательных коэффициентов (полосы) АС. При выборе метода последовательных приближений, второй скан состоит из 4 самых значимых битов всех коэффициентов АС, а каждый следующий скан, имеющий номер от 3 до 6, добавляет по одному значащему биту (от третьего до нулевого).

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

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

Мода без потери данных в JPEG (§ 3.7.6) вычисляет «прогнозируемые» значения всех пикселов, берет разность между пикселом и его «прогнозом» для относительного кодирования. Кодирование производится как в шаге 5 методом Хаффмана или с помощью арифметического кодирования. Прогнозируемые величины вычисляются с использованием значений пикселов выше и (лева от текущего (тех, которые уже закодированы). В следующих параграфах все шаги алгоритма будут разбираться более подробно.

Если есть сомнения, то прогнозируйте сохранение текущей тенденции.
- Максим Меркин

 



<< ПредыдущаяОглавлениеСледующая >>