一种基于Visual C++的JPEG无损压缩算法的实现

合集下载

jpg压缩算法 c语言

jpg压缩算法 c语言

jpg压缩算法c语言JPG压缩算法是一种常用的图片压缩算法,它可以在保持相对较高的图像质量的同时大幅减小图像文件的大小。

本文将详细介绍JPG压缩算法的原理和实现,以及在C语言中如何实现该算法。

1. 什么是JPG?JPG(Joint Photographic Experts Group)是一种常见的图像文件格式,也是一种常用的图像压缩算法。

JPG文件通常以.jpg或.jpeg作为文件扩展名,因其压缩率高而且广泛支持而被广泛应用于互联网和数字影像领域。

2. JPG压缩算法的原理是什么?JPG压缩算法基于人眼对图像细节和颜色的感知特性,通过舍弃一些不重要的信息来减小文件大小。

具体而言,JPG算法主要包含两个步骤:离散余弦变换(Discrete Cosine Transform,DCT)和量化。

2.1 离散余弦变换(DCT)离散余弦变换是JPG算法的核心步骤之一,它将输入的图像数据转化为一组离散余弦变换系数。

离散余弦变换能够捕捉到图像的频域特征,分解出了原始图像中的低频和高频信息。

2.2 量化量化是JPG算法的另一个重要步骤,它通过将DCT系数分组并缩小它们的取值范围来降低图像数据的精度。

换句话说,量化可以舍弃一部分图像细节,从而减小文件大小。

3. 在C语言中如何实现JPG压缩算法?要在C语言中实现JPG压缩算法,我们可以按照以下步骤进行:3.1 读取图像文件首先,我们需要使用C语言的文件操作函数来读取原始的图像文件。

在内存中,图像通常以像素矩阵的形式存在,我们可以将其存储在一个二维数组中。

3.2 将图像数据进行色彩空间转换为了进行DCT变换,我们需要先将图像数据从RGB色彩空间转换到YUV 色彩空间。

这可以通过应用一个预定义的转换矩阵来实现。

3.3 进行离散余弦变换(DCT)接下来,我们将对每个图像块(通常是8x8像素)进行离散余弦变换。

该过程涉及到计算每个图像块中的DCT系数,并将其存储在一个新的矩阵中。

视觉无损压缩JPEG-XS编码标准研究

视觉无损压缩JPEG-XS编码标准研究

. 381 引言随着音视频技术的不断发展,节目制播有两个重要的演进方向:一是视频从现有的标清、高清视频向以4K/8K、VR/AR 为代表的高新视频发展,带来了数据量的显著增长,对存储和传输提出了巨大的压力和挑战;二是制播传输从传统SDI 架构向IP 架构过渡,极大地增加了系统部署的灵活性和便捷性。

以8K 超高清视频为例,原始视摘要:随着4K、8K、VR、AR 等高新视频的发展,视频数据量显著增长,对节目制播传输提出了巨大的挑战。

传统的制播域编码难以同时满足实时制播场景所需的低延时、低复杂度、高质量需求,因此国际标准组织开展了JPEG-XS 编码标准制定工作。

本文跟踪调研了JPEG-XS 标准制定过程,研究了编码关键技术,分析了视觉无损压缩的主观评估方法,为该标准的实际应用和测试提供技术支持。

关键词:JPEG-XS 主观评估 视觉无损编码* 本文受国家广播电视总局广播电视科学研究院2021年基本科研业务费项目“超高清视频实时制播浅压缩编码关键技术研究”(项目编号:JBKY20210090 )资助39. 压缩方式来保证能够将视频数据实时写入存储设备。

一般采用SSD 或者SD 卡进行存储,以4K/60p/4:2:2/10bit 为例,视频速率约10Gbps,如果SSD 卡写入速度为4Gbps,则需要的压缩比大概为2.5:1。

(3)视频内存缓冲在视频处理设备内部实现轻量级的缓冲区压缩,可以大大减少设备尺寸、互连线的数量,延长电池供电系统的电池寿命。

(4)VR/AR 视频采集和渲染对于VR/AR 应用,为了实现沉浸式的体验,系统实现需要符合低延时的需求,保证画面移动和显示的同步。

2.2 技术需求为了满足上述应用场景,标准技术需求[6]有如下几个方面。

