Разбор формата файла JPEG: Формат сегментов с энтропийным кодированием (ECS)? - PullRequest
7 голосов
/ 18 марта 2010

Мне трудно понять спецификацию ITU-T T.81 для формата файлов JPEG. Надеемся, что кто-то еще здесь попытался проанализировать файлы JPEG и / или знает о деталях этого формата файла.

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

Кто-нибудь может указать мне правильное направление?

К вашему сведению: спецификация формата файла JPEG здесь .

1 Ответ

5 голосов
/ 18 марта 2010

Когда стандарт говорит о ECS, он не относится к нему как к типу сегмента, как SOS, с заголовком и компонентом размера; это буквально необработанный битовый поток, сжатый Хаффманом, представляющий MCU, которые составляют данные изображения. Он дополняется для заполнения целого числа байтов и может дополнительно чередоваться с заголовками RST (формально заголовки RST отделены от ECS).

Когда стандарт гласит ECS 0 , это означает 0-й (первый) запуск ECS, а не конкретный тип ECS, например, как SOF0 / SOF1 / SOF2 / и т. Д. Являются различными типами.

Пример базового DCT:

FF DA // SOS header
00 08 // 8 bytes
01 // 1 channel
01 00 // channel 1 QT 0 HT 0
00 3F 00 // start/end spectral selector, successive approximation bit high/low
12 34 56 78 ... // Huffman-compressed MCU raw data
 (sequence of Fuffman codes looked-up in AC/DC Huffman tables)

FF D9 // EOI

Удобной бесплатной программой для объяснения структуры JFIF является JPEGsnoop (http://www.impulseadventure.com/photo/jpeg-snoop.html). В меню есть опция «Полное декодирование», которая показывает необработанный битовый поток Хаффмана, как он отображается на символы Хаффмана, деквантован и затем сопоставлен с компонентами DCT.

...