当前位置:文档之家› JPEG图片文件编解码详解

JPEG图片文件编解码详解

JPEG图片文件编解码详解
JPEG图片文件编解码详解

JPEG文件编/解码详解(1)

2.初步了解图像数据流的结构

1)理论说明

分析图像数据流的结构,笔者准备以一个从宏观到微观的顺序为读者详细剖析,即:

数据流→最小编码单元→数据单元与颜色分量。

a)在图片像素数据流中,信息可以被分为一段接一段的最小编码单元

(Minimum Coded Unit,MCU)数据流。所谓MCU,是图像中一个正方矩阵像素的数据。

矩阵的大小是这样确定的:

查阅标记SOF0,可以得到图像不同颜色分量的采样因子,即Y、Cr、Cb三个分量各自的水平采样因子和垂直采样因子。大多图片的采样因子为4:1:1或1:1:1。其中,4:1:1即(2*2):(1*1):(1*1));1:1:1即(1*1):(1*1):(1*1)。记三个分量中水平采样因子最大值为Hmax,垂直采样因子最大值为Vmax,那么单个MCU矩阵的宽就是Hmax*8像素,高就是Vmax*8像素。

如果,整幅图像的宽度和高度不是MCU宽度和高度的整数倍,那么编码时会用某些数值填充进去,保证解码过程中MCU的完整性(解码完成后,可直接忽视图像宽度和高度外的数据)。

在数据流中,MCU的排列方法是从左到右,从上到下。

b)每个MCU又分为若干个数据单元。数据单元的大小必定为8*8,所以每

个MCU的数据单元个数为Hmax*Vmax。

另外JPEG的压缩方法与BMP文件有所不同,它不是把每个像素的颜色分量连续存储在一起的,而是把图片分成Y,Cr,Cb三张子图,然后分别压缩。而三个颜色分量的采样密度(即采样因子)可能一样(例如1:1:1)也可能不一样(例如4:1:1)。

每个MCU内部,数据的顺序是Y、Cr、Cb。如果一个颜色分量有多个数据单元,则顺序是从左到右,从上到下。

2)举例说明

下面通过一幅32*35的图像,对上面两个问题列出两种采样因子的具体说明。

图1 整张完整的图像(4:1:1)图2 将图像的MCU1放大

图1及图3中灰色部分为实际图像大小(32px*35px);粗虚线表示各个MCU的分界;细虚线表示MCU内部数据单元的分界。

a)采样因子为4:1:1

此时,Hmax=max(2,1,1)=2,Vmax=max(2,1,1)=2。所以,MCU的宽为Hmax*8=16像素,高为Vmax*8=16像素。图像实际的宽刚好是2个MCU,但高则稍稍大于2个MCU的高度,所以要补足3行MCU。

在数据流中,MCU的顺序是

MCU1→MCU2→MCU3→MCU4→MCU5→MCU6。

每个MCU又分为Hmax*Vmax=2*2=4个数据单元。由于采样因子是4:1:1,即(2*2):(1*1):(1*1),所以Y分量的水平和垂直方向都是每2个像素采样2次;Cr分量和Cb分量的水平和垂直方向都是每2个像素采样1次。因此,在一个MCU来里边,Y分量有256个采样点,即4

个完整的数据单元;Cr分量和Cb分量各自只有64个采样点。

如果以MCU1说明MCU数据的次序,则依次为Y1 、Y2 、Y5 、Y6 、Cr1256 、Cb1256 。图2中全部256个点均是Y的采样点,红色部分为Cr分量和Cr分量的采样点。

换句话说,对于整张图片来说,数据流的数据依次是:

[Y1 、Y2 、Y5 、Y6 、Cr1256 、Cb1256] 、[Y3 、Y4 、Y7 、Y8 、Cr3478 、Cb3478] 、[Y9 、Y10 、Y13 、Y14 、Cr9101314 、Cb9101314 ]、……

图3 整张完整的图像(1:1:1)

b)采样因子为1:1:1

如图3。Hmax=max(1,1,1)=1,Vmax=max(1,1,1)=2。所以,MCU的宽为Hmax*8=8像素,高为Vmax*8=8像素。图像实际的宽刚好是4个MCU,但高则稍稍大于4个MCU的高度,所以要补足5行MCU。

在数据流中,MCU的顺序是:

MCU1→MCU2→MCU3→MCU4→…………

→MCU18→MCU19→MCU20。

每个MCU又分为Hmax*Vmax=1*1=1个数据单元,也就是一个数据单元就是一个MCU。由于采样因子是1:1:1,即(1*1):(1*1):(1*1),所以Y分量、Cr分量和Cb分量的水平和垂直方向都是每1个像素采样1

次,也就是图象的每一个像素都是采样点。因此,在一个MCU来里边,Y 分量、Cr分量和Cb分量各自有64个采样点。有

因此,对于整张图片来说,数据流的数据依次是:

[Y1 、Cr1、Cb1]、[Y2 、Cr2 、Cb2] 、[Y3 、Cr3、Cb3] 、…………[Y19 、Cr19、Cb19]、[Y20 、Cr20、Cb20]。

3.颜色分量单元的内部解码

1)理论说明

“颜色分量单元”是笔者为说明问题而建立的概念,指的是MCU中某个颜色分量中的一个8*8数据块,例如上面提到的Y1 、Cr1、Cb1 都是一个颜色分量单元。

图像数据流是以位(bit)为单位存储信息的。并且内部的数据都是在编码时通过正向离散余弦变换(FDCT)进行时空域向频率域变换而得到的结果,所以对于每个颜色分量单元都应该由两部分组成:1个直流分量和63个交流分量。

解码的过程其实就是哈夫曼树的查找过程。

首先查阅标记段SOS中的颜色分量信息,可以得出各个颜色分量对应使用的直流分量和交流分量使用的哈夫曼树编号。一般来说,

