JEPG压缩算法
基于机器学习的JPEG2000图像压缩算法研究

基于机器学习的JPEG2000图像压缩算法研究摘要:JPEG2000是一种新型图像压缩算法,它采用离散小波变换和熵编码技术、支持透明度和无限次缩放等优越性能,不过因为计算复杂性大,它一直未得到广泛应用。
为了解决这个问题,本文采用机器学习算法优化JPEG2000压缩算法,提高其实用性和效率。
1. 引言图像数据量巨大,需要大量的存储空间和传输带宽。
为了减小图像数据的存储空间和传输带宽,图像压缩技术应运而生。
目前,JPEG(Joint Photographic Experts Group)是一种最常用的图像压缩算法,它利用DCT(Discrete Cosine Transform)将图像空间域转换成频域,再采用量化和熵编码技术实现压缩。
JPEG算法有诸多不足,比如严重的失真、不支持透明度等问题。
为了解决这些问题,JPEG2000压缩算法应运而生。
JPEG2000是一种新型的图像压缩算法,它在技术上有多大的提升呢?首先,不同于JPEG算法中的DCT,JPEG2000采用了离散小波变换(DWT)技术。
这种技术通过对图像进行多尺度分解,将图像分成多个低频子带和高频子带,达到了更高的压缩比。
其次,对于图像某些区域,要求保持高质量的细节信息。
JPEG算法采用固定剪切量的量化方法,而JPEG2000算法采用无损或可逆的位平面技术,对不同区域的信息进行动态量化,从而保留更多的细节信息。
然而,由于其计算复杂度大,JPEG2000压缩算法并未得到广泛应用。
如何优化JPEG2000压缩算法,提高其实用性和效率,是目前的热门研究领域。
2. 机器学习机器学习是人工智能领域的一个重要分支,它是指让机器从数据中学习,实现自我优化和智能化的过程。
机器学习分为有监督学习、无监督学习和半监督学习三种方法。
其中,有监督学习常用于分类、回归和聚类等问题,无监督学习常用于降维和聚类等问题,半监督学习则是两者的融合。
3. 基于机器学习的JPEG2000图像压缩算法研究为了优化JPEG2000压缩算法,本文探索了基于机器学习的方法。
数字图像处理中的图像压缩算法

数字图像处理中的图像压缩算法随着科技和计算机技术的不断发展,数字图像处理成为了一个非常重要的领域。
数字图像处理技术广泛应用于各个领域,如图像储存、通信、医疗、工业等等。
在大量的图像处理中,图像压缩算法是非常关键的一环。
本文将介绍一些数字图像处理中的图像压缩算法。
一、无损压缩算法1. RLE 算法RLE(Run Length Encoding)算法是常见的图像无损压缩算法之一,它的主要思想是将连续的像素值用一个计数器表示。
比如将连续的“aaaa”压缩成“a4”。
RLE 算法相对比较简单,适用于连续的重复像素值较多的图像,如文字图片等。
2. Huffman 编码算法Huffman 编码算法是一种将可变长编码应用于数据压缩的算法,主要用于图像无损压缩中。
它的主要思想是将频率较高的字符用较短的编码,频率较低的字符用较长的编码。
将编码表储存在压缩文件中,解压时按照编码表进行解码。
Huffman 编码算法是一种效率较高的无损压缩算法。
二、有损压缩算法1. JPEG 压缩算法JPEG(Joint Photographic Experts Group)压缩算法是一种在有损压缩中广泛应用的算法。
该算法主要是针对连续色块和变化缓慢的图像进行处理。
JPEG 压缩算法的主要思想是采用离散余弦变换(DCT)将图像分割成小块,然后对每个小块进行频率分析,去除一些高频信息,再进行量化,最后采用 Huffman 编码进行压缩。
2. MPEG 压缩算法MPEG(Moving Picture Experts Group)压缩算法是一种针对视频压缩的算法,它主要是对视频序列中不同帧之间的冗余信息进行压缩。
该算法采用了空间域和时间域的压缩技术,包括分块变换编码和运动补偿等方法。
在分块变换编码中,采用离散余弦变换或小波变换来对视频序列进行压缩,再通过运动估计和补偿等方法,去除冗余信息。
三、总结数字图像处理中的图像压缩算法有很多种,其中无损压缩算法和有损压缩算法各有特点。
JPEG压缩 原理 LZW算法