(1)支持多种图像格式视频分辨率可支持到8K,采样格式支持4:4:4/4:2:2,量化精度可支持到16bit,帧率可支持到120p,色域支持BT.2020等。

基于JPEG图像压缩及其仿真实现

基于JPEG图像压缩及其仿真实现
9 9
9 9 9 9 9 9 9 9 9 9
9 9
9 9 9 9 9 9 9 9 9 9
9 9
9 9 9 g 9 9 9 9 9 9
9 9
9 9 9 9 9 9 9 9 9 9
9 9
t 7
9 9 9 9
l 8
2 1
2 4
2 6
4 7
6 6
9 g
g g
9 9
9 9
9 9
9 9
9 9
9 9
2 4

2 6 6 6 9 9 9 9 g 9
9 9
5 6 9 9 9 9 9 9 9 g
9 9
9 9 9 9 9 9 9 9 9 9
如下 : 峰峰对 数信噪 比:
c o m p r e s s i o n wi t h M a t l a b ,c a n g r e a t l y i mp r o v e t h e
c o mp r e s s b n e f f i c i e n c y Байду номын сангаас a n d c o r mr e s  ̄ o n a c c u r a c y.
摘 要 静 止 图像 的压缩 在现 实 中有着 非 常重要 的意
义 。数据 中存在 着 冗余 为 图像压 缩提 供 了可 能性 。 ̄ ] M a t l a b 实现静 止 图像 压 缩 ,可 以很 大 的提 高压缩 效率 以及压缩的精度 。 关键 词 J P E G;图像 压缩 ;仿真
图1 J P E C  ̄ 码器 .
压 缩 后救 据 - 馏 I 蝙羁鼯

逆她化罄

(完整版)多媒体考试题库-有答案

(完整版)多媒体考试题库-有答案

多媒体应用技术练习题一、单选题(每小题2分,共20分)1、我们的家用电脑既能听音乐,又能看影碟,这是利用了计算机的(C )A、人工智能技术B、自动控制技术C、多媒体技术D、信息管理技术2、下列哪个文件格式即可以存储静态图象,又可以存储动态图象( C )A、.jpgB、.midC、.gifD、bmp3、我们可以利用以下哪些东西来帮我们管理我们放在网络上的资源?( B )①、网络硬盘②、博客③、电子邮箱④、电脑硬盘A、①②B、①②③C、①③④D、②③④4、班主任小林想开一个有关“弘杨奥运精神”的主题班会,现在他手里有一张有关奥运会的光盘,但是他只想要其中的一个片段,如果你是小林,你会利用以下哪个计算机软件把这片段截取出来呢?( C )A、WinampB、ACDSeeC、超级解霸D、cool Edit Pro5、下列哪种类型文件可以存储多媒体动画( A )A、swfB、bmpC、docD、xls6、下列哪个扩展名表示数字音乐文件( B )A、aviB、midC、bmpD、wmf7 、多媒体信息不包括( C )A、音频、视频B、动画、影象C、声卡、光盘D、文字、图象8、下列关于多媒体输入设备的描述中,不属于的是( D )。

A.红外遥感器B.数码相机C.触摸屏D.调制解调器9、多媒体计算机技术中的“多媒体”,可以认为是(B)A、磁带、磁盘、光盘等实体B、文字、图形、图像、声音、动画、视频等载体C、多媒体计算机、手机等设备D、互联网、photoshop10.下列属于是多媒体技术发展方向的是( D )。

(1)高分辨率,提高显示质量(2)高速度化,缩短处理时间(3)简单化,便于操作(4)智能化,提高信息识别能力A.(1)(2)(3) B.(1)(2)(4) C.(1)(3)(4) D.全部二、填空题(每空2分,共24分)1、某学生想搜集数字图片素材,他可以通过扫描仪扫描,还可以通过(数码相机摄取)、(作图软件设计)、(网络上搜索)等方式来搜集2、在工具箱图中指出使用过的魔术棒工具、套索工具、选择工具。

jpeg算法实验报告

jpeg算法实验报告

jpeg算法实验报告JPEG算法实验报告摘要:本实验旨在研究和分析JPEG(Joint Photographic Experts Group)算法的原理和应用。

通过实验,我们对JPEG算法的压缩效果、图像质量和压缩比进行了评估,并对其优缺点进行了探讨。

实验结果表明,JPEG算法在图像压缩方面具有较高的效率和广泛的应用前景。