Y分量:直流分量:直流0号哈夫曼树,交流分量:交流0号哈夫曼树;

Cr分量:直流分量:直流1号哈夫曼树,交流分量:交流1号哈夫曼树;

Cb分量:直流分量:直流1号哈夫曼树,交流分量:交流1号哈夫曼树。

颜色分量单元内部综合运用了RLE行程编码和哈夫曼编码来压缩数据。每个像素的数据流由两部分构成:编码和数值,并且两者基本以互相隔开方式出现(除非该编码的权值为零)。具体读入单个颜色分量单元的步骤如下:

a)从此颜色分量单元数据流的起点开始一位一位的读入,直到读入的编码与该分量直流哈夫曼树的某个码字(叶子结点)一致,然后用直流哈夫曼树查得该码字对应的权值。权值(共8位)表示该直流分量数值的二进制位数,也就是接下来需要读入的位数。

b)继续读入位数据,直到读入的编码与该分量交流哈夫曼树的某个码字(叶子结点)一致,然后用交流哈夫曼树查得该码字对应的权值。权值的高4位表示当前数值前面有多少个连续的零,低4位表示该交流分量数值的二进制位数,也就是接下来需要读入的位数。

c)不断重复步骤b,直到满足交流分量数据结束的条件。而结束条件有两个,只要满足其中一个即可:

①当读入码字的权值为零,表示往后的交流变量全部为零;

②已经读入63个交流分量。

2)举例说明

下面举例说明以上几点。某个颜色分量单元数据如下:

D3 5E 6E 4D 35 f5 8A

若以二进制表示,则为:

1101 0011 0101 1110 0110 1110 0100 1101 0011 0101 1111 0101 1000 1010 假设该颜色分量单元对应以下直流哈夫曼树和交流哈夫曼树,则可将各个以位为单位的数据流拆分如下:

110 1001101 01 1 11001 101 11001 001 101 00 11010 1 1111010 11 00 01010

交流哈夫曼树

详细说明一下: 读入数据流并对照直流哈夫曼树,第一个哈夫曼编码为110,其权值为6,所以往后读入6位数据“1001101”,译码成数值为77。因为每个颜色分量单元只有一个直流分量,所以下一个就是第一个交流分量了。 继续读入数据流并对照交流哈夫曼树,得哈夫曼编码为01,其权值为1,所以它的前面没有零,并往后读如1位数据“1”,译码成数值为1。如此往复,最后读到哈夫曼编码“00”,其权值为0,所以满足交流变量结束条件(最后剩余的“01010”对本颜色分

量单元来说是冗余的,它可能属于下一个颜

色分量单元)。

实际上,这段数据译码为:

77,(0,1),(0,5),(0,-6),(0,-3),(5,1),(2,3)

JPEG 文件编/解码详解(3)

JPEG图像的编解码实现

毕业论文论文题目(中文)JPEG图像的编解码实现 论文题目(外文)Encoding and decoding of JPEG image

摘要 JPEG是一种十分先进的图像压缩技术,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像。本文设计和实现一个JPEG图像编解码器来进行图像转换,利用离散余弦变换、熵编码、Huffman编码等图像压缩技术将BMP图像转换成JPEG图像,即进行图像的压缩。验证JPEG压缩编码算法的可行性。通过比对图像压缩前后实际效果,探讨压缩比,峰值信噪比等评价图像数据压缩程度及压缩质量的关键参数,对JPEG 压缩编码算法的实用性和优越性进行研究。 关键词:JPEG;编码;解码;图像压缩

Abstract JPEG is a very advanced image compression technology, it uses lossy compression to remove redundant image data, in obtaining a very high compression rate can show a very rich and vivid image. In this project, a JPEG image codec is designed and implemented to transform image, using discrete cosine transform, entropy coding, Huffman coding and other image compression techniques to convert BMP images into JPEG images. Verifies the feasibility of JPEG compression coding algorithm. Through the comparison of the actual effect of image compression, the key parameters of compression ratio, peak Snr, and the compression quality of image data are discussed, and the practicability and superiority of JPEG compression coding algorithm are researched. Key words: JPEG; encoding; decoding; image compression

JPEG压缩编码标准

JPEG压缩编码标准 JPEG是联合图象专家组(Joint Picture Expert Group)的英文缩写,是国际标准化组织(ISO)和CCITT联合制定的静态图象的压缩编码标准。和相同图象质量的其它常用文件格式(如GIF,TIFF,PCX)相比,JPEG是目前静态图象中压缩比最高的。我们给出具体的数据来对比一下。例图采用Windows95目录下的,原图大小为640*480,256色。用工具SEA将其分别转成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有几种模式,其中最常用的是基于DCT变换的顺序型模式,又称为基线系统(Baseline),以下将针对这种格式进行讨论。 的压缩原理 JPEG的压缩原理其实上面介绍的那些原理的综合,博采众家之长,这也正是JPEG有高压缩比的原因。其编码器的流程为: 图 JPEG编码器流程 解码器基本上为上述过程的逆过程:

图解码器流程 8×8的图象经过DCT变换后,其低频分量都集中在左上角,高频分量分布在右下角(DCT变换实际上是空间域的低通滤波器)。由于该低频分量包含了图象的主要信息(如亮度),而高频与之相比,就不那么重要了,所以我们可以忽略高频分量,从而达到压缩的目的。如何将高频分量去掉,这就要用到量化,它是产生信息损失的根源。这里的量化操作,就是将某一个值除以量化表中对应的值。由于量化表左上角的值较小,右上角的值较大,这样就起到了保持低频分量,抑制高频分量的目的。JPEG使用的颜色是YUV格式。我们提到过,Y分量代表了亮度信息,UV分量代表了色差信息。相比而言,Y分量更重要一些。我们可以对Y采用细量化,对UV采用粗量化,可进一步提高压缩比。所以上面所说的量化表通常有两张,一张是针对Y的;一张是针对UV的。 上面讲了,经过DCT变换后,低频分量集中在左上角,其中F(0,0)(即第一行第一列元素)代表了直流(DC)系数,即8×8子块的平均值,要对它单独编码。由于两个相邻的8×8子块的DC系数相差很小,所以对它们采用差分编码DPCM,可以提高压缩比,也就是说对相邻的子块DC系数的差值进行编码。8×8的其它63个元素是交流(AC)系数,采用行程编码。这里出现一个问题:这63个系数应该按照怎么样的顺序排列为了保证低频分量先出现,高频分量后出现,以增加行程中连续“0”的个数,这63个元素采用了“之”字型(Zig-Zag)的排列方法,如图所示。 图 Zig-Zag 这63个AC系数行程编码的码字用两个字节表示,如图所示。

