CodeNet / Приложения / Алгоритмы / Сжатие и кодирование / JPG
CodeNet / Приложения / Графика / Форматы файлов / JPG
CodeNet / Остальное / Форматы файлов / JPG
JPG
Таблица Хаффмана, сохраненная в файле JPG
Здесь - как JPEG содержит дерево Хаффмана: вместо дерева, он определяет таблицу в файле JPG после DHT (Определение Таблицы Хаффмана) маркера. ПРИМЕЧАНИЕ: длина кодов Хаффмана ограничивается 16 битами.
В основном есть 2 типа таблиц Хаффмана в файле JPG: одна для DC и одна для AC (действительно есть 4 таблицы Хаффмана: 2 для DC, AC для яркости и 2 для DC, AC цветоразности)
Они сохраняются в файле JPG в том же формате, который состоит из:
- 16 байтов:
байт i содержитчисло кодов Хаффмана длины i (длинав битах - i изменяется от 1 до 16)
- Таблица с длиной (в байтах) =
Которая содержит в позиции [k][j] (k в 1..16, j в 0..(число_кодов_с_длиной_k-1)) БАЙТОВУЮ величину, связанную с j-ым кодом Хаффмана длины k. (Для фиксированной длины k, величины сохранены, отсортированными по величине кода Хаффмана)
В этой таблице Вы можете найти фактический код Хаффмана, связанный с конкретным байтом.
Например: (Примечание: количество кодов для данной длины - здесь для этого конкретного примера, чтобы считать это, они могут иметь любые другие величины)
ДОПУСТИМ что, для длины
Для длины 1 мы имеем число_кодов[1]=0, мы пропускаем эту длину Для длины 2 у нас есть 2 кода 00 01 Для длины 3 у нас есть 3 кода 100 101 110 Для длины 4 у нас есть 1 код 1110 Для длины 5 у нас есть 1 код 11110 Для длины 6 у нас есть 1 код 111110 Для длины 7 у нас есть 0 кодов - пропускаем ( Если у нас был 1 код для длины 7, мы должны иметь 1111110) Для длины 8 у нас есть 1 код 11111100 ( Вы видите, что код все еще перемещается на оставленное, хотя мы пропустили кодовую величину для 7) ..... Для длины 16,... (та же вещь)
Я сообщил Вам, что в таблице Хаффмана в файле JPG загружены БАЙТОВЫЕ величины для данного кода.
Для этого конкретного примера кодов Хаффмана:
Допустим, что в таблице Хаффмана в файле JPG на диске мы имеем (после тех 16 байтов, которые содержат число кодов Хаффмана с данной длиной):
45 57 29 17 23 25 34 28
Эти величины соответствуют конкретным длинам, которые я Вам дал перед этим, в кодах Хаффмана это будет:
нет величины для кода длины 1 для кодов длины 2 : у нас есть 45 57 для кодов длины 3 : 3 величины (например : 29,17,23) для кодов длины 4 : только 1 величина (например: 25) для кодов длины 5 : 1 величина (например: 34) ... для кода длины 7, снова никакая величина, переходим к коду с длиной 8 для кода длины 8 : 1 величина 28
ВАЖНОЕ примечание:
Для кодов длины 2: величина 45 соответствует коду 00 57 коду 01 Для кодов длины 3: величина 29 соответствует коду 100 17 ---||--- 101 23 ---||--- 110 И Т.П...
(Я сообщил Вам, что для данной длины байтовые величины хранятся в порядке увеличения величины кода Хаффмана.)
Четыре таблицы Хаффмана соответствуют DC и AC таблицам яркости, и DC и AC таблицам для цветоразности, даются в приложении JPEG стандарта как предложение для шифратора. Стандарт сообщает, что эти таблицы протестированы с хорошими результатами сжатия для многих изображений и рекомендует их, но шифратор может использовать любую другую таблицу Хаффмана. Много шифраторов JPG используют эти таблицы. Некоторые предлагаются на Ваш выбор: оптимизация энтропии - если возможно, используйте таблицы Хаффмана, оптимизированные для этого конкретного изображения.