从零开始写一个 JPEG 编码器需要学习哪些知识? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mikewang
V2EX    Java

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

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

    双非软件工程专业,毕业设计本想写一个 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     Solana     1030 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 18:14 PVG 02:14 LAX 10:14 JFK 13:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86