jpeg编解码过程详解海王博客园

JPEG编解码过程详解- 海王- 博客园 JPEG(Joint Photographic Experts Group)是联合图像专家小组的英文缩写。它由国际电话与电报咨询委员会CCITT(The International Telegraph and Telephone Consultative Committee)与国际标准化组织ISO于1986年联合 成立的一个小组,负责制定静态数字图像的编码标准。 小组一直致力于标准化工作,开发研制出连续色调、多级灰度、静止图像的数字图像压缩编码方法,即JPEG 算法。JPEG算法被确定为国际通用标准,其适用范围广泛,除用于静态图像编码外,还推广到电视图像序列的帧 内图像压缩。而用JPEG算法压缩出来的静态图片文件称为JPEG文件,扩展名通常为*.jpg、*.jpe*.jpeg。 JPEG专家组开发了两种基本的压缩算法、两种数据编码方法、四种编码模式。具体如下: 压缩算法: l 有损的离散余弦变换(Discrete Cosine Transform,DCT);l 无损的预测技术压缩。 数据编码方法: l 哈夫曼编码; l 算术编码; 编码模式:

l 基于DCT顺序模式:编/解码通过一次扫描完成; l 基于DCT递进模式:编/解码需要多次扫描完成,扫描效果从粗糙到精细,逐级递进; l 无损模式:基于DPCM,保证解码后完全精确恢复到原图像采样值; l 层次模式:图像在多个空间多种分辨率进行编码,可以根据需要只对低分辨率数据作解码,放弃高分辨率信息。 在实际应用中,JPEG图像使用的是离散余弦变换、哈夫曼编码、顺序模式。 JPEG压缩编码算法的主要计算步骤如下: (0) 8*8分块。 (1) 正向离散余弦变换(FDCT)。 (2) 量化(quantization)。 (3) Z字形编码(zigzag scan)。 (4) 使用差分脉冲编码调制(DPCM)对直流系数(DC)进行编码。 (5) 使用行程长度编码(RLE)对交流系数(AC)进行编码。 (6) 熵编码。 笔者在实践过程中查阅了大量的资料,发现大多数书籍资料和网上资料都是从编码角度分析JPEG的编/解码方式,

matlab压缩JPEG实验及程序

实验四JPEG压缩 一、实验原理 1、数据分块 对图像进行编码前,将每个分量图像分割成不重叠的8×8像素块,每一个8×8像素块称为一个数据单元(DU)。在彩色图像中,JPEG分别压缩图像的每个彩色分量。虽然JPEG可以压缩通常的红绿蓝分量,但在YCbCr 空间的压缩效果会更好。这是因为人眼对色彩的变化不如对亮度的变化敏感,因而对色彩的编码可以比对亮度的编码粗糙些,这主要体现在不同的采样频率和量化精度上。因此,编码前一般先将图像从RGB空间转换到YCbCr 空间,再把各分量图像分割成8×8数据块。 在对图像采样时,可以采用不同的采样频率,这种技术称为二次采样。 由于亮度比色彩更重要,因而对Y分量的采样频率可高于对Cb、Cr的采样频率,这样有利于节省存储空间。常用的采样方案有YUV422和YUV411。 把采样频率最低的分量图像中一个DU所对应的像区上覆盖的所有各分量上的DU按顺序编组为一个最小编码单元(MCU)。对灰度图像而言,只有一个Y分量,MCU就是一个数据单元。而对彩色图像而言,以4:1:1的采样方案为例,则一个MCU由4个Y分量的DU、1个Cb分量的DU和1个Cr 分量的DU组成。 2、DCT处理 图像数据块分割后,即以MCU为单位顺序将DU进行二维离散余弦变换。 对以无符号数表示的具有P位精度的输入数据,在DCT前要减去2P-1,转换成有符号数,而在IDCT后,应加上2P-1,转换成无符号数。对每个8×8的数据块DU进行DCT后,得到的64个系数代表了该图像块的频率成分,其中低频分量集中在左上角,高频分量分布在右下角。系数矩阵左上角的叫做直流(DC)系数,它代表了该数据块的平均值,其余63个叫交流(AC)系数。 3、系数量化 在DCT处理中得到的64个系数中,低频分量包含了图像亮度等主要信息。在从空间域到频域的变换中,图像中的缓慢变化比快速变化更易引起人眼的注意,所以在重建图像时,低频分量的重要性高于高频分量。因而在编码时可以忽略高频分量,从而达到压缩的目的,这也是量化的根据和目

JPEG编码过程详解

