请教JPEG编码的一些基本问题

zhangljz 2012-06-03 02:53:33
各位大侠,小弟现在在做JPEG的编解码,项目比较急,搞得一头雾水,基本流程也不太清楚。
1. JPEG里面游程编码是不是只对0进行合并,比如
57,45,0,0,0,0,23 =》(0,6),57 ; (0,6),45 ; (4,5),23
如果是下面这个序列,这样对不对?
57,45,45,0,0,0,0,23 =》(0,6),57 ; (0,6),45 ,(0,6),45 ; (4,5),23

2. 是不是游程编码后的所有数字都做霍夫曼编码,也就是说 (0,6),57 ; (0,6),45 ; (4,5),23 所有的数字都做霍夫曼编码??

3.编码一副图像时是整幅图像共用4个霍夫曼表,还是每个MCU都有各自的4个霍夫曼表? 我打开一个JPEG,发现里面只有4个FFC4,感觉应该是整幅图像共用4个霍夫曼表,但是这也就要求编码器要先把所有点的量化都做完,然后再统计出现频率来做霍夫曼表。请问是这样吗?

就先问这么多,现在连JPEG标准都没找到,有高手能发一个吗,我邮箱是zhangljz@126.com,谢谢
...全文
256 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyl910 2012-06-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
谢谢,还有一个问题是,SOS之后跟的是图像数据,比如一个Y:Cr:Cb=4:2:2的图像,要采样16x16的方块才能组成一个8X8的Cr和Cb,但是会有4个8X8的Y,那在存入的时候是什么顺序呢?Y1,Y2,Y3,Y4,Cr,Cb还是什么,有标志位来明确指定这个顺序吗?
[/Quote]
这就是MCU的作用。

风云的文档说的很详细——
[Quote]12. 采样系数
-----------
下面讲解的都是真彩 JPG 的解码, 灰度 JPG 的解码很简单, 因为图形中只有亮度信
息. 而彩色图形由 (Y, Cr, Cb) 构成, 前面提到过, Y 通常是每点采样一次, 而 Cr,
Cb 一般是 2x2 点采样一次, 当然也有的 JPG 是逐点采样, 或者每两点采样 (横向
两点, 纵向一点) 采样系数均被定义成对比最高采样系数的相对值.

一般情况 (即: Y 逐点采样, Cr Cb 每 2x2 点一次) 下: Y 有最高的采样率, 横向采
样系数HY=2 纵向采样系数 VY=2; Cb 的横向采样系数 HCb=1, 纵向采样系数 VCb=1;
同样 HCr=1, VCr=1

在 Jpeg 里, 8x8 个原始数据, 经过 RLE, Huffman 编码后的一串数据流称为一个
Data Unit (DU) JPG 里按 DU 为单位的编码次序如下:

1) for (counter_y=1;counter_y<=VY;counter_y++)
for (counter_x=1;counter_x<=HY;counter_x++)
{ 对 Y 的 Data Unit 编码 }

2) for (counter_y=1;counter_y<=VCb ;counter_y++)
for (counter_x=1;counter_x<=HCb;counter_x++)
{ 对 Cb 的 Data Unit 编码 }

3) for (counter_y=1;counter_y<=VCr;counter_y++)
for (counter_x=1;counter_x<=HCr;counter_x++)
{ 对 Cr 的 Data Unit 编码 }

按我上面的例子: (HY=2, VY=2 ; HCb=VCb =1, HCr,VCr=1) 就是这样一个次序
YDU,YDU,YDU,YDU,CbDU,CrDU
这些就描述了一块 16x16 的图形. 16x16 = (Hmax*8 x Vmax*8) 这里 Hmax=HY=2
Vmax=VY=2

一个 (Hmax*8,Vmax*8) 的块被称作 MCU (Minimun Coded Unix) 前面例子中一个
MCU = YDU,YDU,YDU,YDU,CbDU,CrDU

如果 HY =1, VY=1
HCb=1, VCb=1
HCr=1, VCr=1
这样 (Hmax=1,Vmax=1), MCU 只有 8x8 大, MCU = YDU,CbDU,CrDU

对于灰度 JPG, MCU 只有一个 DU (MCU = YDU)

JPG 文件里, 图象的每个组成部分的采样系数定义在 SOF0 (FFC0) 标记后

13. 简单说一下 JPG 文件的解码
-------------------------
解码程序先从 JPG 文件中读出采样系数, 这样就知道了 MCU 的大小, 算出整个图象
有几个 MCU. 解码程序再循环逐个对 MCU 解码, 一直到检查到 EOI 标记. 对于每个
MCU, 按正规的次序解出每个 DU, 然后组合, 转换成 (R,G,B) 就 OK 了
[/Quote]
zhangljz 2012-06-05
  • 打赏
  • 举报
回复
谢谢,还有一个问题是,SOS之后跟的是图像数据,比如一个Y:Cr:Cb=4:2:2的图像,要采样16x16的方块才能组成一个8X8的Cr和Cb,但是会有4个8X8的Y,那在存入的时候是什么顺序呢?Y1,Y2,Y3,Y4,Cr,Cb还是什么,有标志位来明确指定这个顺序吗?
zyl910 2012-06-05
  • 打赏
  • 举报
回复
The JPEG Still Picture Compression Standard
http://white.stanford.edu/~brian/psy221/reader/Wallace.JPEG.pdf


JPEG File Interchange Format
http://www.jpeg.org/public/jfif.pdf


风云《JPEG 简易文档》
http://www.codingnow.com/2000/download/jpeg.txt
zyl910 2012-06-05
  • 打赏
  • 举报
回复
1.
对。只对0合并。

2.
对。均做霍夫曼编码。

3.
整幅图像共用霍夫曼表。
SOS(Start Of Scan, FFDA)段中定义了各个通道的霍夫曼表(DC与AC,每通道两个)。
如果有4个霍夫曼表,一般是这样分配的——
  (1): 亮度通道(Y)的DC霍夫曼表;
  (2): 亮度通道(Y)的AC霍夫曼表;
  (3): 色度通道(Cb、Cr)的DC霍夫曼表;
  (4): 色度通道(Cb、Cr)的AC霍夫曼表;
有时也会遇到只有2个霍夫曼表的情况,此时所有通道共用 DC霍夫曼表及AC霍夫曼表。
zhangljz 2012-06-04
  • 打赏
  • 举报
回复
自己顶

4,446

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