摘要:该文借鉴静态图像压缩标准JPEG的理论研究成果,将其与DCT快速变换相结合,采用霍夫曼编码方法,用C语言编程实现灰度图像的压缩。最后,计算了基于DCT快速变换的图像压缩算法的压缩比。同时,分析了DCT快速变换后的数据,验证了该算法用于图像压缩的合理性。

关键词:DCT快速变换;霍夫曼编码;图像压缩

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)34-8264-02

随着多媒体技术的发展,人们获取信息由传统方式的模拟图像向数字图像转变。图像以数字形式便于计算机存储、处理和传输,具有质量好、成本低和可靠性高等特点。但是数字图像的数据量非常巨大,这对硬盘等存储设备提出了较高地要求,也对现有网络的传输带宽提出了非常高地需求。图像压缩是在满足一定保真度的前提下,对原始较大的数字图像进行变换、编码,去除冗余数据,从而使用较少的数据表示和传输,达到节省传输带宽或节省所需存储容量的目的。因此,图像压缩技术在多媒体领域得到广泛地应用。

1 二维DCT快速变换

通常对于一幅图像的处理是将图像分成一个一个的小块,然后再将每一个小块进行正交变换,从而为某一种信息处理做准备。该文将图像进行8×8分块,则其DCT变换公式为:

由于余弦函数具有周期性,因此系数矩阵A中的每个元素取值除了[12]外,范围均在[cosnπ16,n=1,…,15],共16种情况。同理可知,AT中的每个元素取值范围与A相同,也为16种情况。而由公式(2) 求得的系数取值情况即为:[16×16=256]种。定义一个数组存储这256个系数,可减少DCT算法中乘法的次数为:[(64+8)×64=4608]次,大大简化计算,易于硬件实现。

2 霍夫曼编码的实现

首先要计算各符号出现的概率。这样就需要有一个扫描的过程。首先建立一个长为[256×256]的数组,并对文件中从开始到结束每个字符的出现次数进行计数统计,当读到结束标志时,完成计数。

计数开始时文件的输入指针位置得到保存,并在完成时再恢复。经过这个步骤,得到了输入数据中每个符号出现的概率,即叶结点的权值。

调整完各符号的概率后,接下来建立霍夫曼(Huffman)树。在建立树的过程中,需要在一个循环中将两个权值最低的自由结点连同这两结点的权值之和组合成一个新的内部结点。在实际实现过程中,首先搜索权值最低的两个结点,把它们的权相加,得到的和作为新结点的权值,然后在剩下的结点和新生成的结点中进行搜索,合并权值最小的两个结点,依次类推,一旦只剩下一个自由结点,Huffman树就完成了,而这个自由结点就是Huffman的树根。

压缩一个文件,从根本上讲,是想顺着树从上向下工作,然后在每个结点处输出一个0位或1位,直至达到适当的叶结点为止。但是,树的结构不允许这么做。当从树根开始时,无法确定是从0树枝还是1树枝抵达某一特殊的符号。解决这个问题的方法之一是在建立树时在结点的结构中增加一个父成员。当组合两个最小的结点形成一个新的内部结点时,每个最小的结点都让其父结构设置成指向新的结点通过这个新结点,可以从叶结点开始,顺着树向上延伸,直到树根。当对一个文件进行压缩时,只需要通过递归地遍历整个树一次就可能建立一个代码表,而不必试着用树来对符号进行编码。这样便建立了一个代码表,其中包含每个符号的代码和每个代码的长度。一旦这张表建立起来,便可通过简单地输入输出文件中每个字符的适当代码来对这个文件编码。

3 仿真验证

采用C语言编程,该文对三幅灰度图像进行了基于DCT快速变换的压缩,样品图像及其解压后的图像分别如图1~3所示。

三幅图像的具体数据分析如表1~2所示,给出了三幅图像的压缩比和峰值信噪比。

4 结论

本文借鉴静态图像压缩标准JPEG的研究成果,使用C语言编程实现了灰度图像的压缩。为了提高运算速度,该文提出了一种DCT快速变换,此算法依据二维DCT变换矩阵形式中系数矩阵每个元素的周期性,将系数矩阵相乘结果的任意情况存储,减少乘法操作。同时,采用C语言编写代码实现了基于DCT快速算法的灰度图像压缩。该文通过对一系列的实验结果进行分析,验证了DCT快速变换用于灰度图像压缩的合理性。

参考文献:

[1] 张春田.苏育挺.数字图像压缩编码[M].北京:清华大学出版社,2006:1-10.

[2] 马平.数字图像处理[M]. 北京:电子工业出版社,2007:164-167.

[3] 小野定康.JPEG/MPEG2技术[M].北京:科学出版社,2004:62-65.

[4] 张旭东.卢国栋.图像编码基础和小波压缩技术[M].北京:清华大学出版社,2004:115-137.

[5] 丁贵广.Visual C++ 6.0数字图像编码[M].北京:机械工业出版社,2004:53-82.

[6] Gilge M,Engelhardt T,Mehlan R. Coding of arbitrarily shaped image segments based on a generalized orthogonal transform[J].Signal Processing on Image Commun, 2002,10:153-180.

[7]T Sikora,Makai B. Shape-adaptive DCT for generic coding of video[J].IEEE Transactions on Circuits System and Video Technol,1995,1:59-62.