JPEG(Joint Photographic Experts Group)是联合图像专家小组的英文缩写。它由国际电话与电报咨询委员会 CCITT(The International Telegraph and Telephone Consultative Committee)与国际标准化组织ISO于1986年联合 成立的一个小组,负责制定静态数字图像的编码标准。 小组一直致力于标准化工作,开发研制出连续色调、多级灰度、静止图像的数字图像压缩编码方法,即JPEG 算法。JPEG算法被确定为国际通用标准,其适用范围广泛,除用于静态图像编码外,还推广到电视图像序列的帧 内图像压缩。而用JPEG算法压缩出来的静态图片文件称为JPEG文件,扩展名通常为*.jpg、*.jpe*.jpeg。 JPEG专家组开发了两种基本的压缩算法、两种数据编码方法、四种编码模式。具体如下: 压缩算法: ● 有损的离散余弦变换(Discrete Cosine Transform,DCT); ● 无损的预测技术压缩。 数据编码方法: ● 哈夫曼编码; ● 算术编码; 编码模式: ● 基于DCT顺序模式:编/解码通过一次扫描完成; ● 基于DCT递进模式:编/解码需要多次扫描完成,扫描效果从粗糙到精细, 逐级递进; ● 无损模式:基于DPCM,保证解码后完全精确恢复到原图像采样值; ● 层次模式:图像在多个空间多种分辨率进行编码,可以根据需要只对低 分辨率数据作解码,放弃高分辨率信息。 在实际应用中,JPEG图像使用的是离散余弦变换、哈夫曼编码、顺序模式。JPEG压缩编码算法的主要计算步骤如下: (0) 8*8分块。 (1) 正向离散余弦变换(FDCT)。 (2) 量化(quantization)。 (3) Z字形编码(zigzag scan)。 (4) 使用差分脉冲编码调制(DPCM)对直流系数(DC)进行编码。 (5) 使用行程长度编码(RLE)对交流系数(AC)进行编码。 (6) 熵编码。 笔者在实践过程中查阅了大量的资料,发现大多数书籍资料和网上资料都是从编码角度分析JPEG的编/解码方式, 并且都只是介绍编码过程中的主要方法。所以,本文从解码角度详细分析JPEG的编/解码过程,并且加入许多笔

一种基于MATLAB的JPEG图像压缩具体实现方法

一种基于MATLAB的JPEG图像压缩具体实现方法 说明:该方法主要是对FPGA硬件实现编码的一个验证,MATLAB处理时尽量选择了简单化和接近硬件实现需要。 JPEG编码解码流程:BMP图像输入、8*8分块、DCT变换、量化、Zig_Zag 扫描、获取DC/AC系数中间格式、Huffman熵编码、DC/AC系数Huffman熵解码,反zig_zag扫描、反量化、反DCT变换、8*8组合、解码图像显示。 下面根据具体代码解释实现过程。 1.BMP图像输入 A=imread('messi_b.bmp'); %读取BMP图像矩阵 R=int16(A(:,:,1))-128; %读取RGB矩阵,由于DCT时输入为正负输入, G=int16(A(:,:,2))-128; %使得数据分布围-127——127 B=int16(A(:,:,3))-128; 通过imread函数获取BMP图像的R、G、B三原色矩阵,因为下一步做DCT 转换,二DCT函数要求输入为正负值,所以减去128,使得像素点分布围变为-127~127,函数默认矩阵A的元素为无符号型(uint8),所以如果直接相减差值为负时会截取为0,所以先用int16将像素点的值转为带符号整数。网上很多都提到了第一步的YUV转换,但是由于MATLAB在实验时YUV转换后色差失真比较严重,这里没有进行YUV转换。个人理解为YUV转换后经过非R/G/B原理显示器显示效果可能会比较好,或者如果图像有色差可以选择YUV调整。为了方便,读入的图像像素为400*296,是8*8的50*37倍,所以代码里没有进行8*8的整数倍调整。 2. 8*8分块 R_8_8=R(1:8,1:8);%取出一个8*8块 这里以R色压缩解码为例,后边解释均为R色编码解码过程,最后附全部代码。R_8_8为: 3.DCT变换 R_DCT=dct2(R_8_8); 使用MATLAB函数dct2进行DCT变换,也可使用DCT变换矩阵相乘的方法,即R_DCT=A* R_8_8*A T,其中A为DCT变换矩阵。R_DCT为:

JPEG图像压缩原理

JPEG编码 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有几种模式,其中最常用的是基于DCT变换的顺序型模式,又称为基线系统(Baseline),以下将针对这种格式进行讨论。 1.JPEG的压缩原理 JPEG的压缩原理其实上面介绍的那些原理的综合,博采众家之长,这也

正是JPEG有高压缩比的原因。其编码器的流程为: 图9.3 JPEG编码器流程 解码器基本上为上述过程的逆过程: 图9.4 解码器流程 DCT 下面对正向离散余弦变换(FDCT)变换作几点说明。 (1)对每个单独的彩色图像分量,把整个分量图像分成8×8的图像块,如图所示,并作为两维离散余弦变换DCT的输入。通过DCT变换,把能量集中在少数几个系数上。 (2)DCT变换使用下式计算: 它的逆变换使用下式计算:

JPEG文件编解码详解

JPEG文件编/解码详解 cat_ng 猫猫 JPEG(Joint Photographic Experts Group)是联合图像专家小组的英文缩写。它由国际电话与电报咨询委员会 CCITT(The International Telegraph and Telephone Consultative Committee)与国际标准化组织ISO 于1986年联合 成立的一个小组,负责制定静态数字图像的编码标准。 小组一直致力于标准化工作,开发研制出连续色调、多级灰度、静止图像的数字图像压缩编码方法,即JPEG 算法。JPEG算法被确定为国际通用标准,其适用范围广泛,除用于静态图像编码外,还推广到电视图像序列的帧 内图像压缩。而用JPEG算法压缩出来的静态图片文件称为JPEG文件,扩展名通常为*.jpg、*.jpe*.jpeg。 JPEG专家组开发了两种基本的压缩算法、两种数据编码方法、四种编码模式。具体如下: 压缩算法: ● 有损的离散余弦变换(Discrete Cosine Transform,DCT); ● 无损的预测技术压缩。 数据编码方法: ● 哈夫曼编码; ● 算术编码; 编码模式: ● 基于DCT顺序模式:编/解码通过一次扫描完成; ● 基于DCT递进模式:编/解码需要多次扫描完成,扫描效果从粗糙到精细, 逐级递进; ● 无损模式:基于DPCM,保证解码后完全精确恢复到原图像采样值;

