JPEG压缩编码共有四大步骤,如下:
1、颜色模式转换及采样
JPEG采用的是YCbCr色彩系统(Y代表亮度,Cb和Cr则代表色度、饱和度)。想要用JPEG基本压缩法处理全彩色图像,得先把RGB颜色模式图像数据,转换为YCbCr颜色模式的数据。通过下列计算公式可完成数据转换。 Y=0.2990R+0.5870G+0.1140B Cb=-0.1687R-0.3313G+0.5000B+128 Cr=0.5000R-0.4187G-0.0813B+128 。其中Y成份的数据是比较重要的,而Cb成份和Cr成份则可以只取部分数据来处理,以增加压缩的比例。JPEG通常有两种采样方式:YUV411和YUV422,它们所代表的意义是Y、Cb和Cr三个成份的数据取样比例。

2、DCT变换
DCT变换的全称是离散余弦变换,是指将一组光强数据转换成频率数据,以便得知强度变化的情形。若对高频的数据做些修饰,再转回原来形式的数据时,显然与原始数据有些差异,但是人类的眼睛却是不容易辨认出来。 压缩时,将原始图像数据分成8*8数据单元矩阵,例如亮度值的第一个矩阵内容如下: JPEG将整个亮度矩阵与色度Cb矩阵,饱和度Cr矩阵,视为一个基本单元称作MCU。每个MCU所包含的矩阵数量不得超过10个。例如,行和列采样的比例皆为4:2:2,则每个MCU将包含四个亮度矩阵,一个色度矩阵及一个饱和度矩阵。 当图像数据分成一个8*8矩阵后,还必须将每个数值减去128,然后一一代入DCT变换公式中,即可达到DCT变换的目的。图像数据值必须减去128,是因为DCT转换公式所接受的数字范围是在-128到+127之间。

3、量化
图像数据转换为频率系数后,还得接受一项量化程序,才能进入编码阶段。量化阶段需要两个8*8矩阵数据,一个是专门处理亮度的频率系数,另一个则是针对色度的频率系数,将频率系数除以量化矩阵的值,取得与商数最近的整数,即完成量化。 当频率系数经过量化后,将频率系数由浮点数转变为整数,这才便于执行最后的编码。不过,经过量化阶段后,所有数据只保留整数近似值,也就再度损失了一些数据内容。

4、编码
Huffman编码无专利权问题,成为JPEG最常用的编码方式,Huffman编码通常是以完整的MCU来进行的。 编码时,每个矩阵数据的DC值与63个AC值,将分别使用不同的Huffman编码表,而亮度与色度也需要不同的Huffman编码表,所以一共需要四个编码表,才能顺利地完成JPEG编码工作。 DC编码 DC是彩采用差值脉冲编码调制的差值编码法,也就是在同一个图像分量中取得每个DC值与前一个DC值的差值来编码。DC采用差值脉冲编码的主要原因是由于在连续色调的图像中,其差值多半比原值小,对差值进行编码所需的位数,会比对原值进行编码所需的位数少许多。例如差值为5,它的二进制表示值为101,如果差值为-5,则先改为正整数5,再将其二进制转换成1的补数即可。所谓1的补数,就是将每个Bit若值为0,便改成1;Bit为1,则变成0。差值5应保留的位数为3,下表即列出差值所应保留的Bit数与差值内容的对照。 在差值前端另外加入一些差值的霍夫曼码值,例如亮度差值为5(101)的位数为3,则霍夫曼码值应该是100,两者连接在一起即为100101。

另外,AC编码 AC编码方式与DC略有不同,在AC编码之前,首先得将63个AC值按Zig-zag排序,再将AC系数转换成中间符号,中间符号表示为RRRR/SSSS,RRRR是指第非零的AC之前,其值为0的AC个数,SSSS是指AC值所需的位数,AC系数的范围与SSSS的对应关系与DC差值Bits数与差值内容对照表相似。 如果连续为0的AC个数大于15,则用15/0来表示连续的16个0,15/0称为ZRL,而(0/0)称为EOB用来表示其后所剩余的AC系数皆等于0,以中间符号值作为索引值,从相应的AC编码表中找出适当的霍夫曼码值,再与AC值相连即可。 例如某一组亮度的中间符为5/3,AC值为4,首先以5/3为索引值,从亮度AC的Huffman编码表中找到1111111110011110霍夫曼码值,于是加上原来100(4)即是用来取[5,4]的Huffman编码1111111110011110100,[5,4]表示AC值为4的前面有5个零。

再为各位附上一张关于色彩的代码图

接下来来说说ASCII 码吧。
ASCII码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。其中:0~31及127是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。32~126是字符(32sp是空格),其中48~57为0到9十个阿拉伯数字。65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。同时还要注意,在标准ASCII中,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。后128个称为扩展ASCII码,目前许多基于x86的系统都支持使用扩展ASCII。扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。

码了这么多字,不知道你们能不能吸收得了,反正慢慢看吧,作为程序猿,总是要了解的。。。。。。