1 LZW算法的大体思想LZW是一种比较复杂的压缩算法,其压缩效率也比较高。
我们在这里只介绍一下它的基本原理:LZW把每一个第一次出现的字符串用一个数值来编码,在还原程序中再将这个数值还成原来的字符串。
例如:用数值0x100代替字符串“abccddeee”,每当出现该字符串时,都用0x100代替,这样就起到了压缩的作用。
至于0x100与字符串的对应关系则是在压缩过程中动态生成的,而且这种对应关系隐含在压缩数据中,随着解压缩的进行这张编码表会从压缩数据中逐步得到恢复,后面的压缩数据再根据前面数据产生的对应关系产生更多的对应关系,直到压缩文件结束为止。
LZW是无损的。
GIF文件采用了这种压缩算法。
要注意的是,LZW算法由Unisys公司在美国申请了专利,要使用它首先要获得该公司的认可。
2JPEG压缩编码标准JPEG是联合图象专家组(Joint Picture Expert Group)的英文缩写,是国际标准化组织(ISO)和CCITT联合制定的静态图象的压缩编码标准。
和相同图象质量的其它常用文件格式(如GIF,TIFF,PCX)相比,JPEG是目前静态图象中压缩比最高的。
我们给出具体的数据来对比一下。
例图采用Windows95目录下的Clouds.bmp,原图大小为640*480,256色。
用工具SEA(version1.3)将其分别转成24位色BMP、24位色JPEG、GIF(只能转成256色)压缩格式、24位色TIFF压缩格式、24位色TGA压缩格式。
得到的文件大小(以字节为单位)分别为:921,654,17,707,177,152,923,044,768,136。
可见JPEG比其它几种压缩比要高得多,而图象质量都差不多(JPEG处理的颜色只有真彩和灰度图)。
正是由于JPEG的高压缩比,使得它广泛地应用于多媒体和网络程序中,例如HTML语法中选用的图象格式之一就是JPEG(另一种是GIF)。
这是显然的,因为网络的带宽非常宝贵,选用一种高压缩比的文件格式是十分必要的。
图像压缩算法原理:JPEG、PNG等压缩方式

图像压缩算法原理:JPEG、PNG等压缩方式图像压缩算法旨在减小图像文件的大小,同时保持尽可能多的图像质量。
JPEG(Joint Photographic Experts Group)和PNG(Portable Network Graphics)是两种常见的图像压缩方式,它们有不同的原理和适用场景。
JPEG 压缩算法原理:离散余弦变换(DCT): JPEG 使用离散余弦变换将图像从空间域变换到频域。
DCT将图像分解为一系列频率分量,允许更多的信息被聚焦在低频分量上,这些低频分量对人眼更敏感。
量化:在DCT之后,通过量化将每个频率分量的数值映射为一个较低的精度。
高频分量被更多地量化为零,从而进一步减小数据。
哈夫曼编码:使用哈夫曼编码对量化后的数据进行熵编码。
哈夫曼编码对常见的值使用较短的编码,对不常见的值使用较长的编码,以进一步减小文件大小。
色彩空间转换: JPEG通常将RGB颜色空间转换为YCbCr颜色空间,其中Y表示亮度(灰度),Cb和Cr表示色度(颜色信息)。
这样可以将图像的亮度和色度分离,使得在色度上的降采样更容易。
PNG 压缩算法原理:无损压缩:与JPEG不同,PNG是一种无损压缩算法,它保留了原始图像的每一个像素的精确信息。
这使得PNG适用于需要完整性的图像,如图标、图形等。
差分预测: PNG使用差分预测(Delta Predictive Coding)来减小冗余。
通过预测每个像素值与其周围像素值之间的差异,PNG可以用较小的数据表示图像。
LZ77压缩: PNG使用LZ77算法进行数据压缩。
该算法通过查找并用指向先前出现的相似数据的指针替换当前数据,从而减小文件大小。
无调色板和透明度支持: PNG支持真彩色图像,并且可以存储图像的透明度信息。
这使得PNG在需要保留图像质量的同时支持透明背景。
总体而言,JPEG适用于需要较小文件大小,且可以容忍一些信息损失的场景,而PNG适用于需要无损压缩和透明度支持的场景。
JPEG图像压缩算法基本介绍