一、引言JPEG算法是一种广泛应用于图像压缩的算法,它通过对图像进行离散余弦变换(DCT)和量化处理来实现压缩。

JPEG算法以其高效的压缩率和较好的图像质量而在图像处理领域得到广泛应用。

本实验将通过实际操作和实验数据来验证JPEG算法的有效性和优势。

二、实验方法和步骤1. 实验环境和工具:使用MATLAB软件进行实验,选择合适的图像进行处理和压缩。

2. 实验步骤:a. 选择一幅高分辨率的彩色图像作为实验对象。

b. 将图像转换为YCbCr颜色空间,以便进行离散余弦变换。

c. 对图像进行离散余弦变换,得到频域图像。

d. 对频域图像进行量化处理,降低高频分量的精度。

e. 对量化后的图像进行反量化和反离散余弦变换,得到压缩后的图像。

f. 计算压缩后图像与原始图像之间的均方差(MSE)和峰值信噪比(PSNR),评估图像质量。

g. 计算压缩比,评估压缩效果。

三、实验结果和分析在实验中,我们选择了一张分辨率为1920x1080的彩色图像进行处理和压缩。

经过JPEG算法的处理,我们得到了压缩后的图像,并计算了MSE、PSNR和压缩比等指标。

1. 图像质量评估通过计算MSE和PSNR,我们可以评估压缩后图像的质量。

实验结果显示,经过JPEG算法压缩后的图像,MSE较小,PSNR较高,表明图像质量较好。

这是因为JPEG算法通过量化处理,减少了高频分量的细节信息,但保留了图像的主要特征,使得图像在视觉上仍然保持较高的质量。

2. 压缩效果评估通过计算压缩比,我们可以评估JPEG算法的压缩效果。

实验结果显示,JPEG 算法在保持较高图像质量的前提下,能够实现较高的压缩比。

JPEG压缩原理LZW算法

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是图像压缩编码标准JPEG(Joint Photographic Experts Group)是一种常见的图像压缩编码标准,它是一种无损压缩技术,可以有效地减小图像文件的大小,同时保持图像的高质量。

JPEG压缩技术广泛应用于数字摄影、网页设计、打印和传真等领域,成为了图像处理中不可或缺的一部分。

JPEG压缩编码标准的原理是基于人眼对图像细节的感知特性,通过去除图像中的冗余信息和不可见细节,从而实现图像的压缩。

在JPEG压缩中,图像被分割成8x8像素的块,然后对每个块进行离散余弦变换(DCT),将图像从空间域转换到频域。

接着,对DCT系数进行量化和编码,最后使用熵编码对图像进行压缩。

这样的压缩方式可以显著减小图像文件的大小,同时保持图像的视觉质量。

JPEG压缩标准的优点之一是可以根据需要选择不同的压缩比,从而在图像质量和文件大小之间取得平衡。

在数字摄影中,用户可以根据拍摄场景和要求选择不同的压缩比,以满足对图像质量和文件大小的需求。

此外,JPEG格式的图像可以在不同的设备和平台上进行广泛的应用和共享,具有很好的兼容性。

然而,JPEG压缩也存在一些缺点。

由于JPEG是一种有损压缩技术,因此在高压缩比下会出现明显的失真和伪影。

特别是在连续的编辑和保存过程中,图像的质量会逐渐下降,出现“JPEG失真”。

因此,在图像处理中需要注意选择合适的压缩比,避免过度压缩导致图像质量下降。

另外,JPEG格式不支持透明度和动画等高级特性,对于一些特殊的图像处理需求可能不够灵活。

在这种情况下,可以考虑使用其他图像格式,如PNG和GIF,来满足特定的需求。

总的来说,JPEG作为一种图像压缩编码标准,具有广泛的应用和重要的意义。

它在数字摄影、网页设计、打印和传真等领域发挥着重要作用,为图像处理和传输提供了有效的解决方案。

然而,在使用JPEG格式进行图像处理时,需要注意选择合适的压缩比,避免过度压缩导致图像质量下降。

同时,也需要根据具体的需求考虑使用其他图像格式来满足特定的需求。

一种JPEG无损压缩算法的仿真与实现