色彩表示与编码之JPEG压缩编码相关推荐

  1. 基于JPEG压缩编码的数据压缩算法的研究与实现(转)

    基于JPEG压缩编码的数据压缩算法的研究与实现(转) 编辑器加载中... JPEG压缩方法由于其较高的压缩比和理想的压缩效果,是目前应用最广泛的图像压缩方法.它采用一种特殊的有损压缩算法,将不易被人眼 ...

  2. 基于JPEG压缩编码的数据压缩算法的研究与实现

      JPEG压缩方法由于其较高的压缩比和理想的压缩效果,是目前应用最广泛的图像压缩方法.它采用一种特殊的有损压缩算法,将不易被人眼察觉 的图像颜色删除,从而能够将图像压缩在很小的储存空间.JPEG压缩 ...

  3. JPEG压缩编码流程

    JPEG压缩编码流程 基于离散余弦变换(DCT)的JPEG压缩编码过程: 1.正向离散余弦变换(FDCT) 2.量化(Quantization) 3. Z字形编码(Zigzag Scan) 4.使用差 ...

  4. 【数字图像处理】编码解码jpeg和png图片(C语言实现)

    摘要:在本篇文章中本人将简单阐述图片编码的原理与实现方法.同时 通过 windows平台下 mingw编译的libjpeg,libpng, zlib 第三方库,然后实现两种图片的编码与解码. (一)写 ...

  5. 最简单的基于FFMPEG的图像编码器(YUV编码为JPEG)

    伴随着毕业论文的完成,这两天终于腾出了空闲,又有时间搞搞FFMPEG的研究了.想着之前一直搞的都是FFMPEG解码方面的工作,很少涉及到FFMPEG编码方面的东西,于是打算研究一下FFMPEG的编码. ...

  6. opus 压缩率_Opus从入门到精通(八)Opus编码基础之压缩编码

    只有在保持信号质量的前提下,设法降低码率及数据量,才能使标准得到应用.而这种降低码率的过程,被称为压缩编码或新源编码. 这节介绍一些基础的压缩编码思想与方法,为后面Opus语音编码做基础准备. 压缩编 ...

  7. 图像压缩编码与JPEG压缩编码标准简介

    在介绍图象的压缩编码之前,先考虑一个问题:为什么要压缩?其实这个问题不用我回答,你也能想得到.因为图象信息的数据量实在是太惊人了.举一个例子就明白了,一张A4(210mm*297mm) 幅面的照片,若 ...

  8. jpeg编码学习笔记

    jpeg编码学习笔记 各种图片格式目的是在网络传输和存储的时候使用更少的字节,即起到压缩的作用.在图片格式解码后,无论图片的格式,图片数据都是像素数组. 本文将尝试通过JPEG这种图片编码格式的学习, ...

  9. matlab图像压缩像素编码,基于DCT的图像压缩编码算法的MATLAB实现

    基于DCT的图像压缩编码算法的MATLAB实现 摘要 随着科学技术的发展,图像压缩技术越来越引起人们的关注.为此从众多的图像压缩编码标准中选取了基于DCT变换的JPEG图像压缩编码算法进行研究,并通过 ...

最新文章

  1. pythongui界面实例带注释_python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例...
  2. Python改变生活 | OCR识别的花样使用
  3. python 定时器_python定时器apscheduler及一个django的小tips
  4. virtualenv 指定 python 解释器的版本
  5. ubuntu下vscode编写cgo程序
  6. 141.环形链表(力扣leetcode)博主可答疑该问题
  7. MySQL驱动jar包的下载--保姆教程
  8. 计算机艺术未来发展趋势,数字媒体艺术未来的发展趋势探讨
  9. 停车场车牌识别摄像机,传统提成行业颠覆者
  10. Python中的if __name__ == ‘__main__‘什么意思?
  11. 1. 学校在线考试系统
  12. 国科大计算机体系结构考试专用
  13. 解决:IE浏览器打开就自动最小化,无法打开
  14. 交换机vlan配置之Hybrid接口
  15. java字符串去掉中文_Java——去除字符串中的中文
  16. IPguard备用服务器设置
  17. Python文件带图片打包exe(Pyinstaller)
  18. 时间的玫瑰-让自己慢下来
  19. 2022华为机试真题 C++ 实现【快速人名查找】
  20. 四川师范大学测量学地图学90分版本

热门文章

  1. 解决ubuntu18.04打不开网易云音乐(亲测可行!
  2. 自行车平衡java小游戏_自行车水上平衡赛
  3. Win10/UWP 扫描二维码
  4. Windows10打开“运行”窗口
  5. 魅蓝e android无限重启,魅蓝E怎么Root?魅蓝E一键ROOT教程(系统自带Root功能)
  6. 《Python数据分析与挖掘实战》第8章——中医证型关联规则挖掘(Apriori关联)
  7. session有效时间问题
  8. background-image无法显示图片
  9. vmware的ubuntu虚拟机屏幕太小解决办法
  10. electron-builder 打包 exe 异常错误集锦