JPEG中多通道的熵编码数据格式

时间:2017-03-03 16:41:43

标签: jpeg file-format

我正在尝试解码JPEG文件以获得它的乐趣,到目前为止,我已经设法获得了大部分重要数据(量化表,霍夫曼表,图像信息)。但是我被困在SOS标记之后的熵编码部分。这里有一个类似的问题,我看过Parsing JPEG file format: Format of entropy-coded segments (ECS)?,我知道SOS标题后面的字节是JPEG数据本身。

我理解SOS标题的格式,它就像这样

FF DA // SOS header
00 0A // Header length
03 // 3 channels
01 00 02 11 03 11 // channel 1 QT 0 HT 0, channel 2&3 QT 1 HT 1
00 3F 00 // Other important stuff
XX XX XX XX XX XX XX ... // Huffman-compressed MCU raw data
...
FF D9 // EOI

现在我不太了解的是霍夫曼压缩的MCU原始数据部分。首先,我很困惑为什么有两个霍夫曼表。其次,如何从多个渠道获取数据?它是Y Cb Cr的顺序吗?或YYYY ... YYY CbCb .... CbCb CrCr ... CrCr?

我查看了一些JPEG解码器的源代码,但它们真的很难读。我不需要这个效率,我只是希望能够最终重新创建图像。

1 个答案:

答案 0 :(得分:0)

压缩数据的格式很复杂,取决于SOF市场的类型。

可以有任意数量的霍夫曼表。通常它是两个(对于Y而另一个对于Cb和Cr)或3(对于每个组件)。

根据扫描结构,扫描可以包含1个组件或所有组件(交错扫描)。