JPEG 需要给所有可能的 Run/Size 进行 Huffman 编码吗

2022-04-07 15:03:10 +08:00
 mikewang

前情概要(/t/835906):
  本科毕设,用 Java 从零开始写一个 JPEG 编码器,v 友们的回答使我受益匪浅。


目前转换 YCC 、DCT 、量化已经完成,用 ISO/IEC 10918-1:1993 中 K.3 推荐的 Huffman 表,可以完美运行。
然而,用固定的 Huffman 表压缩效果不一定是最好的,所以我打算根据单个图片本身生成一个新的表。

单个图片中,并不是所有 Run/Size 值都用得到,所以我只打算给用到的值分配 Huffman 编码。
(虽是变长编码,由于 JPEG 限制码长不得超过 16bit ,分配过多会导致权重大的值码长增加)

解码测试结果:

  1. macOS 预览(错误:它可能已损坏,或者可能使用了“预览”无法识别的文件格式。)
  2. libjpeg (错误:Bogus Huffman table definition )
  3. ffmpeg (成功,使用 ffplay 图片可以正常显示)

疑问:

  1. 可不可以,对没有出现的值,不分配 Huffman 编码;
  2. 如果可以不分配编码,是不是 libjpeg 解码器的 bug ;
    (如果 libjpeg 没问题,就是我的 bug )

和 libjpeg 比,我这个只是一个小玩具。但是本着敢于质疑的精神,提出了这个问题,希望有懂 JPEG 的大神解惑,非常感谢!

1017 次点击
所在节点    算法
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/845486

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX