《图像统计编码演示程序的设计》由会员分享,可在线阅读,更多相关《图像统计编码演示程序的设计(19页珍藏版)》请在金锄头文库上搜索。
1、第 1 页 共 19 页毕业论文(设计)题 目: 图像统计编码演示程序的设计 学 制: 4 年 专 业: 通信工程 键入文字 第 2 页 共 19 页目 录摘要 (1)关键词 (1)1matlab 简介 (1)1.1matlab概述 (1)1.2MATLAB在数字图像处理中的应用 (2)2 数字图像处理 (3)2.1概述 (3)2.2图像统计编码 (3)2.2.1霍夫曼编码 (3)2.2.2霍夫曼编码算法 (4)3 图像统计编码程序设计 (5)3.1总体方案设计 (5)3.1.1系统运行环境 (5)3.1.2功能模块划分 (5)3.1.3系统方框图 (6)3.2各模块功能实现程序 (7)4 测
2、试和调试 (21)4.1霍夫曼编码实现效果 (21)4.2算术编码的结果 (23)6 总结 (25)参考文献 (25)Abstract (26)第 1 页 共 19 页图像统计编码演示程序的设计作 者:xxx指导老师:xxx摘要:数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人们服务。数字图像处理是一种通过计算机采用一定的算法对图形图像进行处理的技术。数字图像处理技术已经在各个领域上都有了比较广泛的应用。图像处理的信息量很大,对处理速度的要求也比较高。MATLAB 强大的运算和图形展示功能,
3、使图像处理变得更加的简单和直观。本文介绍了 MATLAB 语言的特点,基于 MATLAB 的数字图像处理环境,介绍了如何利用MATLAB 及其图像处理工具箱进行数字图像处理,并通过一些例子来说明利用 MATLAB 图像处理工具箱进行图像处理的方法。主要论述了利用 MATLAB 实现图像编码等图像处理。关键词:MATLAB;数字图像处理;图像统计编码;霍夫曼编码1 MATLAB 简介1.1 MATLAB 概述MATLAB 是 MATrix LABoratory(“矩阵实验室”)的缩写,是由美国MathWorks 公司开发的集数值计算、符号计算和图形可视化三大基本功能于一体的,功能强大、操作简单的
4、语言。是国际公认的优秀数学应用软件之一。MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用 MATLAB来解算问题要比用 C,FORTRAN等语言完相同的事情简捷得多。MATLAB包括拥有数百个内部函数的主包和三十几种工具包(Toolbox).工具包又可以分为功能性工具包和学科工具包.功能工具包用来扩充 MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能.学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类.第 2 页 共 19 页开放性使 MATLAB广受用户欢迎.除内部函数外,所有 MATLAB主包文件和各种
5、工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包.1.2 MATLAB 在数字图像处理中的应用图像处理工具包是由一系列支持图像处理操作的函数组成的。所支持的图像处理操作有:图像的几何操作、邻域和区域操作、图像变换、图像恢复与增强、线性滤波和滤波器设计、变换(DCT 变换等) 、图像分析和统计、二值图像操作等。下面就 MATLAB 在图像处理中各方面的应用分别进行介绍。(1) 图像文件格式的读写和显示。MATLAB 提供了图像文件读入函数 imread(),用来读取如:bmp、tif、tiffpcx 、jpg 、gpeg 、hdf、xwd 等格式图像文;图像
6、写出函数 imwrite() ,还有图像显示函数 image()、imshow()等等。(2) 图像处理的基本运算。 MATLAB 提供了图像的和、差等线性运算 ,以及卷积、相关、滤波等非线性算。例如,conv2(I,J)实现了 I,J 两幅图像的卷积。(3) 图像变换。MATLAB 提供了一维和二维离散傅立叶变换(DFT) 、快速傅立叶变换(FFT) 、离散余弦变换 (DCT) 及其反变换函数,以及连续小波变换(CWT)、离散小波变换(DWT)及其反变换。(4) 图像的分析和增强。针对图像的统计计算 MATLAB 提供了校正、直方图均衡、中值滤波、对比度调整、自适应滤波等对图像进行的处理。(
7、5) 图像的数学形态学处理。针对二值图像,MATLAB 提供了数学形态学运算函数;腐蚀(Erode)、膨胀(Dilate)算子,以及在此基础上的开 (Open)、闭(Close)算子、厚化 (Thicken) 、薄化 (Thin) 算子等丰富的数学形态学运算。以上所提到的 MATLAB 在图像中的应用都是由相应的 MATLAB函数来实现的,第 3 页 共 19 页使用时,只需按照函数的调用语法正确输入参数即可。具体的用法可参考MATLAB丰富的帮助文档。图像边缘对图像识别和计算机分析十分有用,在MATLAB中,函数 edge()用于灰度图像边缘的提取,它支持六种不同的边缘提取方法,即 Sobe
8、l方法、Prewitt 方法、Robert 方法,Laplacian2Gaussian方法、过零点方法和 Canny方法。2 数字图像处理2.1 概述图像处理就是对图像信息进行加工处理,以满足人得视觉心理和实际应用的需求。图像处理可以应用光学方法、电子学方法,从 60年代开始,随着计算机技术的发展,数字图像处理获得了飞跃的发展。所谓数字图像处理,就是利用数字计算机或其他高速、大规模集成数字硬件,对从图像信息转换来的数字电信号进行某些数字运算或处理,一起提高图像质量或达到人们要求的某些与预期的结果。如对被噪声污染的图像去除噪声;对信息微弱的图像进行增强处理;对失真的图像进行几何校正;从遥感图片中
9、辨别农作物、森林、琥珀和军用设施等等。应用计算机处理图像精度高,改变软件即可变换处理方法,灵活方便。但由于计算机是顺序处理技术,因此对信息量较大的图像,运算处理速度不如光学方法快。2.2 图像统计编码统计编码又称熵编码,他建立在图像统计特征基础之上的数据压缩方法。根据香农的观点,信息冗余来自信息源数据本身的相关性和信源内事件的概率分布不均,只要找到去除相关性和改变概率分布不均的方法,也就找到了信源数据的统计编码方法。熵编码即编码过程中按熵原理不丢失任何信息的编码。信息熵为信源的平均信息量(不确定性的度量) 。常见的熵编码有:LZW 编码、香农(Shannon)编码、霍夫曼(Huffman)编码
10、和算术编码(arithmetic coding)。2.2.1霍夫曼编码第 4 页 共 19 页霍弗曼编码完全依据信源字符出现的概率来构造其码字,对出现概率大的字符使用较短的码字,面对出现概率低的字符使用较长的码字,从而达到压缩数据的目的。霍夫曼编码有时有称为最佳编码(一般直接称为霍夫曼编码) ,最初主要用于文本文件压缩。霍夫曼编码是一种变长编码(VLC) ,同时也是一种无失真编码。在具有相同信源概率分布的前提下,他的平均码字长度比其他任何一种有效编码方法都短。2.2.2霍夫曼编码算法霍夫曼编码是以信源字符的概率分布为基础的,若理论上并不知道信源字符的概率分布,那么可以根据对大量数据进行统计所得
11、到的统计分布来近似代替。以统计数据代替实际概率分布,可能会导致实际应用时霍夫曼编码无法达到最佳编码效果,应用中可以根据输入数据序列自适应的匹配信源概率分布的方法,这样能在一定程度上能改进霍夫曼编码的性能。香农编码也是一种典型的可变字长编码。与霍夫曼编码相似,当信源符号出现的概率正好为 2的负幂次方时,香农编码的编码效率可以达到 100%从理论上分析,采用霍夫曼编码可以获得最佳信源字符编码效果,但实际应用中,由于信源字符出现的概率并非满足 2的负幂次方,因此往往无法达到理论上的编码效率和信息压缩比。为了提高编码效率,Elias 等人提出了算术编码算法。算术编码是信息保持型编码,他不像霍夫曼码,无
12、需为一个符号设定一个码字。算术编码可以分为固定方式编码和自适应方式编码两种。选择不同的编码方式,将直接影响到编码效率。自适应算术编码的方式,无需先定义概率模型,适合于无法知道信源字符概率分布的情况。这也是算术编码优于霍夫曼编码的地方之一。同时,当信源字符出现的概率比较接近时,算术编码效率高于霍夫曼编码的效率,在图像通信中常用它来取代霍夫曼编码。不足之处是实现算术编码算法的硬件比霍夫曼编码复杂。第 5 页 共 19 页3 图像统计编码程序设计3.1 总体方案设计3.1.1系统运行的环境Windows XP、Matlab7.03.1.2功能模块的划分Huffman 编码中:主程序调用 huffen
13、code函数对输入矩阵 vector进行 Huffman编码,返回编码后的向量(压缩后数据)及相关信息;再调用 huffdecode函数对输入矩阵 vector进行 Huffman解码,返回解压后的图像数据;调用 addnode函数添加节点;调用 frequency函数计算各符号出现的概率;调用 decode函数返回码字对应的符号。Huffman编码的步骤: l)将信号源的符号按照出现概率递减的顺序排列。 2)将两个最小出现概率进行合并相加,得到的结果作为新符号的出现概率。 3)重复进行步骤 1和 2直到概率相加的结果等于 1为止。 4)在合并运算时,概率大的符号用编码 0表示,概率小的符号用编码 1表示。5)记录下概率为 1处到当前信号源符号之间的 0,l 序列,从而得到每个符号的编码。算术编码中:主程序调用 arithencode函数对 symbol进行算术编码;再调用 arithdecode对算术编码进行解码。算术编码不是将单个信源符号映射成一个码字,而是把整个信源表示为实数线上的 0到 1之间的一