JPEG 及MJPEG开发笔记

这篇博客详细记录了JPEG和MJPEG的开发过程,从图像开始标记SOI到图像结束EOI,涵盖JFIF应用数据块、量化表、霍夫曼表等关键组件,深入解析了JPEG图像的数据结构和压缩原理。
摘要由CSDN通过智能技术生成
   这几天,看完了jpeg的结构,遂把一些主要内容总结如下:
-------------------------------------------------------------------------------------
                                     JPEG
    早期的照片采用原始的RGB和YUV等格式,这些格式有个不好的地方,就是照片太大,而jpeg则根据人体视觉的特点采用了YCbCr格式,大大压缩了照片的大小,但效果能却相当于没有失真。
    JPEG的编,解码过程如下:
编码,
|源图像|---〉|正离散余弦变换|-->|量化|--〉|编码(常用霍夫曼编码)|--〉|JPEG图像|
                (FDCT)    (自建量化表)      (自建编码表)

解码,

|JPEG图像|--〉|解码|--〉|逆量化|------〉|反离散余弦变换|--〉|原图像|
       (使用编码时对应的编码表,量化表)    (IDCT)

    其中,离散余弦变换是核心,正离散余弦变换(FDCT)可看成谐波分析仪,反离散余弦变换(IDCT)可看成谐波合成仪;图像失真来源于量化;霍夫曼编码主要是实现无损压缩,大意是,将出现概率大的信息,赋以短字长的码,而对于出现概率小的信息,赋以长字长的码,这样得到的编码结果将是最小的。不过由于会有相同概率的符号存在,所以编码不唯一。


1. 色彩模型
    JPEG 的图片使用的是 YCrCb 颜色模型, 而不是计算机上最常用的 RGB. 关于色
彩模型, 这里不多阐述. 只是说明, YCrCb 模型更适合图形压缩. 因为人眼对图片上
的亮度 Y 的变化远比色度 C 的变化敏感. 我们完全可以每个点保存一个 8bit 的亮
度值, 每 2x2 个点保存一个 Cr Cb 值, 而图象在肉眼中的感觉不会起太大的变化.
所以, 原来用 RGB 模型, 4 个点需要 4x3=12 字节. 而现在仅需要 4+2=6 字节; 平
均每个点占 12bit. 当然 JPEG 格式里允许每个点的 C 值都记录下来; 不过 MPEG 里
都是按 12bit 一个点来存放的, 我们简写为 YUV12.
[R G B] -> [Y Cb Cr] 转换
-------------------------
(R,G,B 都是 8bit unsigned)
        | Y  |     |  0.299       0.587       0.114 |   | R |     | 0 |
        | Cb |  =  |- 0.1687    - 0.3313      0.5   | * | G |   + |128|
        | Cr |     |  0.5       - 0.4187    - 0.0813|   | B |     |128|
Y = 0.299*R + 0.587*G + 0.1
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值