层次模式:图像在多个空间多种分辨率进行编码,可以根据需要只对低分辨率数据作解码,放弃高分辨率信息。 在实际应用中,JPEG图像使用的是离散余弦变换、哈夫曼编码、顺序模式。 JPEG压缩编码算法的主要计算步骤如下: (0) 8*8分块。 (1) 正向离散余弦变换(FDCT)。 (2) 量化(quantization)。 (3) Z字形编码(zigzag scan)。 (4) 使用差分脉冲编码调制(DPCM)对直流系数(DC)进行编码。 (5) 使用行程长度编码(RLE)对交流系数(AC)进行编码。 (6) 熵编码。 笔者在实践过程中查阅了大量的资料,发现大多数书籍资料和网上资料都是从编码角度分析JPEG的编/解码方式, 并且都只是介绍编码过程中的主要方法。所以,本文从解码角度详细分析JPEG的编/解码过程,并且加入许多笔 者实践过程中遇到的问题和解决方法,希望从另一个角度说明问题,以更好帮助读者结合其他资料解决问题。 不过,介绍解码过程之前,首先要了解JPEG文件中数据的存储格式。 一、JPEG文件格式介绍 JPEG文件使用的数据存储方式有多种。最常用的格式称为JPEG文件交换格式(JPEG File Interchange Format,JFIF )。而JPEG文件大体上可以分成两个部分:标记码(Tag)和压缩数据。

实验4JPEG压缩编解码的实现

实验四JPEG压缩编解码的实现 实验目的: 使学生掌握DIB文件和JPEG文件的读写过程,能够在程序中打开DIB文件或JPEG文件,可以进行DIB文件和JPEG文件之间的格式转换。 实验环境: 具有多媒体处理功能的计算安装有Windows操作系统,安装有Visual c++6.0程序设计软件。 实验要求: 学习相关理论指导,掌握相关程序设计知识;按照实验步骤要求完成程序设计任务,书写实验报告,试验报告中要求包含程序实现的主要程序代码。 实验内容和实验步骤: 1)创建基于单文档的应用程序:RWJpegExp,并支持窗口滚动 2)为项目添加CJpeg类和jpeglib2库文件 3)通过“Project/Settings…”菜单,选中Link选项卡如下设置:

4)利用ClassWaizard重载CwinApp的OnFileOpen()函数。 void CRWJpegExpApp::OnFileOpen() { // TODO: Add your command handler code here CString szOpenFilter = "图象文件|*.bmp; *.dib; *.jpg; *.jpe; *.jpeg; |位图文件(*.bmp;*.dib)|*.bmp; *.dib|JPEG文件(*.jpg;*.jpe;*.jpeg)|*.jpg; *.jpe; *.jpeg|All Files (*.*)|*.*||"; CFileDialog FileDlg(TRUE, "*.bmp", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szOpenFilter); if (FileDlg.DoModal() == IDOK) OpenDocumentFile(FileDlg.m_ofn.lpstrFile); } 5)利用ClassWaizard重载CRWJpegExpDoc类的的OnOpenDocument()函数。BOOL CRWJpegExpDoc::OnOpenDocument(LPCTSTR lpszPathName) { char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; char fname[_MAX_FNAME]; char ext[_MAX_EXT]; _splitpath((LPCSTR)lpszPathName, drive, dir, fname, ext); if (! stricmp(ext, ".jpg") || ! stricmp(ext, ".jpe") || ! stricmp(ext, ".jpeg") ) // JPEG file {

JPEG图像格式详解

JPEG图像格式详解 JPEG 压缩简介 ------------- 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.114*B (亮度) Cb = - 0.1687*R - 0.3313*G + 0.5 *B + 128 Cr = 0.5 *R - 0.4187*G - 0.0813*B + 128 [Y,Cb,Cr] -> [R,G,B] 转换 ------------------------- R = Y + 1.402 *(Cr-128) G = Y - 0.34414*(Cb-128) - 0.71414*(Cr-128) B = Y + 1.772 *(Cb-128) 一般, C 值 (包括 Cb Cr) 应该是一个有符号的数字, 但这里被处理过了, 方法是加上了 128. JPEG 里的数据都是无符号 8bit 的. 2. DCT (离散余弦变换) JPEG 里, 要对数据压缩, 先要做一次 DCT 变换. DCT 变换的原理, 涉及到数学知识, 这里我们不必深究. 反正和傅立叶变换(学过高数的都知道) 是差不多了. 经过这个变换, 就把图片里点和点间的规律呈现出来了, 更方便压缩.JPEG 里是对每 8x8

JPEG压缩编码标准

盛年不重来,一日难再晨。及时宜自勉,岁月不待人 9.4 JPEG压缩编码标准 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有几种模式,其中最常用的是基于DCT变换的顺序型模式,又称为基线系统(Baseline), 以下将针对这种格式进行讨论。 1. JPEG的压缩原理 JPEG的压缩原理其实上面介绍的那些原理的综合,博采众家之长,这也正是缩比的原因。其编码器的流程为: 图9.3 JPEG编码器流程 解码器基本上为上述过程的逆过程: 图9.4 解码器流程JPEG有咼压 量it器量化表4爛編码器 t 罠表 f压缩数据 压磁据—爛编码器 码表 〔从压缩数据中潯至牛 反量化器- 堡化表 (从压缩数据中得旨) DCT 沪恢复的图象数据

图像压缩(JPEG)编码算法及压缩过程的实现

秋风,秋雨,秋天的景色 ?博客园 ?首页 ?博问 ?闪存 ?新随笔 ?联系 ?订阅 ?管理 随笔- 234 文章- 0 评论- 22 图象压缩(JPEG)编码算法及压缩过程的实现转 图象压缩(JPEG)编码算法及压缩过程的实现 摘要 本文首先介绍了静态图像压缩(JPEG)编码算法的基本原理、压缩的实现过程及其重要过程的离散余弦变换(DCT)算法的实现原理及软件实现的例程,其次着重介绍了压缩过程中的DCT、量化和编码三个重要步骤的实现原理。 关键词:图像压缩有损压缩 JPEG 离散余弦变换 DCT 量化 第一章图像压缩编码的综述 1.1 图象压缩的目的和方法 图象的数字化表示使得图象信号可以高质量地传输,并便于图像的检索、分析、处理和存储。但是数字图像的表示需要大量的数据,必须进行数据的压缩。即使采用多种方法对数据进行了压缩,其数据量仍然巨大,对传输介质、传输方法和存储介质的要求较高。因此图象压缩编码技术的研究显得特别有意义,也正

是由于图象压缩编码技术及传输技术的不断发展、更新,推动了现代多媒体技术应用的迅速发展。 1.1.1 图象压缩的目的 图象采样后,如果对之进行简单的8bit量化和PCM编码,其数据量是 巨大的。以CIF(Common Intermediate Format)格式的彩色视频信号为例,若采样速率为25帧/秒,采样样点的Y、U、V分量均为8bit量化,则一秒钟的数据量为: 352×288×3×8×25=60.83Mbit 要传输或存储这样大的数据量是非常困难的,必需对其进行压缩编码,在满足实际需要的前提下,尽量减少要传输或存储的数据量。 虽然数字图象的数据量巨大,但图象数据是高度相关的。一幅图象的内部相邻象素之间,相邻行之间的视频序列中相邻图象之间有大量冗余信息—空间相关性和时间相关性,可以使用各种方法尽量去除这些冗余信息,减少图象的数据量。 除了时间冗余和空间冗余外,在一般的图象数据中还存在信息熵冗余、结构冗余、知识冗余和视觉冗余。各种冗余就是压缩图象数据的出发点。图象编码的目的就在于采用各种方法去除冗余,以尽量少的数据量来表示个重建图象。 1.1.2图象压缩的几种方法 1.统计和字典的压缩方法 常规程序和计算机熵的数据对于那些基于利用统计变种的压缩,效果很好,这些统计变种表现在单个符号的频率以及符号或短语字符串的频率等方面,而基于字典的系统实际山就是假扮统计程序。可是遗憾的是,这类压缩对于连续色调图象的作用并不很好。 这些程序的主要问题产生于这样的一个事实:照片图象的象素广泛地分布在整个范围。如果将图象中的彩色用频率分布画出,那么频率分布图中,没有我们在统计压缩的成功的情况下所看到的“尖峰”状,实际上,如果延长这个分布图,那么从类似于电视那样的生活图象源中得出的分布图会趋于平展。这意味着,每个象素代码彼此是大约相同的出现机会,决定不存在挖掘熵差的任何机会。 基于字典的压缩程序的运行也有类似的问题,基于扫描照片的图象决定没有任何类型的数据特征以产生相同的短语的多次出现。例如,一个栅格化的图象,

一种基于MATLAB的JPEG图像压缩具体实现方法

一种基于MATLAB的JPEG图像压缩具体实现方法说明:该方法主要是对FPGA硬件实现编码的一个验证,MATLAB处理时尽量选择了简单化和接近硬件实现需要。 JPEG编码解码流程:BMP图像输入、8*8分块、DCT变换、量化、Zig_Zag 扫描、获取DC/AC系数中间格式、Huffman熵编码、DC/AC系数Huffman熵解码,反zig_zag扫描、反量化、反DCT变换、8*8组合、解码图像显示。 下面根据具体代码解释实现过程。 1.BMP图像输入 A=imread('messi_b.bmp'); %读取BMP图像矩阵 R=int16(A(:,:,1))-128; %读取RGB矩阵,由于DCT时输入为正负输入,G=int16(A(:,:,2))-128;%使得数据分布范围-127——127 B=int16(A(:,:,3))-128; 通过imread函数获取BMP图像的R、G、B三原色矩阵,因为下一步做DCT 转换,二DCT函数要求输入为正负值,所以减去128,使得像素点分布范围变为-127~127,函数默认矩阵A的元素为无符号型(uint8),所以如果直接相减差值为负时会截取为0,所以先用int16将像素点的值转为带符号整数。网上很多都提到了第一步的YUV转换,但是由于MATLAB在实验时YUV转换后色差失真比较严重,这里没有进行YUV转换。个人理解为YUV转换后经过非R/G/B原理显示器显示效果可能会比较好,或者如果图像有色差可以选择YUV调整。为了方便,读入的图像像素为400*296,是8*8的50*37倍,所以代码里没有进行8*8的整数倍调整。 2. 8*8分块 R_8_8=R(1:8,1:8);%取出一个8*8块 这里以R色压缩解码为例,后边解释均为R色编码解码过程,最后附全部代码。R_8_8为: 3.DCT变换 R_DCT=dct2(R_8_8); 使用MATLAB函数dct2进行DCT变换,也可使用DCT变换矩阵相乘的方法,即R_DCT=A* R_8_8*A T,其中A为DCT变换矩阵。R_DCT为:

JPEG+原理详细实例分析

JPEG 原理详细实例分析转https://www.doczj.com/doc/7b17472596.html,/developerworks/cn/linux/l-c... 作为一个基本的图像压缩方式,JPEG 已经得到了广泛的运用,但JPEG 相关的基本原理,却经常被忽视,或解释得很不确切。这里我们详细讨论一下JPEG 的编码原理,并结合实例来给出一个更加感性的认识。JPEG 编码的详细过程有着诸多的信息可以给我们巨大的启发,我们在这里讨论的就是要对这些信息做一个具体细致的分析,通过我们的讨论,大家会对JPEG 编码过程中出现的内容有一个确切的了解,并且能了解到这些内容的来龙去脉。 一、系统架构 本文以一个实际的产品为例,来说明JPEG 在其中的应用。 本系统为一个嵌入式Linux 网络播放器,主要的功能为播放家庭网络中的多媒体文件,在家庭客厅等环境中有着大量的应用,它可以给用户提供更方便快捷的媒体文件的播放方式,并能充分利用家庭音响系统的巨大功能,而非PC 环境下有限的外部设备,大大改善了媒体文件的播放体验。 系统主要的功能包括: 本系统架构如下图:

本系统是基于嵌入式Linux 的一个应用,使用的是ucLinux 2.4.22,并使用了microwindows 作为GUI 界面,底层使用了Linux kernel 的FrameBuffer 作为显示输出。 此系统在两个方面使用到了JPEG 库: 1、UI 的显示,即各种人机交互界面,考虑到用户体验,所以大量使用了贴图来美化UI 2、JPEG 图片文件的全屏播放,包括用户手中的各种照片等 二、JPEG 概述 JPEG 是Joint Photographic Experts Group 的缩写,即ISO 和IEC 联合图像专家组,负责静态图像压缩标准的制定,这个专家组开发的算法就被称为JPEG 算法,并且已经成为了大家通用的标准,即JPEG 标准。JPEG 压缩是有损压缩,但这个损失的部分是人的视觉不容易察觉到的部分,它充分利用了人眼对计算机色彩中的高频信息部分不敏感的特点,来大大节省了需要处理的数据信息。 人眼对构成图像的不同频率成分具有不同的敏感度,这个是由人眼的视觉生理特性所决定的。如人的眼睛含有对亮度敏感的柱状细胞1.8亿个,含有对色彩敏感的椎状细胞0.08亿个,由于柱状细胞的数量远大于椎状细胞,所以眼睛对亮度的敏感程度要大于对色彩的敏感程度。 总体来说,一个原始图像信息,要对其进行JPEG 编码,过程分两大步: 1、去除视觉上的多余信息,即空间冗余度 2、去除数据本身的多余信息,即结构(静态)冗余度 1、去除视觉上的多余信息 当你拿到一个原始未经处理的图像,是由各种色彩组成的,即在一个平面上,有各种色彩,而这个平面是由水平和垂直方向上的很多点组成的。实际上,每个点的色彩,也即计算机能表示的每个像素点的色彩,能分解成红、绿、蓝,即RGB 三元色来表示,即这三种颜色的一定比例的混合就能得到一个实际的色彩值。

JPEG文件解码详解

JPEG文件解码详解 JPEG(Joint Photographic Experts Group)是联合图像专家小组的英文缩写。它由国际电话与电报咨询委员会CCITT(The International Telegraph and Telep hone Consultative Committee)与国际标准化组织ISO于1986年联合成立的一个小组,负责制定静态数字图像的编码标准。 小组一直致力于标准化工作,开发研制出连续色调、多级灰度、静止图像的数字图像压缩编码方法,即JPEG算法。JPEG算法被确定为国际通用标准,其适用范围广泛,除用于静态图像编码外,还推广到电视图像序列的帧内图像压缩。而用JPEG算法压缩出来的静态图片文件称为JPEG文件,扩展名通常为*.jpg、*. jpe、*.jpeg。 JPEG专家组开发了两种基本的压缩算法、两种数据编码方法、四种编码模式。具体如下: 压缩算法: ●有损的离散余弦变换(Discrete Cosine Transform,DCT); ●无损的预测技术压缩。 数据编码方法: ●哈夫曼编码; ●算术编码; 编码模式: ●基于DCT顺序模式:编/解码通过一次扫描完成; ●基于DCT递进模式:编/解码需要多次扫描完成,扫描效果从粗糙到精细, 逐级递进; ●无损模式:基于DPCM,保证解码后完全精确恢复到原图像采样值; ●层次模式:图像在多个空间多种分辨率进行编码,可以根据需要只对低分 辨率数据作解码,放弃高分辨率信息。 在实际应用中,JPEG图像使用的是离散余弦变换、哈夫曼编码、顺序模式。 JPEG压缩编码算法的主要计算步骤如下: (0) 8*8分块。 (1) 正向离散余弦变换(FDCT)。 (2) 量化(quantization)。 (3) Z字形编码(zigzag scan)。 (4) 使用差分脉冲编码调制(DPCM)对直流系数(DC)进行编码。 (5) 使用行程长度编码(RLE)对交流系数(AC)进行编码。 (6) 熵编码。 笔者在实践过程中查阅了大量的资料,发现大多数书籍资料和网上资料都是从编码角度分析JPEG的编/解码方式,并且都只是介绍编码过程中的主要方法。所以,本文从解码角度详细分析JPEG的编/解码过程,并且加入许多笔者实践过

JPEG图像压缩实验.

JPEG 静态图像压缩实验指导书 一、实验目的 1.了解多媒体通信中图像压缩技术 2.熟悉JPEG图像压缩编码过程 3.掌握二维DCT变换算法 二、实验原理 JPEG(Joint Photographic Experts Group) 是一个由ISO和ITU-T两个组织机构联合组成的一个图像专家小组,负责制定静态的数字图像数据压缩编码标准,这个专家组开发的算法称为JPEG算法,并且成为国际上通用的标准。JPEG是一个适用范围很广的静态图像数据压缩标准,既可用于灰度图像又可用于彩色图像。JPEG不仅适于静止图像的压缩,电视图像的帧内图像的压缩编码,也常采用此算法。 JPEG标准定义了多种工作模式,其中最基本的是基于8×8块的DCT顺序编码,将一帧图像分为8×8的块,然后按照从左至右、自上而下的顺序,对块进行DCT、量化和熵编码。其编、解码框图如下: 图1 基于DCT的顺序编码框图 DCT解码器 图2 基于DCT的顺序解压缩框图

JPEG压缩编码算法的主要计算步骤: 1)正向离散余弦变换(FDCT)。 2)量化(quantization)。 3)Z字形编码(zigzag scan)。 4)使用差分脉冲编码调制(differential pulse code modulation,DPCM) 对直流系数(DC)进行编码。 5)使用行程长度编码(run-length encoding,RLE)对交流系数(AC)进行 编码。 6)熵编码(entropy coding)。 三、实验内容 按照上述压缩过程实现一幅图像的压缩,生成符合JPEG标准的图像文件JPEG图像编码流程如下: 图3 JPEG图像编码流程 1.DCT变换 对8×8的图像数据块进行二维DCT的变换,把能量集中在少数几个系

JPEG编码解码流程

JPEG 图片压缩算法流程详解 薛晓利 JPEG 是Joi nt Photogra phic Exports Group 的英文缩写,中文称之为联合图像专家小组。 该小组隶属于ISO 国际标准化组织,主要负责定制静态数字图像的编码方法, 即所谓的JPEG 算法。JPEG 专家组开发了两种基本的压缩算法、两种熵编码方法、四种编码模式。如下所 示: 压缩算法: (1) 有损的离散余弦变换 DCT ( Discrete Cosine Transform ) (2) 无损的预测压缩技术; 熵编码方法: (1) Huffman 编码; (2) 算术编码; 编码模式: (1) (2) 递增; (3) (4) 11个步骤:颜色模式转换、采样、分块、离 DC 系数的差分脉冲调制编码、 DC 系数的 系数的中间格式计算、熵编码。下面,将一 (1)颜色模式转换 JPEG 采用的是YCrCb 颜色空间,而 进行压缩,首先需要进行颜色空间的转换。 色度和饱和度(也有人将Cb,Cr 两者统称为色 度),三者通常以 Y,U,V 来表示,即用 U 代表 Cb ,用V 代表Cr 。RGB 和YCrCb 之间的转换关系如下所 基于DCT 的顺序模式:编码、解码通过一次扫描完成; 基于DCT 的渐进模式:编码、解码需要多次扫描完成,扫描效果由粗到精, 逐级 无损模式:基于 DPCM ,保证解码后完全精确恢复到原图像采样值; 层次模式:图像在多 个空间分辨率中进行编码,可以根据需要只对低分辨率数据 做解码,放弃高分辨率信息; 在实际应用中,JPEG 图像编码算法使用的大多是离散余弦变换、 Huffman 编码、顺序 编码模式。这样的方式,被人们称为JPEG 的基本系统。这里介绍的JPEG 编码算法的流程, 也是针 对基本系统而言。 基本系统的JPEG 压缩编码算法一共分为 散余弦变换(DCT )、Zigzag 扫描排序、量化、 中间格式计算、AC 系数的游程长度编码、 一介绍这11个步骤的详细原理和计算过程。 AC 采用的是RGB 颜色空间,要想对 BMP 图片 YCrCb 颜色 空间中,丫代表亮度,Cr,Cb 则代表 BMP