JPEG图像压缩算法基本介绍JPEG压缩算法可以用失真的压缩方式来处理图像,但失真的程度却是肉眼所无法辩认的。
这也就是为什么JPEG会有如此满意的压缩比例的原因。
下面主要讨论,JPEG基本压缩法。
一、图像压缩算法之JPEG压缩过程JPEG压缩分四个步骤实现:1.颜色模式转换及采样;2.DCT变换;3.量化;4.编码。
二、图像压缩算法具体操作1、图像压缩算法之颜色模式转换及采样RGB色彩系统是我们最常用的表示颜色的方式。
JPEG采用的是YCbCr色彩系统。
想要用JPEG基本压缩法处理全彩色图像,得先把RGB颜色模式图像数据,转换为YCbCr颜色模式的数据。
Y代表亮度,Cb和Cr则代表色度、饱和度。
通过下列计算公式可完成数据转换。
Y=0.2990R+0.5870G+0.1140BCb=-0.1687R-0.3313G+0.5000B+128Cr=0.5000R-0.4187G-0.0813B+128人类的眼晴对低频的数据比对高频的数据具有更高的敏感度,事实上,人类的眼睛对亮度的改变也比对色彩的改变要敏感得多,也就是说Y成份的数据是比较重要的。
既然Cb成份和Cr成份的数据比较相对不重要,就可以只取部分数据来处理。
以增加压缩的比例。
JPEG 通常有两种采样方式:YUV411和YUV422,它们所代表的意义是Y、Cb和Cr三个成份的数据取样比例。
2、图像压缩算法之DCT变换DCT变换的全称是离散余弦变换(Discrete Cosine Transform),是指将一组光强数据转换成频率数据,以便得知强度变化的情形。
若对高频的数据做些修饰,再转回原来形式的数据时,显然与原始数据有些差异,但是人类的眼睛却是不容易辨认出来。
压缩时,将原始图像数据分成8*8数据单元矩阵,例如亮度值的第一个矩阵内容如下:JPEG将整个亮度矩阵与色度Cb矩阵,饱和度Cr矩阵,视为一个基本单元称作MCU。
每个MCU所包含的矩阵数量不得超过10个。
常用图像压缩算法对比分析

常用图像压缩算法对比分析1. 引言图像压缩是一种将图像数据进行有损或无损压缩的方法,旨在减少图像数据的存储空间和传输带宽需求,同时尽可能保持原始图像的质量。
随着数字图像的广泛应用,图像压缩算法成为了计算机科学领域的重要研究领域。
本文将对目前常用的图像压缩算法进行比较和分析。
2. JPEG压缩算法JPEG(Joint Photographic Experts Group)是一种广泛使用的无损压缩算法,适用于彩色图像。
该算法通过对图像在频域上的离散余弦变换(DCT)进行分析,将高频成分进行舍弃,从而实现图像的压缩。
JPEG算法可以选择不同的压缩比,从而平衡图像质量和压缩率。
3. PNG压缩算法PNG(Portable Network Graphics)是一种无损压缩算法,适用于压缩有颜色索引的图像。
该算法基于LZ77压缩算法和哈夫曼编码,将图像中的相似数据进行压缩存储。
相比于JPEG算法,PNG 算法可以实现更好的图像质量,但压缩率较低。
4. GIF压缩算法GIF(Graphics Interchange Format)是一种无损压缩算法,适用于压缩简单的图像,如卡通图像或图形。
该算法基于LZW压缩算法,通过建立字典来实现图像的压缩存储。
GIF算法在保持图像质量的同时,能够实现较高的压缩率。
5. WEBP压缩算法WEBP是一种无损压缩算法,由Google开发,适用于网络上的图像传输。
该算法结合了有损压缩和无损压缩的特点,可以根据需要选择不同的压缩模式。
相比于JPEG和PNG算法,WEBP算法可以实现更好的压缩率和图像质量,但对浏览器的兼容性有一定要求。
6. 对比分析从图像质量、压缩率和兼容性等方面对比分析上述四种常用图像压缩算法。
- 图像质量:JPEG算法在高压缩比下会引入一定的失真,适合于要求相对较低的图像质量;PNG和GIF算法在无损压缩的情况下能够保持较好的图像质量;WEBP算法在高压缩比下相对其他算法都具有更好的图像质量。
JPEG压缩原理LZW算法

