jpeg编解码概述

Dreaming-in-Gottingen 2020-09-25 原文


jpeg编解码概述

本博文为概览性介绍。后面有空了再分几篇博文分别介绍所用到的技术细节。

1.编解码目标

    编码和解码是个逆过程。jpeg编码的目的在于图形去冗余,进行数据压缩,解码的目的在于还原图像,使能够进行预览。

2.编码过程

   

 

 贴一张网上的图片,但缺少了一些步骤,下面用文字来描述每一个步骤。

    2.1.采样。

        8位采样,像素值的范围锁定在0-255,无符号,都为正数。

    2.1.分块(block)

        补成8×8的block,以应对宽和高不是8的整数倍的情况,方便后续进行8×8的DCT2变换。

    2.2.零偏置(LevelOffset)

        通过减28-1=128,使各个像素值以0为中心分布,变换后的值有的为正,有的为负,在[-128,127]区间分布。

 

    2.2.8×8的二维离散余弦变换(DCT2)。

        DCT变换是最小均方误差条件下的得出的最佳正交变换。可以去相关性,将时域数据变换到频域,将能量集中于低频分量附近。

        变换后可以看到:变换前的8×8个数据值,大小都很接近;变换后,能量集中于左上角,右下角的较小。左上角——直流分量值的绝对值一般变成了最大的值。
    2.4.z字形编码(zigzag scan)。

        由2维变1维,一般后扫描到的值的绝对值小于先扫描的。

    2.3.量化(quantization)。

        将较大的值按一定的倍数进行缩小,而这个缩小倍数视位置不同而不同。(补充:该步骤可以与上一步颠倒)(如果先量化再扫描,可以看到:在量化后,后下角的值大部分都变成接近0的较小的值)

    2.5.差分脉冲编码(DPCM)对直流系数(DC)进行编码。

        相同component分量的每个block的直流分量值,设置为一个差值,为:cur_block_dc_val – last_block_dc_val,DPCM也由此而来,即DC值的差分。
    2.6.行程编码(RLE)对交流系数(AC)进行编码。

        8×8的数据块,除了第一个DC值外,其他63个都是交流值,需要用到RLE编码。

  RLE也称为游程编码,由一对值来表示,例如(m,n),m表示距离下一个非零值的距离,n表示下个值的值大小。例如(0,12)表示紧接着的值是12,而(4,6)表示中间经过4个0后,下个值为6。
    2.7.熵编码(entropy encode)。

        一般使用范式霍夫曼编码(huffman_encode——可变长编码算法中的一种),高概率的字符分配较短的code来表示,低概率的字符分配较长的code来表示。

3.其他补充说明

    采样和量化都是有损编码,而DCT变换、DPCM、RLE、HuffmanEncode为无损编码。

 

发表于
2020-09-25 01:09 
OnlyTime_唯有时光 
阅读(0
评论(0
编辑 
收藏

 

版权声明:本文为Dreaming-in-Gottingen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Dreaming-in-Gottingen/p/13727602.html

jpeg编解码概述的更多相关文章

  1. JPEG解码——(6)IDCT逆离散余弦变换

    JPEG解码——(6)IDCT逆离散余弦变换   本篇是该系列的第六篇,承接上篇IZigZag变换,介绍接下来 […]...

  2. x264编码demo定制修改介绍

    x264编码demo定制修改介绍   x264编码器,提供了两个demo来验证编码功能:一个是大而全的x264 […]...

  3. 缩略图调查——抖音客户端/PC/iphone

    缩略图调查——抖音客户端/PC/iphone 最近对抖音有点上瘾,经常看到这样的视频列表:           […]...

  4. JPEG解码——(4)霍夫曼解码

    JPEG解码——(4)霍夫曼解码 本篇是该系列的第四篇,主要介绍霍夫曼解码相关内容。 承接上篇,文件头解析完毕 […]...

  5. H264裸码流I/P/B帧类型判别

    H264裸码流I/P/B帧类型判别   花了两天时间做了个h264裸流nal类型和frame类型检测的工具,已 […]...

  6. jm8.6编解码器概述

    jm8.6编解码器概述   自己在学习h264的路上,欢迎讨论交流。   前段时间研究JM出品的h264编码器 […]...

随机推荐

  1. 无中介租房搜房工具 V1.0

    无中介租房搜房工具 V1.0 点击下载   充满着无数的机遇与挑战的帝都北京,吸引了五湖四海的有志青年加入了北 […]...

  2. Lua骚操作——三元条件运算符

    本文地址:https://www.cnblogs.com/oberon-zjt0806/p/13337577. […]...

  3. 移动端性能测试概述

      随着移动设备的普及和使用范围越来越广,APP的性能测试变的越来越重要。比起之前的性能测试,APP性能测试有 […]...

  4. 跟着大彬读源码 – Redis 3 – 服务器如何响应客户端请求?(下)

    继续我们上一节的讨论。服务器启动了,客户端也发送命令了。接下来,就要到服务器“表演”的时刻了。 1 服务器处理 […]...

  5. Java实现邮箱验证码

    前言     相比于java实现短信验证码,邮箱验证码就简单了许多,目前只是简单的利用java发送自定义内容至 […]...

  6. Java中的IO与NIO

    前文开了高并发学习的头,文末说了将会选择NIO、RPC相关资料做进一步学习,所以本文开始学习NIO知识。  I […]...

  7. C++ short/int/long/long long 等数据类型大小

    表 1 整型数据类型 数据类型 字节大小 数值范围 short int (短整型) 2 字节 -32 768 […]...

  8. Eclipse如何修改编辑器背景颜色

    1、找到菜单栏中的Window      2、选择Window 下的Preference   3、双击Genr […]...

展开目录

目录导航