的前提下是不能去除 的, 于是先对 原 JE P G图像 文件 做 出更 有效 的规 整 , 其次再利用无损压缩算法进行压缩 成为提高压
2.D p rme to g n n n ev n in lRa il g a c rC n e ,S n Ya —S n Un v ri , e a t n fI ma ig a d I tr e t a do o y C n e e t r u t e ie s y o t
摘要: 研究 图像压缩算法优化算法 的效果 , 针对 目前通用无损压缩算法都 难以对 JE P G文件进行压缩 , 出了一种洗牌算法 提 和无损压缩算法相结合的无 损压缩方法 。在将 JE P G图像文件进行压缩前 对文件进行有效规整 , 产生冗余 , 然后再结合通用 无损压缩算法进行无损压缩进一步去除文件内部信息冗余 。进行仿真实 验验证 , 算法能够进 一步将 JE P G图像 文件无损压 缩 l 一 %。结果表 明, % 3 上述算法能进一步无损去 除文件 内部冗余 , 减小文件体积 , 算法 简单 , 时间复杂度低 , 于实现 , 易 是
G aghuG a gog5 06 ,C ia unzo un dn 100 hn )
ABS TRACT : ie a ose sag r h f aacmp eso r w y fce totx die ce t oJ EG d - Unv r llsls o tmso t o rsinaea a se iin t s l i d l t e a f in P a n ni t t.T ep p rd asw t e lsls o rsin frJ E i g . Ac odn o tec aa trs co P a h a e e i t o sescmpeso o P G ma e l hh cr ig t h h ceit fJ EG,an w r i e s u l grtm spo oe ors eteJ EG,a dte s eu ie a osesagrtmst o rs ersz h f ea o h i rp sdt ei h P l i z n h nu et nv rl lsls o h oc mp est e i h s l i h e J EG.I ee d s gtetpc x pea x e me th sb e ar do t do tie rfrbecmp e— P n t n ,ui ia e  ̄ l sep r n a e nc ri u ban d ap ea l o rs h n h y l i e n a e

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

基于JPEG压缩编码的数据压缩算法的研究与实现树2009-10-12 19:39:46 阅读68 评论2 字号:大中小JPEG压缩方法由于其较高的压缩比和理想的压缩效果,是目前应用最广泛的图像压缩方法。

它采用一种特殊的有损压缩算法,将不易被人眼察觉的图像颜色删除,从而能够将图像压缩在很小的储存空间。

JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得到较好的图像品质。

本文对JPEG图像压缩方法进行了基本介绍,包括它的发展历史,现阶段的研究情况,压缩原理等。

其中重点介绍了哈夫曼编码和游程编码的基本原理和在JPEG压缩编码算法中的具体应用,以及以变换编码方法为例,介绍了离散余弦变换(DCT)的基本过程。

最后介绍了用VC++编写JPEG压缩程序所涉及到的几个基本模块,从而实现了BMP 图像和JPEG图像的相互转换,这也是最主要的编程思想和依据。

关键词:图像压缩,JPEG,DCT,哈夫曼编码,行程编码摘要IABSTRACT II第一章绪论11.1 图像压缩的意义11.2 JPEG图像压缩的国际标准21.3 本论文的研究内容3第二章JPEG图像压缩技术基础研究 42.1 JPEG图像压缩技术42.2 JPEG压缩中图像文件的格式52.2.1 BMP图像的格式52.2.2 JPEG图像格式82.3 本章小结8第三章JPEG图像压缩相关算法及实现93.1 JPEG图像压缩编码方法93.1.1 哈夫曼编码的原理103.1.2 哈夫曼编码在图像压缩中的实现113.2 JPEG图像压缩原理133.2.1 前向DCT变换143.2.2 量化153.2.3 使用哈夫曼可变字长编码器对量化系数进行编码16 3.3 本章小结19第四章JPEG图像压缩的设计与实现204.1 总体设计204.1.1设计思想204.1.2 模块设计204.2 JPEG图像压缩软件的实现214.2.1 BMP图像的读入、显示模块224.2.2 DCT量化编码模块254.2.3 组成位数据流模块294.2.4 JPEG图像存储模块314.2.5 解压缩模块314.3 软件应用324.4 压缩效果的评价334.4.1 压缩效果理论分析344.4.2 压缩效果实际分析344.5 本章小结35第五章总结365.1 JPEG图像压缩结论365.2 JPEG图像压缩前景分析36参考文献38致谢39附录40ABSTRACTJPEG compression is the most widely used image compression method because of its higher compression ratio and ideal compression effect. It uses a special lossy compression algorithm and deletes colors of images that is not detected easily by human eye, thus images can be compressed in a small storage space. JPEG compression technology is very advanced, it is used lossy compression methods to remove redundant image data. Thus, high compression ratios can be got, at the same time, a very rich and vivid images can be displayed, in other words, it is possible to get better image quality with the least disk space.The paper introduces the JPEG compression algorithm firstly, including its history and the basic situation of this stage, compression principle, and so on. Referring to the JPEG compression method, the paper focuses on the basic tenets of Huffman coding and run-length coding and their specific application in JPEG compression algorithm. To transform coding method as an example, it introduces the discrete cosine transform (DCT) the basic process. Finally, Using the VC + +, it involves several basic modules of JPEG compression process and realizes the BMP images and JPEG image conversion, which is the most important ideological basis for programming.KEY WORDS:Image compression, JPEG, DCT, Huffman coding, run-length coding第一章绪论1.1 图像压缩的意义人类社会已经进入信息时代了,在这个时代,人们每天都可以通过各种手段(如PDA、网络、电视、广播等等)获得大量的信息,而信息的本质,就要求交流和传播,在有必要的时候还要进行储存。

