V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mikewang
V2EX  ›  Java

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

  •  
  •   mikewang ·
    MikeWang000000 · 2022-02-23 13:57:02 +08:00 · 2735 次点击
    这是一个创建于 1011 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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


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

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

    工程和理论差太多了
    mikewang
        15
    mikewang  
    OP
       2022-02-23 17:03:48 +08:00
    #14 @murmur 其实导师要求有个成果,然后把毕业设计所需要的材料论文等都写好就行。而且也比较隐晦的提示了,如果真写不出来,调库或者引用开源代码都是可以的。其实也就是为了毕业。
    当然,我还是想学点东西的,工作量估计大多还是在论文上吧。
    bitdepth
        16
    bitdepth  
       2022-02-24 10:14:55 +08:00   ❤️ 1
    教你最簡單的,用硬體加速器。Hantro H1/G1 的 JPEG encoder/decoder 在好多設備上有,暫存器也是半公開的。
    基本上就填寫一個 JPEG header 就完工了,而且有可以看起來很複雜,都用硬體實現了
    mikewang
        17
    mikewang  
    OP
       2022-02-24 14:31:41 +08:00
    #16 @bitdepth 哈哈哈哈 确实能行 不过这样我论文就没东西写了(作为备用手段记下来了)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2691 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 12:13 · PVG 20:13 · LAX 04:13 · JFK 07:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.