Каковы основные шаги сжатия метода JPEG

Основные шаги сжатия метода JPEG, состоят в следующем.

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

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

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

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

5. Каждая из 64 компонент частот единиц данных делится на специальное число, называемое коэффициентами квантования (QC), которая округляется до целого.

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

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

7. На последнем шаге добавляется заголовок из использованных параметров JPEG и результат выводится в сжатый файл.

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

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

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

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

-----------------------------