jpeg双重压缩检测原理

jpeg双重压缩检测原理JPEG双重压缩检测原理导言:随着互联网的快速发展和智能设备的普及,图像的传输和存储变得越来越重要。

为了减小图像文件的大小,提高传输速度和节省存储空间,人们发明了各种图像压缩算法。

JPEG(Joint Photographic Experts Group)是一种常用的图像压缩格式,但是如果对JPEG图像进行多次压缩,会导致图像质量的严重损失。

因此,为了保证图像质量,检测JPEG双重压缩成为一个重要的问题。

本文将介绍JPEG双重压缩检测的原理和方法。

一、JPEG图像压缩原理JPEG是一种有损压缩算法,它可以将图像从原始的RGB颜色空间转换为亮度(Y)和色度(Cb和Cr)颜色空间,并对每个颜色通道进行压缩。

JPEG压缩算法主要包括离散余弦变换(DCT)、量化和熵编码三个步骤。

1. 离散余弦变换(DCT):将图像从空间域转换为频域,提取图像的频率信息。

DCT将图像分成若干个8x8的块,对每个块进行离散余弦变换得到频域系数。

2. 量化:将DCT变换后的频域系数进行量化,减少高频信息的精度,从而降低数据量。

JPEG使用了不同的量化表对亮度和色度通道进行量化,亮度通道的量化表较为精细,色度通道的量化表较为粗糙。

3. 熵编码:对量化后的频域系数进行编码。

JPEG使用了一种基于霍夫曼编码的熵编码方法,将频域系数按照出现概率进行编码,使得出现概率较高的系数用较短的编码表示,出现概率较低的系数用较长的编码表示。

二、JPEG双重压缩的特征当对一张JPEG图像进行多次压缩时,每次压缩都会引入一定的失真,导致图像质量的进一步下降。

通过分析JPEG双重压缩的特征,可以检测出图像是否经过了多次压缩。

1. 压缩特征:JPEG压缩会引入一定的压缩痕迹,如亮度和色度的边缘模糊、高频细节的缺失等。

多次压缩会使这些压缩痕迹更加明显,因此可以通过分析图像的压缩特征来检测JPEG双重压缩。

2. 压缩参数:JPEG压缩算法中的量化表是影响图像质量的重要参数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一种基于Visual C++的JPEG无损压缩算法的实现
【摘要】现有通用压缩软件对JPEG文件压缩效果均不佳,本文分析了其原因,提出了应用一种新颖的洗牌算法来对JPEG文件进行预编码,再运用无损压缩工具对文件进行无损压缩,结果表明,这种方法能进一步去除文件内部冗余,减小文件体积。

【关键词】压缩;解压;编码;同父洗牌算法;洗牌算法
0.前言
对于通用无损压缩而言,代表算法是哈夫曼算法、LZ及其衍生算法(LZW, deflate等),衍生的软件为WinRAR、WinZip,7-zip等,它们的运行流程基本上是一致的,即直接对源文件进行压缩。

因源文件中排放的序列的不同而存在一定的冗余度,这种冗余度在不对源文件作规整的前提下是不能去除的。

对源文件做出更有效的规整已成为提高压缩比的又一手段。

