《2022年数学编码实验报告 .pdf》由会员分享,可在线阅读,更多相关《2022年数学编码实验报告 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、篇一:数字图像处理实验报告 ( 图像编码 ) 实验三图像编码一、实验内容: 用 matlab 语言、 c 语言或 c+语言编制图像处理软件,对某幅图像进行时域和频域的编码压缩。二、实验目的和意义: 1. 掌握哈夫曼编码、香农- 范诺编码、行程编码2了解图像压缩国际标准三、实验原理与主要框架: 3.1 实验所用编程环境: visual c+6.0(简称 vc)3.2 实验处理的对象:256 色的 bmp(bit map )格式图像bmp(bit map )位图的文件结构:( 如图 3.1) 图 3.1 位图的文件结构具体组成图 : 第 1 页 共 32 页 bitmapfileheader 位图
2、文件头(只用于bmp文件) bftype=”bm ” bfsize bfreserved1 bfreserved2 bfoffbits bisize biwidth biheight biplanes bibitcount bisizeimage bixpelspermeter biypelspermeter biclrused biclrimportant 单色 dib 有 2 个表项16 色 dib 有 16 个表项或更少256 色 dib 有 256 个表项或更少真彩色 dib 没有调色板每个表项长度为4 字节( 32 位)像素按照每行每列的顺序排列每一行的字节数必须是4 的整数倍 bi
3、tmapinfoheader 位图信息头 palette 调色板 dib pixels dib图像数据 3.3 数字图像基本概念数字图像是连续图像f(x,y)的一种近似表示,通常用由采样点的值所组成的矩阵来表示:?f(0,0)?f(1,0)?.?f(n?1,0)f(0,1). f(1,1).f(n?1,1).f(0,m?1)?f(1,m?1)? ?.?f(n?1,m?1)? 每一个采样单元叫做一个像素(pixel), 上式 (2.1)中,m 、 n 分别为数字图像在横( 行) 、 纵 ( 列)方向上的像素总数。在计算机内通常用二维数组来表示数字图像的矩阵,把像素按不同的方名师资料总结 - -
4、-精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 式进行组织或存储,就得到不同的图像格式,把图像数据存成文件就得到图像文件。图像文件按其数字图像格式的不同一般具有不同的扩展名。最常见的图像格式是位图格式,其文件名以 bmp为扩展名。图像数字第 2 页 共 32 页化的精度包括两部分,即分辨率和颜色深度。分辨率指图像数字化的空间精细度,有显示分辨率和图像分辨率两种。数字图像的颜色深度表示每一像素的颜色值所占的二进制位数。颜色深度越大则能表示的颜色数目越多
5、。颜色深度的不同,就产生不同种类的图像文件,在计算机中常使用图像文件的类型有单色图像、灰度图像、 伪彩色图像和24 位真彩色图像。 它们之间的关系取决于数字图像采用的颜色表示法。常用的颜色表示法有rgb 、cmyk、hsl 和 yuv 等。数字图像的数据容量非常庞大,如以 24 位真彩色表示像素为640*480 的数字图像, 所需要的数据量为900kb,所以需要对数字图像进行数据压缩。数据压缩包括数据压缩编码和压缩数据解码两个过程。图像压缩的基本原则包括:(1)编码重复压缩:按照编码重复的概率大小做压缩编码,压缩重复概率大的编码,可以节省一些存储空间。(2)像素间重复压缩:前后像素间存在的某种
6、程度的相关,如存在相同的背景图像等,简化编码以节省空间。(3) 视觉重复压缩: 由于入眼的生理构造,就算在像素之间少了几个像素,眼睛也看不出来。但是,只是在某些情况中才可以允许这种失真性较大的应用。主要的数字图像压缩标准是jpeg(joint picture expert group)标准。数字图像的采集设备主要有扫描仪、数字相机和图像采集卡等。通过对数字图像进行一定的处理,即图像处理,可在一定程度上改善图像的分辨质量和形成特殊的视觉效果。数字图像处理由数字图像处理系统完成,其结构主要包括图像采集系统、计算机图像处理系统和图像输出系统三部分。3.4 图像的编码图像的编码包括图像的离哈夫曼编码、
7、香农- 范诺编码、行程编码,基本框架( 如图 3.2) 和图像编码菜单设计图( 如图 3.3) 如下:第 3 页 共 32 页图 3.2 图像编码流程图图 3.3 bmp图像编码菜单设计图四、数字图像编码技术: 4.1 哈夫曼编码根据信息论中信源编码理论,当平均码长r 大于等于图像熵h 时,总可设计出一种无失真编码。当平均码长大于图像熵时,表明该编码方法效率很低;当平第 4 页 共 32 页均码长等于或很接近于(但不大于)图像熵时,称此编码方法为最佳编码,此时不会引起图像失真;当平均码长小于图像熵时,压缩比较高,但会引起图像失真。在变长编码中,如果码字长度严格按照对应符号出现的概率大小逆序排列
8、,但其平均码字长度为最小,这就是变长最佳编码定理。变长最佳编码定理是哈夫曼编码的理论基础。4.1.1 哈夫曼编码基本原理哈夫曼( huffman )编码是一种常用的压缩编码方法,是huffman 于 1952 年为压缩文本文件建立的,是一种效率比较高的变长无失真信源编码方法。它的基本原理是频繁使用的数据用较短的代码代替,较少使用的数据用较长的代码代替,每个数据的代码各不相同。由于哈夫曼编码是以信源概率分布为基础的,但一般情况下无法事先知道信源的概率分布,因而通常采用对大量数据进行统计后得到的近似分布来代替,这样会导致实际应用时哈夫曼编码无法达到最佳性能。名师资料总结 - - -精品资料欢迎下载
9、 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - 4.1.2 哈夫曼编码步骤下面来介绍哈夫曼编码方法:( 1 ) 将 输 入 的 符 号 ( 图 像 中 的 灰 度 级 ) ai按 出 现 概 率p(ai)由 小 到 大 排 列 , 即p(ai)?p(aj)?p(ak). (2)将最小的两个p(ai)相加,形成一个新的概率集合(此时压缩了一个p(ai) ) ,再按(1)重复直到只剩下两个概率为止。下图给出了一个实际信源符号的缩减过程。表 3.1 哈夫曼编码中的信源符号缩
10、减过程第 5 页 共 32 页篇二:行程编码实验报告行程编码以vc 方式实现实验目的:了解行程算法的压缩和解压过程,学会计算压缩比以及与行程算法相关的问题。实验平台:在 vc2010 下以 c+代码的形式完成。软件设计说明:该程序主要是为了实现压缩和解压的功能。压缩算法相对较为简单,主要是对输入的要压缩的数据进行遍历,遍历并同时记录相同的数据的数目,当遍历到不相同的数据后停止遍历并将数据和数目压入到vector中保存,考虑到可能会在数据间产生误差,我加入用于区分不同的两个数据,还有若数据的长度为1 时,我不将 1 保存到 vector中,以此方式尽可能的减少压缩数据的长度,增加压缩的效果。函数
11、中使用了<sstream>中的功能, 其作用为将 int转换为 string的类型,便于储存数据,其功能函数如下:void yasuo(vector<string> a) int length=a.size(); /原数据的长度 /保存压缩后的数据 /a传入要压缩的数据vector<string> temp; int j=0; int n=1; for(int i=0;i<length-1;i+) string b=ai; if(i!=length-2) if(ai!=ai+1) if(n!=1) if(b=) else string s; temp.
12、push_back(b); temp.push_back(b); stringstream out; else else n+; out<<n; s = out.str(); temp.push_back(s); s=; temp.push_back(s); n=1; j=j+2; if(b=) temp.push_back(b); temp.push_back(b); else temp.push_back(b); string s; s=; temp.push_back(s); n=1; j=j+1; else if(ai=ai+1) else if(n!=1) if(b=)
13、else string s; temp.push_back(b); temp.push_back(b); temp.push_back(b); n+; if(b=) string s; stringstream out; out<<n; s = out.str(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - temp.push_back(s); n=1; j=j+2; else temp.push_back(b
14、); temp.push_back(b); temp.push_back(b); else out<<n; s = out.str(); temp.push_back(s); s=; temp.push_back(s); n=1; if(ai+1=) else temp.push_back(ai+1); j=j+2; temp.push_back(ai+1); temp.push_back(ai+1); if(b=) else string s; s=; temp.push_back(s); n=1; if(ai+1=) temp.push_back(ai+1); temp.pus
15、h_back(ai+1); temp.push_back(b); temp.push_back(b); temp.push_back(b); else temp.push_back(ai+1); j=j+2; print(temp,a,j); /用于数据的输出然后是解压算法的设计思路如下,主要是定义三个vector的向量, 一个用于记录要压缩的数据,一个用于记录标志的在 string中的位置,然后根据的位置求出数据的数目,将数目保存到另外一个vector中,然后根据数据和长度一一对应输出,这样就将数据解压完成。 但是在这里需要特别注意对的处理在压缩的过程中若压缩的字符为 ,则输出的时候记为 ,
16、判断的时候主要是判定连续3 个字符是否全为 ,以此判断是否是遇到标志字符 。 代码如下:void jieya(string a) vector<char> data; vector<int> loca; vector<int> len; vector<int> zhi; /记录数据 /记录标志的位置 /记录个数据的长度/ 记录每个数据的各个位上的数值 /记录数据和标志的位置for(int i=0;i<a.length();i+) if(i=0) if(ai=) data.push_back(); loca.push_back(1); i+;
17、篇三:信息论与编码实验报告课程名称:姓名:系:专业:年级:学号:指导教师:职称:实验报告信息论与编码年月日目 录实验一信源熵值的计算 . 1 实验二huffman信源编名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - 码 . 5 实验三shannon编码. 9 实验四信道容量的迭代算法 . 12 实验五率失真函数 . 15 实验六差错控制方法 . 20 实验七汉明编码 . 22实验一信源熵值的计算一、实验目的1 进一步熟悉信源熵值
18、的计算 2 熟悉 matlab 编程二、实验原理熵(平均自信息)的计算公式q 1 h(x)?pilog2?pilog2pi pii?1i?1 q 第二步:计算信源总大小计算出每个字母和空格出现的概率;最后,通过统计数据和信息熵公式计算出所求信源熵值(本程序中单位为奈特nat ) 。程序流程图:1 三、实验内容1、写出计算自信息量的matlab 程序2、已知:信源符号为英文字母(不区分大小写)和空格。输入:一篇英文的信源文档。输出:给出该信源文档的中各个字母与空格的概率分布,以及该信源的熵。四、实验环境microsoft windows 7 matlab 6.5 五、编码程序#includest
19、dio.h #include <math.h> #include <string.h> #define n 1000 int main(void) char sn; int i,n=0; float num27=0; double result=0,p27=0;file *f; char *temp=new char485; f=fopen(nan311.txt,r); while (!feof(f) fread(temp,1, 486, f); fclose(f); s0=*temp; for(i=0;i<strlen(temp);i+) si=tempi; f
20、or(i=0;i<strlen(s);i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - if(si= ) num26+; else if(si>=a&&si<=z) numsi-97+; else if(si>=a&&si<=z) 2 numsi-65+; printf(文档中各个字母出现的频率:n); for(i=0;i<26;i+) pi=numi/s
21、trlen(s); printf(%3c:%ft,i+65,pi); n+; if(n=3) printf(n); n=0; p26=num26/strlen(s); printf(空格 :%ft,p26); printf(n); for(i=0;i<27;i+) if (pi!=0) result=result+pi*log(pi); result=-result; printf(信息熵为 :%f,result); printf(n); return 0; 六、求解结果其中 nan311.txt中的文档如下:there is no hate without fear. hate is crystallized fear, fears dividend, fear objectivized. we hate what we fear and so where hate is, fear is lurking. thus we hate 3 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -