cnc刀柄材料:关于JPEG的解码问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 16:20:09
有一个关于JPEG解码的问题想在这个向大家咨询一下: 我想了解的是:在JPEG图片的0XFFDA数据段后(也就是Start Of Scan段) 接下来的就是一个个扫描行,我的理解就是紧跟着SOS段后的数据就应该是 每一个8*8数据块经过量化 DCT转换以及HUFFMAN编码后的bit流, 我不太清楚的就是若干个bits流是怎么存放的? 并且在一个8*8数据块编码后的bit流中单个数据之间怎么划分 比如:一个8*8数据块编码经过量化 DCT转换,行程编码后为: (0,57);(0,45);(4,23);(1,-30);(0,-16);(2,1)EOB 紧接着经过HUFFMAN编码后的BIT流为: 111000 111001 111000 101101 111111110011001 10111 11111110110 00001 1011 0111 11011 1 1010 那么这个BIT流中的数据是怎么在JPEG图片中存储的,我读取这些数据的时候 有依据什么来分开这些二进制数据(或者说这些二进制数据用什么来隔开的),比如上边二进制数据中的前两个数据,我在读取的时候如何知道是111000和111001,而不是1110和00111001或者其他的样子呢? 还有就是这样若干个BIT流之间用什么来隔开的? 请熟悉这个问题的朋友多多指教!

这个bits的划分,其实就是靠霍夫曼码控制的。之所以用霍夫曼编码,是因为这个编码是唯一的,不可能有重复,如果像你所说的那样,随意划分的话,只能导致错误。
霍夫曼编码中,当你从当前的码流中提取若干比特,程序会查询霍夫曼表中是否有对应的编码,如果有,则会检出一个length值,代表这个编码占用多少bit, 若没有查到,程序会逐一增加后续bit继续查表,直到查到为止。经此而已。
建议你仔细研究研究霍夫曼编码相关论文。

给后来人一些提示:111000和111001根据霍夫曼编码原理查找,每个8*8数据块编码后的bit流
没有分隔标识,且长短不一。可以参考libjpeg开源库代码。

SOS之后就是图像数据,直到文件结束。图像块之间没有标记。

呵呵这个问题台专业了~我只知道一般GIF格式的文件在同质量等比效果中是最好的~~~

这个问题比较复杂,要讲明白jpeg的文件格式,光是知道数据流和jpeg的具体格式还差得很多呢

JPEG文件大体上可以分成以下两个部分:标记码(Tag)加压缩数据。先介绍标记码部分。

标记码部分给出了JPEG图象的所有信息(有点类似于BMP中的头信息,但要复杂的多),如图象的宽、高、Huffman表、量化表等等。标记码有很多,但绝大多数的JPEG文件只包含几种。标记码的结构为:

SOI

DQT

DRI

SOF0

DHT

SOS



EOI

其中,DHT(Define Huffman Table)的结构如下:

标记结构 字节数 意义

0XFF 1

0XC4 1

Lh 2 DHT标记码长度,不包括前两个字节0XFF,0XC4

(Tc,Th) 1

L1 1

L2 1



L16 1

V1 1

V2 1



Vt 1

Tc为高4位,Th为低4位。在基本系统中,Tc为0或1,为0时,指DC所用的Huffman表,为1时,指AC所用的Huffman表。Th表示Huffman表的编号,在基本系统中,其值为0或1。所以,在基本系统中,最多有4个Huffman表,如下所示:

Tc Th Huffman表编号(2×Tc+Th)

0 0

1 1

0 2

1 1 3

Ln表示每个n比特的Huffman码字的个数,n=1~16

不知道你是否明白