为了解决以上问题,本文应用一种新颖的洗牌(shuffle)算法-同父洗牌算法(专利号为200810073769.0),先对JPEG图像文件进行有效规整,再运用无损压缩工具对文件进行无损压缩,达到进一步去除文件内部信息冗余的目的。

大量实验表明,这种方法可以在原有压缩比的基础上有效去除1-3%的冗余,且算法简单,易于实现。

1.基于同父洗牌算法的编解码介绍
洗牌( Shuffle)算法的作用是对数据的比特位进行重排, 把比特位的排列变成另一个排列,有多种洗牌函数, 如均匀洗牌、第k 个子洗牌、第k 个超洗牌等等, 逆洗牌函数将排列变换成原来的排列顺序。

本文应用了一种新颖洗牌算法--同父洗牌算法(专利号为200810073769.0),顾名思义,如果位于A牌前面一张牌是C牌,位于B牌前面一张牌也是C牌,则定义C牌为A和B牌的父牌。

洗牌时,将A牌和B牌按先后出现顺序排列在一起。

这种基于洗牌( Shuffle)算法的编解码我们把它命名为XCS编解码,它基于VC++6.0实现的源代码存于附件中。

下面是结合JPEG文件和同父洗牌算法具体描述。

1.1 洗牌算法原理
对JPEG图像文件进行同父洗牌的规则规整,包括以下步骤:
①以二进制方式读取JPEG图像文件,并对其进行分组;所述分组是从二进制数的第一个比特位开始,一般按每8个比特位为一组,如果不够8位的,则在不够的这组二进制数的前面补0并补够8位。

②将每组二进制代码转换成无符号十进制数,并将第一组二进制代码转换成的无符号十进制数保存于新建数组H中。

由于第一个分组数据转换成的无符号十进制数在0-255之间,为了节省空间,可将该无符号十进制数设定为占用1个字节的空间。

③顺序建立256个数组Ei , i=0-255;用于存放与i对应的父数据之后的子数据;对于任意两个相邻分组而言,位于前面的分组数据设为父数据,位于后面的分组数据设为子数据。

④按由小到大的顺序遍历转换成的无符号十进制数,将每个父数据后面出现的子数据,存放在步骤③所建立的第i个数组E[i]中,其中i=父数据,若不存在与i相同的父数据,则该数组E[i]为空。

⑤判断遍历是否结束,若是则统计完成遍历后每个数组的长度,并存放于新建数组G中;若否则继续步骤④。

所述数组G中记录每个数组的长度的元素一般占用4个字节的空间。

⑥将256个Ei数组中的内容依次首尾相连保存于新建数组I中。

⑦将数组H、数组G和数组I中的内容依次首尾相连合并,保存于新建数组J中,数组J即为变换后的JPEG图像文件。

可以看出,变换后的文件比原文件体积大1001字节。

1.2 反洗牌算法
对变换后的JPEG图像文件进行反洗牌,步骤为:
①以二进制方式读取该可逆变换后的JPEG图像文件到新建数组J中,并对其进行数据分组。

所述分组是从第一个比特位开始,一般以每8个比特位为一组。

②将每组数据转换成无符号十进制数,并读取出第一个无符号十进制数存放于新建数组H中;读取出用于存放子数据的数组的长度元素,并将该长度元素依次存放于新建数组G中。

上述读取的规则按压缩时存入数据所占用的空间来顺序读取,即读取数组J
中占用1个字节空间的无符号十进制数放入数组H中;读取该无符号十进制数之后的每4个字节为一个元素的数组长度于数组G中。

③顺序建立256个数组Ei , i=0-255;用于存放与i对应的父数据之后的子数据。

④将数组J中剩余的数据,按数组G中子数据数组的长度分别依次存放于步骤3)建立的数组E[i]中。

⑤建立A数组,将H数组中数据存放于A数组第一个位置。

⑥顺序读取A数组的数据作为父数据,在256个数组群Ei中寻找i=父数据的数组E[i]中第一个没有已读标志的数据作为子数据,并将该子数据存于A数组中继该父数据之后的下一个空位置,同时将对应数组E[i]中的该子数据的标志位置为已读。

⑦扫描256个数组Ei,并检查其中所有数据的标志位是否全部为已读,若否则继续步骤⑥;若是则停止扫描,将数组A保存为文件,该文件即为原始JPEG 图像文件。

1.3流程图如下:
压缩/解压流程图如图1、图2所示
图1 对JPEG图像文件进行洗牌处理的流程图
图2 对解压后的JPEG图像文件进行还原处理的流程图
1.4基于同父洗牌算法的编解码的应用方向
基于同父洗牌算法的编解码能有效地去除文件的冗余,将无损压缩率提升1%~3%,它可以作为其他压缩算法的补充,提升压缩性能。

2.压缩工具简介
为能更好展现XCS编解码对提升压缩效果的作用,此软件采用了DOS系统中的gzip.exe作为压缩程序,tar.exe作为文件夹打包程序。

压缩程序是tar.exe,使用tar.exe程序压缩出来的文件称为gz文件,gz文件的命令通常都是以.gz结尾的。

语法:gzip [选项] 压缩(解压缩)的文件名
命令:
- * 将文件压缩。

- d 将压缩文件解压。

打包程序是tar.exe,使用tar程序打出来的包称为tar包,tar包文件的命令通常都是以.tar结尾的。

语法:tar [主选项+辅选项][文件或者目录]
命令:
- cvf 将文件夹打包。

- xvf 将tar文件解压。

3.发工具简介及系统运行环境
VC++是微软公司开发的一个IDE(集成开发环境),是Windows平台上的C++编程环境,VC++应用程序的开发主要有两种模式,一种是WIN API方式,另一种则是MFC方式,传统的WIN API开发方式比较繁琐,而MFC则是对WIN API 再次封装,所以MFC相对于WIN API开发更具备效率优势。

由于MFC在软件的开发过程中更为直观,所见即所得,所以我们是使用MFC来编写程序的。

本软件是基于微软的vc++6.0开发的,所以只能在window操作系统下运行。

4.程序设计
我们虽然研究的是JPEG无损压缩,但为提高软件的易用性,软件设计成通用压缩软件,它不但可以压缩JPEG图片,也可以压缩其它文件和文件夹,软件基于VC++6.0的MFC来开发,界面简介,软件功能可以分为两个部分:一、压缩,它可以将文件压出xcs.gz格式的文件,将文件夹打包成tar文件后压出gz 格式的文件;二、解压,它可以解压xcs.gz格式、rar格式、zip格式、7z格式。

我们把该软件命名为winxcs.exe.
4.1压缩设计
①选取文件或者文件夹。

②判断,文件则进行xcs编码,文件夹则调用tar.exe来打包。

③调用gzip.exe来进行压缩。

4.2解压设计
①选取文件。

②分析文件类型。

③调用相应的解压工具来进行解压。

5.测试数据
样本来源:三星S850分辨率为3264×2448的数码照片
样本数量:10个
对三星S850分辨率为3264×2448的数码照片压缩后的对比:
平均压缩率对比:
6.设计总结
在基于哈夫曼算法、LZ及其衍生算法(LZW, deflate等)来对文件直接进行压缩的方式越来越接近于极限的时候,也就到了去探索数据压缩新道路的时候。

对源文件先进行有效的规整再压缩或许会成为提高压缩比的一种尝试,在这次的软件开发中使用了同父洗牌专利算法来对文件进行先规整后压缩,的确可以在压缩率提升一点点,更有效去除冗余。

如果规整的算法能得到发展,能更有效、快速的对文件进行规整,那么压缩将能得到很大的发展。

也正是基于这种情况,这个项目被列为了教育厅立项项目(NO.200808LX019)。

由于还没有开发出自己的压缩工具,所以只能借用Linux中的压缩工具Gzip.exe和Tar.exe来完成最后的压缩操作,致使软件的功能不是很强大,但也能满足用户的日常解压缩应用。

鉴于软件处于内测阶段,未知情况下的应该应该很多,下一步的工作是开发自己的压缩工具,完善软件,但其免费政策永不改变,以使其成为广大电脑用户的福音。

【参考文献】
[1]肖宏伟.门诊Visual C++开发答疑300问.北京:人民邮电出版社,2003.
[2]周鸣扬.Visual C++界面编程技术.北京:北京希望电子出版社,2003.
[3]吴金平等.Visual C++ 6.0编程与实战.北京:中国水利水电出版社,2004,6.
[4]新浪博客.压缩历史./s/blog_4cd2484f01009ebh.html.
[5]中国软件.在VC中做一个选择文件夹的对话框./NeptuneX/.。

相关文档
最新文档