JPEG压缩原理LZW算法JPEG(Joint Photographic Experts Group)是一种常用的图像压缩格式,常用于对数字图像的有损压缩。
JPEG压缩算法的原理主要包括色彩空间转换、离散余弦变换、量化和熵编码等步骤。
本文将重点介绍JPEG压缩中的熵编码步骤,即LZW(Lempel-Ziv-Welch)算法。
LZW算法是一种无损压缩算法,由Abraham Lempel、Jacob Ziv和Terry Welch于1977年提出。
它通过利用数据中重复出现的模式来压缩数据,将重复的模式用较短的编码表示,从而减小数据的存储空间。
LZW算法的基本思想是建立一个编码字典,将数据中的模式映射到特定的编码。
算法逐个读取输入的数据字符,将字符与之前已经出现的模式进行匹配。
如果匹配成功,则继续读取下一个字符,与之前的模式再进行匹配。
如果匹配失败,则将之前匹配成功的模式的编码输出,并将当前字符及其前缀添加到字典中作为新的模式。
这样,压缩数据中的重复模式就可以用更短的编码表示,实现数据的压缩。
在JPEG压缩中,LZW算法主要应用于熵编码步骤,用于对离散余弦变换后的图像的系数进行压缩。
具体步骤如下:1.构建初始的编码字典,包含0到255的所有灰度级作为初始编码。
2.遍历离散余弦变换后的图像系数,将系数分组为一个个的模式。
每个模式可以是一系列连续的系数,可以是独立的一个系数。
3.逐个读取模式,检查字典中是否存在该模式。
-如果存在,继续读取下一个系数,并将当前模式与读取的系数连接形成新的模式。
-如果不存在,将之前匹配成功的模式的编码输出,并将当前模式及其前缀添加到字典中作为新的模式。
4.重复步骤3,直到遍历完所有的模式。
5.将最后一个匹配成功的模式的编码输出。
通过LZW算法,离散余弦变换后的图像系数可以用较短的编码表示,从而实现对图像数据的压缩。
在解码时,可以根据压缩数据中的编码,将编码解析为相应的系数。
总结起来,LZW算法是JPEG压缩中的一种熵编码方法,通过利用数据中的重复模式进行压缩,将重复的模式用较短的编码表示。
霍夫曼编码表 jpeg