JPEG编码解码流程模板

JPEG图片压缩算法流程详解 薛晓利 JPEG 是JointPhotographicExportsGroup 的英文缩写, 中文称之为联合图像专家小组。该小组隶属于ISO国际标准化组织,主要负责定制静态数字图像的编码方法,即所谓的JPEG算法。JPEG专家组开发了两种基本的压缩算法、两种熵编码方法、四种编码模式。如下所示:压缩算法: (1)有损的离散余弦变换DCT( DiscreteCosineTransform) (2)无损的预测压缩技术; 熵编码方法: (1)Huffman 编码; (2)算术编码; 编码模式: (1)基于DCT 的顺序模式: 编码、解码经过一次扫描完成; (2)基于DCT 的渐进模式: 编码、解码需要多次扫描完成, 扫描效果由粗到精, 逐级递增; (3)无损模式: 基于DPCM, 保证解码后完全精确恢复到原图像采样值; (4)层次模式: 图像在多个空间分辨率中进行编码, 能够根据需要只对低分辨率数据做解码, 放弃高分辨率信息; 在实际应用中, JPEG 图像编码算法使用的大多是离散余弦变换、Huffman编码、顺序编码模式。这样的方式,被人们称为JPEG的基

本系统。这里介绍的JPEG编码算法的流程,也是针对基本系统而言。基本系统的JPEG压缩编码算法一共分为11个步骤:颜色模式转换、采样、分块、离散余弦变换(DCT)、Zigzag扫描排序、量化、DC系数的差分脉冲调制编码、DC系数的中间格式计算、AC 系数的游程长度编码、AC系数的中间格式计算、熵编码。下面,将一一介绍这11个步骤的详细原理和计算过程。 (1)颜色模式转换 JPEG采用的是YCrCb颜色空间,而BMP采用的是RGB颜色空间,要想对BMP图片进行压缩,首先需要进行颜色空间的转换。YCrCb 颜色空间中,丫代表亮度,Cr,Cb则代表色度和饱和度(也有人将Cb,Cr 两者统称为色度),三者一般以Y,U,V来表示,即用U代表Cb, 用V代表Cr。RGB和丫CrCb之间的转换关系如下所示:丫 =0.299R+0.587G+0.114B Cb=-0.1687R-0.3313G+0.5B+128 Cr=0.5R=0.418G-0.0813B+128 一般来说,C值(包括CbCr)应该是一个有符号的数字,但这里经过加上128,使其变为8位的无符号整数,从而方便数据的存储和计算。 R=Y +1.402(Cr-128) G=Y-0.34414(Cb-128)-0.71414(Cr-128) B=Y +1.772(Cb-128) (2)采样

相关主题
文本预览
相关文档 最新文档