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

1.编解码目标

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

2.编码过程

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

2.1.采样。

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

2.1.分块(block)

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

2.2.零偏置(LevelOffset)

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

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

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

变换后可以看到:变换前的8x8个数据值,大小都很接近;变换后,能量集中于左上角,右下角的较小。左上角——直流分量值的绝对值一般变成了最大的值。
    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)进行编码。

8x8的数据块,除了第一个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为无损编码。

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

  1. 【STM32H7教程】第57章 STM32H7硬件JPEG编解码基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第57章       STM32H7硬件JPEG编解码基础知识 ...

  2. 转载:AAC编解码概述

    转自:http://www.cnblogs.com/gaozehua/archive/2012/05/03/2479960.html 编码概述 其整体AAC 编解码系统,如图所示,其编码流程概述如下: ...

  3. CUDA 实现JPEG图像解码为RGB数据

    了解JPEG数据格式的人应该easy想到.其对图像以8*8像素块大小进行切割压缩的方法非常好用并行处理的思想来实现.而其实英伟达的CUDA自v5.5開始也提供了JPEG编解码的演示样例.该演示样例存储 ...

  4. 视音频编解码学习工程:JPEG分析器

    =====================================================视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习工 ...

  5. JPEG文件编/解码详解

    JPEG文件编/解码详解(1) JPEG(Joint Photographic Experts Group)是联合图像专家小组的英文缩写.它由国际电话与电报咨询委员会CCITT(The Interna ...

  6. [总结]FFMPEG视音频编解码零基础学习方法--转

    ffmpeg编解码学习   目录(?)[-] ffmpeg程序的使用ffmpegexeffplayexeffprobeexe 1 ffmpegexe 2 ffplayexe 3 ffprobeexe ...

  7. FFMPEG视音频编解码零基础学习方法-b

    感谢大神分享,虽然现在还看不懂,留着大家一起看啦 PS:有不少人不清楚“FFmpeg”应该怎么读.它读作“ef ef em peg” 0. 背景知识 本章主要介绍一下FFMPEG都用在了哪里(在这里仅 ...

  8. [总结]FFMPEG视音频编解码零基础学习方法

    在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...

  9. [转载] FFMPEG视音频编解码零基础学习方法

    在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...

随机推荐

  1. SuperSlide轮播切换

    <!-- 点击切换引入 --> <script type="text/javascript" src="js/jquery.js">&l ...

  2. 牛客网PAT练兵场-在霍格沃茨找零钱

    题目地址:https://www.nowcoder.com/pat/6/problem/4063 题意:按照题目的进制计算即可 /** * *作者:Ycute *时间:2019-11-14-21.45 ...

  3. Kafka工作流程

    Kafka生产过程分析 1 写入方式 producer采用推(push)模式将消息发布到broker,每条消息都被追加(append)到分区(patition)中,属于顺序写磁盘(顺序写磁盘效率比随机 ...

  4. 起源seo为何要做seo培训

    http://www.wocaoseo.com/thread-91-1-1.html 焦大,在2010年末左右开始接触seo,2011年3月份正式开始做seo,到如今做seo已经3年了,实话说我没有其 ...

  5. 01.图文理解RDB和AOF两种持久化机制

    一.RDB和AOF两种持久化机制的介绍 RDB:对redis中的数据执行周期性的持久化,每隔一个时刻生成一个RDB文件,这个RDB文件包含这个时刻所有的数据. AOF:记录每条写入命令,以append ...

  6. 使用JS制作小游戏贪吃蛇

    先看效果图: 过程如下: 1.首先创建一张画布地图<div class="map"> </div>: 2.创建食物的自调用函数 (function (){ ...

  7. Android开发之java代码中获取当前系统的时间工具类

    /** * 获取当前时间 * * @return */ public String getTime() { Date date = new Date();// 创建一个时间对象,获取到当前的时间 Si ...

  8. IntPtr to bytes

    byte[] managedArray = new byte[size]; Marshal.Copy(pnt, managedArray, 0, size);

  9. 18 vue 动态路由传参

    params形式 http://192.168.1.100:8080/#/infoDetailed/231 //定义路由{ path: "/infoDetailed/:newsId" ...

  10. webapi上传图片的两种方式

    /// <summary>        /// App上传图片        /// </summary>        /// <returns>返回上传图片的 ...