从零开始写一个 JPEG 编码器需要学习哪些知识?

2022-02-23 13:57:02 +08:00
 mikewang

双非软件工程专业,毕业设计本想写一个 Huffman 编码器,简单又好水论文。结果提交给导师时,导师嫌我题太简单,把我的毕设题改成了 JPEG 编码器,然后直接提交系统了。

现在我是没接触过图像编码或者处理(学校软件工程没开相关的课),就得从零开始学习,请问学些什么开始比较容易入手?

2753 次点击
所在节点    Java
17 条回复
misaka19000
2022-02-23 13:59:37 +08:00
先把 JPEG 协议读一下?
3dwelcome
2022-02-23 14:01:27 +08:00
JPEG 编码需要转换到频域操作,完全没学过,从头开始还是挺繁琐的,概念和细节很多。

你不如和导师建议,把 JPEG 改成 PNG 编码器,反正都是邻居。

PNG 也就是 Huffman 套个马甲,那个简单多了。
westoy
2022-02-23 14:01:32 +08:00
我要没记错,jpg 就是基于 huffman 编码的........
krixaar
2022-02-23 14:03:03 +08:00
前几天 ytb 莫名其妙的算法刚推给我一个 jpeg 科普: <amp-youtube data-videoid="Kv1Hiv3ox8I" layout="responsive" width="480" height="270"></amp-youtube>看完感觉好像确实懂了一点
duke807
2022-02-23 14:05:09 +08:00
@krixaar
+1 ,我也收到這個推送,大概看了一下,還要抽時間再仔細看一下算法那一段
jamesfreeman
2022-02-23 14:05:52 +08:00
jpeg 的原理上是不复杂的,看懂 DCT (离散余弦变换)即可。可以参考: <amp-youtube data-videoid="Q2aEzeMDHMA" layout="responsive" width="480" height="270"></amp-youtube>更数学一点的话,可以看大名鼎鼎的 Gilbert Strang 的线性代数中的这一课: <amp-youtube data-videoid="0h43aV4aH7I" layout="responsive" width="480" height="270"></amp-youtube>
thedrwu
2022-02-23 14:16:27 +08:00
学个 DCT 就够了
mikewang
2022-02-23 14:18:24 +08:00
#2 @3dwelcome 感谢建议,如果 JPEG 确实不好做的话,我去再去找导师想办法。因为毕设题提交系统就不太好改了...有点尴尬(导师说,题目小改一下,JPEG 有什么难的 啊这)

#3 @krixaar 感谢!我去看一看

#6 @jamesfreeman 谢谢资料,学习学习

#7 @thedrwu 感谢指路
coderluan
2022-02-23 14:25:31 +08:00
直接改 libjpeg 或者上 github 找个就行了,改下文件结构函数名之类的,没必要自己写,本科毕设并没有什么实际价值,让导师面子上过的去就行了,怎么省事怎么来就行。
mikewang
2022-02-23 14:27:29 +08:00
#9 @coderluan 哈哈哈真实,是这样的,不过至少得学点东西,答辩也有得讲,不然太假了
est
2022-02-23 15:12:56 +08:00
@westoy JPEG 其实按标准除了 Huffman table 还得支持 arithmetic coding 。但是这玩意当年 JPEG 和 IBM 有专利卡着,所以 netscape 和微软等厂家就不支持。结果流行的 jpeg 容器都仅支持 Huffman 了。


jpeg 这玩意麻烦之处还在于可以搞多个 pass 。我是不想碰。
booboo
2022-02-23 16:31:25 +08:00
编解码的核心就那点东西,其他罗罗嗦嗦的规格慢慢读标准就可以。至于本科论文,搞个开源库研究清楚转换一下应该也可以过得去
AyaseEri
2022-02-23 16:33:31 +08:00
huffman 那都是数据压缩这一步了,前面还有各种滤波去除人眼不敏感的信息
murmur
2022-02-23 16:52:40 +08:00
jpeg 编码开源的太多了,出成果完全不是问题,你现在就是学习理论知识完善论文

本科就不求创新了,这个东西的难点在于,你咋提现工作量啊,我不认为现在一般本科生有写出无 bug jpeg 编解码的能力

工程和理论差太多了
mikewang
2022-02-23 17:03:48 +08:00
#14 @murmur 其实导师要求有个成果,然后把毕业设计所需要的材料论文等都写好就行。而且也比较隐晦的提示了,如果真写不出来,调库或者引用开源代码都是可以的。其实也就是为了毕业。
当然,我还是想学点东西的,工作量估计大多还是在论文上吧。
bitdepth
2022-02-24 10:14:55 +08:00
教你最簡單的,用硬體加速器。Hantro H1/G1 的 JPEG encoder/decoder 在好多設備上有,暫存器也是半公開的。
基本上就填寫一個 JPEG header 就完工了,而且有可以看起來很複雜,都用硬體實現了
mikewang
2022-02-24 14:31:41 +08:00
#16 @bitdepth 哈哈哈哈 确实能行 不过这样我论文就没东西写了(作为备用手段记下来了)

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

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

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

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

© 2021 V2EX