[8] 曹雪虹.信息论与编码[M].北京:清华大学出版社,2004:16-34.

[9] 阴躲芬.浅谈数字图像压缩编码技术[J].科技广场学报,2008(1):138-139.

c语言图像压缩编码,基于C语言的图像压缩算法相关推荐

  1. 基于c语言的图像边缘检测,基于C语言的医学图像处理的设计

    内容介绍 原文档由会员 莎士比亚 发布 资源包括:正文DOC格式共41页 19611字 摘 要:B超图像作为医学图像的一个部分,具有医学数字图像的某些共性.B超图像处理技术作为医学数字图像处理技术的一 ...

  2. python基于什么语言-一种基于Python语言的EDA开发平台及其使用方法与流程

    本发明涉及EDA开发的技术领域,尤其是指一种基于Python语言的EDA开发平台及其使用方法. 背景技术: 目前,主流的EDA设计语言Verilog HDL能实现完整的芯片硬件逻辑电路开发,但是其代码 ...

  3. c语言凸包算法,基于C语言的凸包算法实现

    基于C语言的凸包算法实现 非计算机专业,代码有些的不好的地方,大佬轻喷^ _ ^ 根据要求,需要使用C语言实现凸包算法--Graham扫描法,本文将从算法理解.实现思路.遇到的问题及其解决方案三个方面 ...

  4. c语言语音控制游戏文献,C语言课程设计-基于C语言推箱子游戏设计-毕业论文文献.doc...

    gd工程职业技术学院毕业论文 基于C语言的推箱子游戏设计 Design of the push box Based on Combined Language 作者姓名: 学科专业: 应用电子技术 学院 ...

  5. 基于C语言的软件,基于C语言的计算机软件编程分析

    摘 要 C语言是在B语言的基础上发展而来,其功能强大,使用便利,是目前计算机软件编程最基础的语言.C语言有着特殊的编程技巧,他的函数库中包含了编程所需的大部分函数,因此不需要程序员再另外定义:C语言中 ...

  6. 【R语言实验】基于R语言的时间序列平稳性检验

    一.实验项目名称:基于R语言的时间序列平稳性检验 二.实验目的与要求: 平稳时间序列的概念,平稳性检验的时序图检验方法和自相关图检验方法. 三.实验原理: 时序图和自相关图检验时间序列的平稳性依据: ...

  7. c语言编写计算机软件,基于C语言的计算机软件编程分析.doc

    基于C语言的计算机软件编程分析.doc 基于C语言的计算机软件编程分析 摘要:C语言是一种重要的编程语言,在当今IT业的运用十分广泛.使用C语言来编写的程序简单.直接.准确,极大地推动了计算机软件的更 ...

  8. R语言做GGEbiplot_基于R语言的GGE双标图在大豆区试中的应用

    基于 R 语言的 GGE 双标图在大豆区试中的应用 * 昝 凯,陈亚光,徐淑霞 ** ,周青,张志民,杨慧凤,王凤菊,李明军,郭海芳 [摘 要] 摘要:为合理评价大豆区域试验中品系的丰产性.稳产性和适 ...

  9. c语言大小箱子,基于C语言箱子游戏.doc

    基于C语言箱子游戏 广东工业大学毕业论文 基于C语言的推箱子游戏设计 Design of the push box Based on Combined Language 作者姓名: 学科专业: 应用电 ...

最新文章

  1. 如何编写一份软件工程实验报告
  2. 基于JavaScript 数组的经典程序应用源码(强烈建议收藏)
  3. 平均年薪30万的深度学习算法工程师,正面临100万的人才缺口
  4. 移除类名没有触发transition_epoll边缘触发模式
  5. 漫画:什么是堆排序?
  6. SC;FC;LC;光纤接口介绍
  7. python判断一个数是素数_使用Python语言判断质数(素数)的简单方法讲解
  8. android tee os,有关OP-TEE - 中文社区论区 - 中文社区 - Arm Community
  9. css 设置背景色渐变、字体颜色渐变
  10. xcode8插件管理工具
  11. 中国风?古典系?AI中文绘图创作尝鲜!⛵
  12. word使用技巧---插入图片显示不全的解决方案
  13. 如何让图片变成全景图,vr全景图怎么拍摄和制作
  14. antd中reset为啥点击两次
  15. 拒绝室友抄计算机作业,大学关系很好的室友抄你的作业,如何拒绝?
  16. MYSQL分区表如何保证数据唯一性
  17. 计算机电源测试电压,使用万用表测试电脑电源好坏的方法
  18. 如何使用 Go 语言重新思考可视化编程?
  19. 我的世界服务器地图网站,我的世界真正的SAO服务器地图
  20. 统计学基础(三)—数据的概率分布与差异检验方法

热门文章

  1. 干物妹小埋 树状数组
  2. 【设计模式】单例(Singleton)
  3. MSP430异步通信(发送)不阻塞CPU,含注释
  4. LTspice基础教程-020.绘制伯德图
  5. java int 十六进制_java中int使用十六进制
  6. 司创电梯发卡软件_防复制电梯IC卡系统上位机管理软件设计
  7. SLC MLC TLC QLC擦写次数
  8. 完美代码(让你编出无懈可击的完美代码)
  9. MATLAB feof和~feof函数用法
  10. Java编程思想读书笔记——第十章:内部类