霍夫曼编码表 jpeg霍夫曼编码(Huffman coding)是一种用于数据压缩的算法,它通过根据字符出现的频率分配不同长度的二进制编码来减少数据的存储空间。
JPEG(Joint Photographic Experts Group)是一种常用的图像压缩标准,其中也使用了霍夫曼编码。
JPEG压缩过程中的霍夫曼编码主要应用于DC系数和AC系数的编码。
DC系数是每个8x8像素块的直流分量,而AC系数是其余的交流分量。
首先,JPEG通过对图像进行DCT(离散余弦变换)将图像转换为频域数据。
DCT将图像从空间域转换为频域,使得图像的能量集中在较低频率的分量上,这使得图像可以更有效地被压缩。
DCT变换后的频域数据包含DC系数和AC系数。
DC系数表示图像的亮度信息,它代表了每个8x8像素块的平均亮度值。
由于相邻的像素值通常相似,DC系数的变化幅度较小。
因此,JPEG使用霍夫曼编码对DC系数进行压缩。
在这个过程中,DC系数被差分编码,即每个块的DC系数被与其前一个块的DC系数之差进行编码。
这样,由于差异较小,编码后的长序列中将有很多重复的值,使得压缩率更高。
然后,差分编码后的DC系数通过霍夫曼编码进行进一步的压缩,使用前缀编码的方式将频率较高的DC系数用较短的编码表示,频率较低的DC系数用较长的编码表示。
AC系数表示图像的细节信息,它代表了每个8x8像素块中除了直流分量外的交流分量。
AC系数相对于DC系数更多且变化范围较大,因此使用霍夫曼编码对其进行压缩是非常合适的。
AC系数首先通过零值处理将连续的零元素编码为(0, 0)零域对,然后对非零AC系数进行霍夫曼编码。
霍夫曼编码表中预先设定了一组编码字典,其中包含了每个AC系数的频率以及对应的霍夫曼编码。
由于AC系数的频率分布不均匀,因此使用了可变长度编码(VLC)的方式,频率较高的AC系数用较短的编码表示,频率较低的AC系数用较长的编码表示。
在JPEG压缩标准中,定义了两个常见的霍夫曼编码表:亮度(Y)和色度(CbCr)编码表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、JEPG压缩算法(标准)(一)JPEG压缩标准JPEG(Joint Photographic Experts Group)是一个由ISO/IEC JTC1/SC2/WG8和CCITT VIII/NIC于1986年底联合组成的一个专家组,负责制定静态的数字图像数据压缩编码标准。
迄今为止,该组织已经指定了3个静止图像编码标准,分别为JPEG、JPEG-LS和JPEG2000。
这个专家组于1991年前后指定完毕第一个静止图像压缩标准JPEG标准,并且成为国际上通用的标准。
JPEG标准是一个适用范围很广的静态图像数据压缩标准,既可用于灰度图像又可用于彩色图像。
JPEG专家组开发了两种基本的静止图像压缩算法,一种是采用以离散余弦变换(Discrete Cosine Transform, DCT)为基础的有损压缩算法,另一种是采用以预测技术为基础的无损压缩算法。
使用无损压缩算法时,其压缩比比较低,但可保证图像不失真。
使用有损压缩算法时,其算法实现较为复杂,但其压缩比大,按25:1压缩后还原得到的图像与原始图像相比较,非图像专家难于找出它们之间的区别,因此得到了广泛的应用。
JPEG有4种工作模式,分别为顺序编码,渐近编码,无失真编码和分层编码,他们有各自的应用场合,其中基于顺序编码工作模式的JPEG压缩系统也称为基本系统,该系统采用单遍扫描完成一个图像分量的编码,扫描次序从左到右、从上到下,基本系统要求图像像素的各个色彩分量都是8bit,并可通过量化线性地改变DCT系统的量化结果来调整图像质量和压缩比。
下面介绍图像压缩采用基于DCT的顺序模式有损压缩算法,该算法下的JPEG压缩为基本系统。
(二)JPEG压缩基本系统编码器JPEG压缩是有损压缩,它利用了人的视觉系统的特性,将量化和无损压缩编码相结合来去掉视觉的冗余信息和数据本身的冗余信息。
基于基本系统的JPEG压缩编码器框图如图1所示,该编码器是对单个图像分量的处理,对于多个分量的图像,则首先应将图像多分量按照一定顺序和比例组成若干个最小压缩单元(MCU),然后同样按该编码器对每个MCU各个分量进行独立编码处理,最终图像压缩数据将由多个MCU压缩数据组成。
图1 JPEG压缩编码器结构框图JPEG压缩主要步骤如下:(1)图像压缩预处理;(2)正向离散余弦变换(FDCT);(3)DCT系数量化;(4)编码。
(三)图像压缩预处理图像压缩前进行预处理,主要包括对原图像颜色空间转换、大小的调整和采样、整理MCU单元。
JPEG 压缩的对象是基于YUV颜色空间,对于其他颜色空间的图像数据要先应用相应的转换公式转换到YUV颜色空间。
由于后续图像分块及整理MCU单元的需要,对于原图像宽度和长度应当扩展为8的整数倍,针对YUV411、YUV420等需要降采样处理的图像则要求扩展为16的整数倍,JPEG标准建议通过复制每有一个分量最右边的列和最下面的行来进行扩展。
通过对原图像的降采样,将可以减少部分图像数据,增加压缩比,由于人眼对亮度信号Y比较敏感,而对色差信号UV不敏感,因此可以对原图像色度信号进行降采样处理,而人眼却基本感觉不到图像的变化,JPEG压缩常用可处理降采样处理格式为YUV422、YUV411和YUV420,本文采用YUV411格式,该格式为每个像素都提取Y分量,而UV分量在水平方向上每4个像素采样一次。
JPEG压缩的最小单元为MCU,对于未降采样的图像数据(非交织数据),一个MCU就是一个数据单元,而对于降采样的图像数据(交织数据),一个MCU就是一系列在该扫描中由分量的采样因子定义的数据单元。
本文采用YUV411格式,则一个MCU将由Y分量水平4个8×8图像块、水平一个U分量和一个V分量8×8图像块组成。
基本系统将按照从上到下、从左到右的顺序将原图像整理为若干个MCU,后续JPEG 压缩就是对每个MCU中各分量的图像块分别进行压缩,所有MCU的排列顺序就是最终图像压缩数据的排列顺序。
(四)正向离散余弦变换(FDCT)对每个8×8图像块进行FDCT之前,采样值应该先进行幅度值的位移,使之成为一个有符号的数,方法是将采样值减去,其中P为采样的精度,本文P取8位,幅度位移为128,即将每个采样点像素值减去128后再进行FDCT,FDCT的数学表达式为:8×8图像块经过FDCT变换后得到8×8的频率系数数组,该数组位置系数称为直流系数(DC),其他63个系数称为交流系数(AC)。
直接应用公式(3-1)进行计算其计算量较大,许多文献提出了该公式的优化计算方法,以提高运算效率,比较常见的是将该公式分解为两个一维的FDCT进行计算,分解后的公式为:(五)DCT系数的量化经过FDCT变换后的频率系数是一些浮点数,需进行均匀量化为JPEG可编码的整数系数,每一个FDCT 变换后的频率系统使用一个量化器,每个量化器的步长Q(u,v)可由指定量化表给定,本文使用的量化表采用JPEG标准推荐的两个量化表,分别用于亮度和色差信号。
通过线性地改变量化表各元素数值可以控制图像压缩后的质量和压缩比。
可通过对量化表各元素乘一个调整因子fa来进行量化表元素数值调整,设所需图像质量系数为Q,则调整因子fa的计算表达式为:量化表各元素的新数值为:由于量化表为8位存储,计算的新数值应限制在1~255范围内。
量化后的DCT系数为:量化取整造成一定的数据精度损失,与原图像数据产生差异,这是造成JPEG图像压缩存在一定失真的主要原因。
通过改变Q的数值可以控制图像压缩比,一般而言,对中等复杂程度的彩色图像,对基本系统每8bit像素压缩到0.75~2bit时,解码恢复后的图像质量较好,可以满足大部分场合的应用。
(六)霍夫曼(Huffman)编码JPEG压缩最后一个步骤就是对量化后的频率系数进行编码处理,该编码的熵编码过程采用了Huffman 编码,Huffman编码是一种基于概率统计的无损压缩技术,该算法首先统计信源出现的概率,再根据统计结果,出现概率高的符号使用短即时码表示,出现概率低的用长即时码表示,以达到压缩数据的目的。
应用标准霍夫曼编码对图像进行编码时效率很高,但需要对原始图像扫描两遍来统计每个像素值出现的概率和建立霍夫曼树并编码,数据压缩速度很慢。
实际应用中,为了提高处理速度,信源编码值通常根据信源查找相应的编码表得出。
Huffman码表以一个16字节的列表(BITS)规定,它包括长度从1到16的每一种码长的码字的数目,在列表后面紧跟着另外一个由8bit符号值组成的列表(HUFFVAL),该列表每一项被赋予一个Huffman码字,应用这两个列表可以获取可供信源查找Huffman编码值的码表。
在基本系统中,编码器最多在每个扫描中分别使用两个DC系数的Huffman码表和两个AC系数的Huffman码表(亮度分量和色度分量使用不同的Huffman码表),本文使用JPEG推荐的4个Huffman码表,这4个表都来自对大量视频图像的统计平均,如果没有特别的要求,采用这4个码表就可以获得满意的压缩效果。
(七)DC编码在对量化后的系数进行熵编码之前,量化的直流系数被取出单独进行处理,对其进行差分预测编码(DPCM)。
DC系数为图像数据块的样本均值,包含了图像大部分的能量,数值也较大,通过差分预测编码可进一步去除数据块间平均值之间的相关性。
DPCM以同一个分量的前一个子块的量化直流系数DCi-1作为当前直流分量的预测值,然后再对预测误差DIFF进行Huffman编码。
计算DIFF的表达式为:对DIFF的Huffman编码过程为:(1)根据DIFF值查幅度值分类表3-1取得差值幅度类别号SSSS和DIFF值实际保存的二进制码流CODE(DIFF);(2)根据标准DC系数Huffman码表计算得到的Huffman编码表查出SSSS值的Huffman编码值HCODE (SSSS);(3)将SSSS的Huffman编码值和DIFF的实际保存值合并得到DC系数编码值HCODE(SSSS)CODE(DIFF),完成DC系数的编码。
(八)AC编码对量化后的63个AC系数可以观察到有许多系数值为零,首先通过对AC系数的之字形(Zig-Zag)扫描和0-RLE行程编码压缩掉这些0系数。
按照如图3-2所示的扫描次序将二维的AC系数按一维次序读出可将AC系数转换成Zig-Zag序列,该转换可以增加行程中连续的0系数值个数。
图2 Zig-Zag扫描次序0-RLE行程编码依次遍历Zig-Zag序列,当遍历到不为零的系数VAL(AC)时,计算该系数前面零的个数NUM(ZERO),然后用(NUM(ZERO),VAL(AC))进行表示,两部分刚好占用一个byte(分别占用4bit),对整个序列应用该方式进行表示。
如果最后一个非零的AC系数不是序列的最后一个则在最后应加上结束标记EOB,EOB通常为(0,0)。
当序列中包含16个连续的零时则用(15,0)进行表示,可用多个(15,0)来表示多个16个连续的零。
最后再对0-RLE行程编码后的序列以(NUM(ZERO),VAL(AC))为单元进行Huffman编码,编码过程如下:(1)按序列顺序先后取出一个(NUM(ZERO),VAL(AC))单元,对VAL(AC)查幅度值分类表取得幅度类别号SSSS和VAL(AC)值实际保存的二进制码流CODE(VAL(AC));(2)再根据标准AC系数Huffman码表计算得到的Huffman编码表查出(NUM(ZERO),SSSS)的Huffman编码值HCODE((NUM(ZERO),SSSS));(3)组合HCODE((NUM(ZERO),SSSS))和CODE(VAL(AC))得到(NUM(ZERO),VAL(AC))单元的最后编码;(4)重复步骤(1)、(2)、(3)对其他(NUM(ZERO),VAL(AC))单元进行编码完成AC系数的编码。
(九)压缩数据BIT码流整理将DC编码和AC编码的码流组合后便得到8×8图像块的JPEG压缩Bit码流,按照同样的步骤对每个MCU图像块进行编码,最后对压缩数据Bit码流以8位为单元进行存储,同时为了区别压缩数据与标记段(首字节为0xFF的段),当8位二进制码流值为0xFF时则在其后填充一个0x00字节。
此外,为了得到整数字节的熵编码字段,编码结束区域不完整字节通过填充“1”比特来实现完整化,如果这种填充中产生0xFF字节,则也在其后填充一个0x00字节。
整理完毕后将得到图像最终的JPEG压缩数据。
二JPEG文件组织结构应用JPEG压缩算法得到图像的压缩数据仅为JPEG文件的一部分,完整的JPEG文件由标记段和压缩数据两部分组成,标记段记录了JPEG图像的格式和解码信息。