游程编码实验报告材料

合集下载

实验一用游程编码实现数据压缩

实验一用游程编码实现数据压缩

实验一用游程编码实现数据压缩一实验内容⑴了解游程编码的原理。

⑵编写编码和解码程序。

二实验报告(1)程序运行结果(2)游程编码有什么局限性?(3)修改下述的参考程序,使之能用于压缩图像。

三参考程序编码程序<><>( * );(* *);* " ";'\'( * []){ * ;* ;* " \";(<)([]);([],"");()(" \"[]);([],"");()(" \"[]);(" \");("\ \"[][]);();();();}( * ){* ;* ;(,'\\');()(,'');()(,':');();;(,'.');()*'\';("\ \", );();}(* *){;;;;;;;;();;(){;() ;{() ;{(>) {(,"");(,"");;}(){(,"");;;};;;}**}() ;();;}() ;()*;(" ");}解码程序<><>'\'( * []){* ;* ;;;(<) ;([],"");() (" ");([],"");() (" ");();(){(){();();(){(,"");;}}(,"");();}* *}实验二用预测编码实现图像的有损压缩一实验内容⑴了解预测编码的原理。

⑵用语言实现编码解码程序。

信息论实验报告

信息论实验报告

游程编码实现有效性提高的原理及通用编码的思想康乐203201505020摘要:信源编码的目的是提高信息传输效率,其思想是去除消息中的冗余成分。

在无失真的信源编码中,根据信源的统计特性进行编码称为统计编码,而在信源统计特性未知的情况下,就需要一种新的编码方法,称之为通用编码。

本文对统计编码中的游程编码进行了分析,说明其有效性,给出其具有有效性的原理论述,对游程编码的截断效应进行了仿真;同时分析了通用编码的存在性与构造方法,还以字典码为例进行了仿真。

关键词:信源编码游程编码通用编码字典码一、信源编码概述通信的根本问题是将信源的输出在接收端精确的或近似的重现出来。

为此需要解决两个问题。

其一是信源的输出应如何描述,及如何计算它产生的信息量;其二是如何表示信源的输出,即信源编码问题。

由于信源可以根据信息输出的形式分为离散信源和连续信源,因此信源编码也就可以分为离散信源和连续信源。

根据通信的要求,可以将信源编码分为无失真信源编码和限定失真的信源编码。

若要求精确的重现信源的输出,就要保证信源产生的全部信息无损的传递给信宿,这时的信源编码就是无失真信源编码。

许多实际情况下,并不要求完全精确地复制出信源的输出,而且在有干扰的情况下,这也是不可能的。

一般对信源-信宿要定出可接收准则或保真度准则,这就是限定失真的信源编码。

离散信源的输出可以用如下符号序列表示:21012,,,,,U U U U U --其中l U 表示在第l 时刻产生的符号,l 为整数。

l U 为一随机变量,它在有限字母集{}1,k A a a =中选取。

如果使用D 字母的集合{}1,d B b b =作为码表,那么如果组成码字的码符号数目相等,我们就称之为等长编码,否则称之为非等长编码。

非等长编码则可以根据编码是否依赖信源的统计特性分为统计编码与通用编码。

二、 游程编码 2.1 游程编码概念游程编码(RLC, Run Length Coding ),又称“运行长度编码”或“行程编码”,是一种统计编码,该编码属于无损压缩编码,是栅格数据压缩的重要编码方法。

行程编码实验报告

行程编码实验报告

行程编码以vc方式实现实验目的:了解行程算法的压缩和解压过程,学会计算压缩比以及与行程算法相关的问题。

实验平台:在vc2010下以c++代码的形式完成。

软件设计说明:该程序主要是为了实现压缩和解压的功能。

压缩算法相对较为简单,主要是对输入的要压缩的数据进行遍历,遍历并同时记录相同的数据的数目,当遍历到不相同的数据后停止遍历并将数据和数目压入到vector中保存,考虑到可能会在数据间产生误差,我加入’\’用于区分不同的两个数据,还有若数据的长度为1时,我不将1保存到vector中,以此方式尽可能的减少压缩数据的长度,增加压缩的效果。

函数中使用了<sstream>中的功能,其作用为将int转换为string的类型,便于储存数据,其功能函数如下:void yasuo(vector<string> a) //a传入要压缩的数据{int length=a.size(); //原数据的长度vector<string> temp; //保存压缩后的数据int j=0;int n=1;for(int i=0;i<length-1;i++){string b=a[i];if(i!=length-2){if(a[i]!=a[i+1]){if(n!=1){if(b=="\\"){temp.push_back(b);temp.push_back(b);}elsetemp.push_back(b);string s;stringstream out;out<<n;s = out.str();temp.push_back(s);s="\\";temp.push_back(s);n=1;j=j+2;}else{if(b=="\\"){temp.push_back(b);temp.push_back(b);}elsetemp.push_back(b);string s;s="\\";temp.push_back(s);n=1;j=j+1;}}elsen++;}else{if(a[i]==a[i+1]){n++;if(b=="\\"){temp.push_back(b);temp.push_back(b);}elsetemp.push_back(b);string s;stringstream out;out<<n;s = out.str();temp.push_back(s);n=1;j=j+2;}else{if(n!=1){if(b=="\\"){temp.push_back(b);temp.push_back(b);}elsetemp.push_back(b);string s;stringstream out;out<<n;s = out.str();temp.push_back(s);s="\\";temp.push_back(s);n=1;if(a[i+1]=="\\"){temp.push_back(a[i+1]);temp.push_back(a[i+1]);}elsetemp.push_back(a[i+1]);j=j+2;}else{if(b=="\\"){temp.push_back(b);temp.push_back(b);}elsetemp.push_back(b);string s;s="\\";temp.push_back(s);n=1;if(a[i+1]=="\\"){temp.push_back(a[i+1]);temp.push_back(a[i+1]);}elsetemp.push_back(a[i+1]);j=j+2;}}}}print(temp,a,j); //用于数据的输出}然后是解压算法的设计思路如下,主要是定义三个vector的向量,一个用于记录要压缩的数据,一个用于记录标志’\’的在string中的位置,然后根据’\’的位置求出数据的数目,将数目保存到另外一个vector中,然后根据数据和长度一一对应输出,这样就将数据解压完成。

编码仿真实验报告(3篇)

编码仿真实验报告(3篇)

第1篇实验名称:基于仿真平台的编码算法性能评估实验日期:2023年4月10日实验地点:计算机实验室实验目的:1. 了解编码算法的基本原理和应用场景。

2. 通过仿真实验,评估不同编码算法的性能。

3. 分析编码算法在实际应用中的优缺点。

实验环境:1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 仿真平台:MATLAB 2020a4. 编码算法:Huffman编码、算术编码、游程编码实验内容:1. 编写Huffman编码算法,实现字符序列的编码和解码。

2. 编写算术编码算法,实现字符序列的编码和解码。

3. 编写游程编码算法,实现字符序列的编码和解码。

4. 在仿真平台上,分别对三种编码算法进行性能评估。

实验步骤:1. 设计Huffman编码算法,包括构建哈夫曼树、编码和解码过程。

2. 设计算术编码算法,包括编码和解码过程。

3. 设计游程编码算法,包括编码和解码过程。

4. 编写仿真实验代码,对三种编码算法进行性能评估。

5. 分析实验结果,总结不同编码算法的优缺点。

实验结果及分析:一、Huffman编码算法1. 编码过程:- 对字符序列进行统计,计算每个字符出现的频率。

- 根据频率构建哈夫曼树,叶子节点代表字符,分支代表编码。

- 根据哈夫曼树生成编码,频率越高的字符编码越短。

2. 解码过程:- 根据编码,从哈夫曼树的根节点开始,沿着编码序列遍历树。

- 当遍历到叶子节点时,输出对应的字符。

3. 性能评估:- 编码长度:Huffman编码的平均编码长度最短,编码效率较高。

- 编码时间:Huffman编码算法的编码时间较长,尤其是在构建哈夫曼树的过程中。

二、算术编码算法1. 编码过程:- 对字符序列进行统计,计算每个字符出现的频率。

- 根据频率,将字符序列映射到0到1之间的实数。

- 根据映射结果,将实数序列编码为二进制序列。

2. 解码过程:- 对编码的二进制序列进行解码,得到实数序列。

计算机视觉实验指导书

计算机视觉实验指导书

计算机实验指导书编写:郭曙光西安邮电学院自动化学院智能科学与技术专业2010年5月5号实验一几何投影、游程编码一、实验目的与要求:目的:通过本次实验,学生可以掌握图像几何投影、游程编码的方法。

要求:上机运行,调试通过。

二、实验设备:计算机、Matlab软件、VC++或C语言软件三、实验内容:(1)几何投影:对一幅简单二值图像的水平、垂直及对角线的投影。

(2)游程编码:对一幅简单二值图像进行游程编码。

四、实验原理:(1)几何投影:是指定方向上单条前景像素的个数,例如下图示例:(2)游程编码:是用图像象素值连续为1的个数(象素1的长度)来描述图像。

在游程长度编码中经常运用两种方法,一种是使用1的起始位置和1的游程长度,另一种是仅仅使用游程长度,如果第一个编码值为0,则表示游程长度编码是从0象素的长度开始,如图所示:1的游程:第一行(2,2)(6,3)(13,6)(20,1)第二行(4,6)(11,10)第三行(1,5 )(11,1)(17,4)1和0的游程长度:第一行0,1, 2,2,3,4,6,1,1第二行0,3,6,1,10第三行1, 5,5,1,5,4五、实验报告内容(1)叙述实验过程,列出代码及代码简要说明;(2)提交实验的原始图像和结果数据及图像。

(3)给出方法用途及结论的简要分析实验二形态算子一、实验目的与要求目的:学习常见的数学形态学运算基本方法,了解腐蚀、膨胀、开运算、闭运算取得的效果,培养处理实际图像的能力。

要求:上机运行,调试通过。

二、实验设备:计算机、Matlab软件、VC++或C语言软件三、实验内容:利用VC++/C或MatLab工具箱中关于数学形态学运算的函数,对二值图像进行膨胀、腐蚀和开运算、闭运算处理。

四、实验原理:膨胀:腐蚀:开运算:闭运算:五、实验报告内容(1)描述实验的基本步骤,用数据和图片给出各个步骤中取得的实验结果,并进行必要的讨论,必须包括原始图像及其计算/处理后的图像。

本科毕业设计(论文)-基于游程编码数据压缩算法设计与实现

本科毕业设计(论文)-基于游程编码数据压缩算法设计与实现
2.1.4信源编码的历史
最原始的信源编码就是莫尔斯电码,另外还有ASCII码和电报码都是信源编码。但现代通信应用中常见的信源编码方式有:Huffman编码、算术编码、L-Z编码,这三种都是无损编码,另外还有一些有损的编码方式。信源编码的目标就是使信源减少冗余,更加有效、经济地传输,最常见的应用形式就是压缩。另外,在数字电视领域,信源编码包括 通用的MPEG—2编码和H.264(MPEG—Part10 AVC)编码等 相应地,信道编码是为了对抗信道中的噪音和衰减,通过增加冗余,如校验码等,来提高抗干扰能力以及纠错能力[4]。
数据压缩技术主要采用两种方法:一种是“保真率”较高的无损压缩法;另一种是以损失信息细节而换取较高压缩比的有损压缩法。无损压缩虽然压缩比不是很高,但还原后的文件与原数据文件完全相同,从而保证了信息细节的不失真,常用的方法有统计式压缩法和字典式压缩法,统计式压缩法的编码方案主要是霍夫曼(Hufman)编码、算术编码(AC)和游程长度编码(RLC)[2]。其中,游程长度编码是一种十分简单的压缩方法,编码/解码的速度也非常快,因此得到了广泛的应用。许多图形和视频文件,如BMP,.TIF及.AVI等,都采用了这种压缩方法,尤其适用于文本(文件)数据压缩,它主要是去除文本中的冗余字符或字节中的冗余位以达到减少数据文件所占的存储空间的目的[6]。
0.17
0.15
0.10
0.01
0
0.2
0.39
0.57
0.74
0.89
0.99
2.34
2.41
2.48
2.56
2.74
3.34
6.66
3
3
3
3
3
4
7
000
001

游程编码实验报告

游程编码实验报告
% 下面程序是游程编码解压
l=1;
for m=1:image4length
for n=1:1:image4(m);
rec_image(l)=data(m);
l=l+1;
end
end
u=1:1:length(rec_image); % 查看解压后的图像数据
figure,plot(u,rec_image(u));
3、游程编码算法
一般游程编码有两种算法,一种是使用1的起始位置和1的游程长度,另一种是只使用游程长度,如果第一个编码值为0,则表示游程长度编码是从0像素的长度开始。这次实验采用的是前一种算法。两种方法各有优缺点:前一种存储比第二种困难,因此编程也比较复杂。而后一种需要知道第一个像素值,故压缩编码算法中需给出所读出的图的第一个像素值。
三、仿真方案详细设计
实验过程分为四步:分别是读入一副图象,将它转换成为二进制灰度图像,然后对其进行游程编码和压缩,最后恢复图象(只能恢复为二值图像)。
1、二值转换
所谓二值图像,就是指图像上的所有像素点的灰度值只用两种可能,不为“0”就为“1”,也就是整个图像呈现出明显的黑白效果。
2、游程编码原理
游程编码是一种无损压缩编码,对于二值图有效。游程编码的基本原理是:用一个符号值或串长代替具有相同值的连续符号,使符号长度少于原始数据的长度。据进行编码时,沿一定方向排列的具有相同灰度值的像素可看成是连续符号,用字串代替这些连续符号,可大幅度减少数据量。游程编码分为定长行程编码和不定长行程编码两种类型。游程编码是连续精确的编码,在传输过程中,如果其中一位符号发生错误,即可影响整个编码序列,使行程编码无法还原回原始数据。
image4length=length(image4); % 统计游程编码后的所占字节长度

实验报告程序编码

实验报告程序编码

一、实验目的1. 掌握程序编码的基本方法和技巧;2. 熟悉常用编程语言的特点和语法;3. 提高编程能力和问题解决能力。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3. 开发工具:PyCharm三、实验内容1. 编写一个简单的计算器程序,实现加、减、乘、除四种基本运算;2. 编写一个排序算法程序,对一组数据进行排序;3. 编写一个数据结构程序,实现链表的基本操作。

四、实验步骤1. 计算器程序(1)设计计算器界面,包括输入框、按钮和显示框;(2)编写事件处理函数,实现加、减、乘、除四种运算;(3)在界面中调用事件处理函数,显示计算结果。

代码如下:```pythonfrom tkinter importdef calculate():num1 = float(entry1.get())num2 = float(entry2.get())if operator.get() == '+':result = num1 + num2elif operator.get() == '-':result = num1 - num2elif operator.get() == '':result = num1 num2elif operator.get() == '/':result = num1 / num2else:result = 0label_result.config(text=str(result)) root = Tk()root.title("计算器")label1 = Label(root, text="数字1:") label1.grid(row=0, column=0)entry1 = Entry(root)entry1.grid(row=0, column=1)label2 = Label(root, text="数字2:") label2.grid(row=1, column=0)entry2 = Entry(root)entry2.grid(row=1, column=1)operator = StringVar()operator.set('+')label_operator = Label(root, text="运算符:")label_operator.grid(row=2, column=0)option_menu = OptionMenu(root, operator, '+', '-', '', '/') option_menu.grid(row=2, column=1)button_calculate = Button(root, text="计算", command=calculate) button_calculate.grid(row=3, column=0, columnspan=2)label_result = Label(root, text="")label_result.grid(row=4, column=0, columnspan=2)root.mainloop()```2. 排序算法程序(1)设计排序算法程序界面,包括输入框、按钮和显示框;(2)编写排序算法函数,如冒泡排序、选择排序、插入排序等;(3)在界面中调用排序算法函数,显示排序结果。

信息论与编码实验报告(DOC)

信息论与编码实验报告(DOC)

计算机与信息学院信息论与编码实验报告专业班级学生姓名及学号周伟康20112910 课程教学班号任课教师苏兆品实验指导教师实验地点2013 ~ 2014 学年第一学期信息论与编码课程设计目录一.课程设计目的 (2)二.课程设计要求 (2)三.课程设计描述 (2)四.程序结构 (2)五.算法及部分源码 (3)六.用例测试 (9)七.总结 (20)一.课程设计目的通过编程实现,在理解掌握的基础上进一步扩展课授的几种无失真信源编码算法。

以实践检验理论。

二.课程设计要求1.对一灰度图像进行游程编码的设计实现(将Huffman与游程结合)。

2.试对任意的数字序列(如学号、电话号码)进行自适应算术编码。

3.围绕设计题目查阅资料,掌握编码的基本原理。

4.按设计要求和编码原理进行算法的设计,算法的设计应满足正确性、可读性、健壮性、高效率等要求。

5.在此基础上,可以进行扩展三.课程设计描述本次设计实现内容:1.对任意的信源符号序列进行N元Huffman编码/译码。

2.对任意的信源符号序列进行N元Fano 编码/译码。

3.对任意的信源符号序列进行N元Elias 编码/译码。

4.对像素矩阵进行游程与上述编码方式结合的编码/译码。

5.数字串的自适应算数编码/译码。

6.对任意给定译码规则的译码和判断其是否为即时码。

输入数据从键盘或磁盘文件读入,运算结果显示到屏幕或保存到文件。

编写可视化图形交互界面。

本次设计程序用Java实现,由本人独立完成。

四.程序结构本次设计采用MVC设计模式:控制包下为文件读写线程执行包下是执行主类模式包分编码译码两部分Item:封装每个码元符号信息和操作AnlysisModel:信源序列统计分析模型其他如右图顾名思义视图包也分编码译码两部分MainFrame:主框架界面编码下:算数编码面板分组码编码面板译码下:算数译码面板分组码译码面板五. 算法及部分源码a) N 元Huffman 编码:算法:1) 将每个信源符号加入优先队列Heap 。

集合游程编码算法介绍与实验分析

集合游程编码算法介绍与实验分析
总第 2 0期 3

Co ue mp tr& Dii l gn eig gt ie r a En n
Vo . 6 NO 1 13 . 2
3 2
集合 游 程编码 算 法介 绍 与 实验分 析
常传 文 茅文深
南京 2O 0 ) 1O7 ( 国 电子 科 技 集 团 公 司 2 研 究 所 中 8


游程 编码是一种无损压缩算法 , 其简单 、 易于实现的特性也 使它得到了广泛的应用 。传统的游程编码选取固
定的阈值区分特征字符和非特征字符 , 限制 了压缩率的提高。从集合论的角度研究游程编码 , 提出了一种新的游程编码算
法 一集 合 游 程 , 法 中不 再使 用 阈值 , 将 全 域 字符 划 分 成 两 个 互 不 相 交 的 集 合 , 别 为 特 征 字 符 和非 特 征 字 符 , 过 对 特 算 而 分 通
Ex e i e sA n l s s p r m nt a y i
C ha g Ch nwen M a e he n ua o W ns n
( h 8hReerhIs tt f E C, a j g 2 0 0 ) T e2t sac nt ueo T N ni 10 7 i C n
Cls mb r TP 0 . a s Nu e 3 】6
1 引言
随着计算 机技术 的飞速发 展 , 压缩 编码 技术 也
有 了长足 的进 步 。从 信息论 的角度来 说 , 果按 照 如
到数学 中 , 建立 了基 于集 合分 析 的游 程 编码 , 再 不 使用 阈值 , 全 域 字 符 划 分成 两 个 互 不 相 交 的集 把 合, 分别 为特征 字符 和 非 特征 字符 , 特征 字 符进 行 合理 的映射来表 示连续 出现的次数 , 出 了一 种新 提 的游程 编码算法一 集合游 程编码 , 将游程 编码 算法

[精品]2895.F游程编码的的设计及性能的研究

[精品]2895.F游程编码的的设计及性能的研究

3、设计构想
(1)模拟二元相关信源,通过编码算法将该消 息压缩成码子,再通过译码过程将码子还原为消 息的过程。
(2)在压缩的过程中,计算游Fra bibliotek编码的压缩比率,即研究其性能。
游程编码的实现
游程编码三个模块: (1)模拟信源产生模块 (2)编码模块 (3)译码模块
模拟信源产生流程图:
编码模块流程图:
不足之处: (1)当输入的组数过大时,产生随 机数的时间比较慢,大约需要5秒; (2)对游程编码只进行了压缩比率的 研究,没有进一步地进行其他方面的 研究。
谢谢大家!
游程编码设计及性能研究

业:计算机科学与技术
指导教师:
答 辩 人:
讲师
目录
一、引言 二、游程编码实现 三、游程编码性能研究 四、结束语 五、致谢
引言
1、课题背景
飞速发展的数据压缩和图像编码技术,给多媒体数据传 输和数据存储带来极大的快捷和便利。但在某些数据安全性 要求比较苛刻的领域,现在比较流行和压缩效果好的压缩算 法几乎都属于有损范畴,对原始数据压缩处理后有不同程度 的损伤,无法完全恢复,以至于不能满足技术要求。
据媒体特性量身定制的压缩方法中,游程是最为简单、 最容易被想到的一种。大多数计算机中产生的图像都具有着 大面积重复的颜色块,为什么非要用无数个完全相同的颜色 值来表示某块图像呢?我们完全可以用一个颜色值加一个重 复次数来表示这一块图像,这就是 RLE 方法的基本思路。
2、基本概念
(1)图像数据压缩原理 由于图像数据之间存在着一定的冗余,所以使得数据的压缩成为可 能。信息论的创始人Shannon提出把数据看作是信息和冗余度的组合。 对数字图像进行压缩通常利用两个基本原理: 数字图像的相关性。在图像的同一行相邻像素之间、活动图像的 相邻帧的对应像素之间往往存在很强的相关性,去除或减少这些相关 性,也就去除或减少图像信息中的冗余度,即实现了对数字图像的压 缩。 人的视觉心理特征。人的视觉对于边缘急剧变化不敏感,对颜色 分辨力弱,利用这些特征可以在相应部分适当降低编码精度,而使人 从视觉上并不感觉到图像质量的下降,从而达到对数字图像压缩的目 的。

关于编码实验的实验报告

关于编码实验的实验报告

一、实验目的1. 理解编码的基本原理和方法;2. 掌握哈夫曼编码和LZ编码的基本思想;3. 学习利用编程实现编码算法;4. 分析编码效率,提高数据压缩能力。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm三、实验内容1. 哈夫曼编码(1)实验目的:掌握哈夫曼编码的基本原理,实现哈夫曼编码和译码。

(2)实验步骤:a. 统计待编码文件中字符出现的频率;b. 根据频率构造哈夫曼树;c. 为哈夫曼树中的每个节点分配码字;d. 编码待编码文件;e. 译码编码后的文件。

(3)实验结果:a. 哈夫曼树如图所示;b. 编码后的文件大小为:原文件大小的X%;c. 译码后的文件与原文件内容完全一致。

2. LZ编码(1)实验目的:熟悉LZ编码的基本思想,实现LZ编码和译码。

(2)实验步骤:a. 编写LZ编码程序,读取待编码文件;b. 实现LZ编码算法,生成编码后的文件;c. 编写LZ译码程序,读取编码后的文件;d. 译码编码后的文件,验证译码结果。

(3)实验结果:a. 编码后的文件大小为:原文件大小的Y%;b. 译码后的文件与原文件内容完全一致。

四、实验分析1. 哈夫曼编码与LZ编码的比较a. 哈夫曼编码适用于字符频率较高的文本文件,编码效率较高;b. LZ编码适用于字符重复率较高的文本文件,编码效率较高;c. 在实际应用中,可以根据文件特点选择合适的编码方法。

2. 编码效率分析a. 哈夫曼编码的编码效率取决于字符频率分布,频率分布越均匀,编码效率越高;b. LZ编码的编码效率取决于文本的重复率,重复率越高,编码效率越高。

五、实验总结1. 通过本次实验,掌握了哈夫曼编码和LZ编码的基本原理和实现方法;2. 学会了利用编程实现编码算法,提高了数据压缩能力;3. 了解了不同编码方法的特点,为实际应用提供了参考。

六、实验拓展1. 研究其他编码算法,如算术编码、行程编码等;2. 尝试将编码算法应用于图像、音频等不同类型的数据;3. 研究编码算法的优化,提高编码效率。

游程编码实验报告

游程编码实验报告

游程编码实验报告游程编码实验报告引言:游程编码是一种常用的数据压缩算法,通过统计连续重复的字符出现的次数,将其转化为一个字符和其重复次数的组合,从而实现对数据的高效压缩。

本实验旨在通过实际操作和数据分析,深入理解游程编码的原理和应用。

实验目的:1. 掌握游程编码的基本原理和算法;2. 了解游程编码在数据压缩中的应用;3. 分析游程编码的优缺点及适用范围。

实验步骤:1. 实验准备:a. 准备一段文本数据,长度不少于1000个字符;b. 编写游程编码的实现代码。

2. 游程编码实现:a. 将文本数据输入到游程编码算法中;b. 统计连续重复字符的次数,并将其转化为字符和重复次数的组合;c. 将游程编码后的数据输出。

3. 数据分析:a. 比较游程编码前后数据的大小,计算压缩率;b. 统计游程编码后的数据中字符的平均重复次数;c. 分析游程编码在不同类型数据上的效果差异。

实验结果与分析:通过实验,我们得到了以下结果和分析:1. 游程编码前后数据大小比较:在我们的实验中,游程编码后的数据大小相对于原始数据大大减小。

这是因为游程编码将连续重复的字符转化为字符和重复次数的组合,从而减少了数据的冗余性。

通过计算压缩率,我们可以得知游程编码的压缩效果。

2. 压缩率计算:压缩率是衡量数据压缩效果的重要指标。

通过实验数据的分析,我们可以计算出游程编码的压缩率。

压缩率的计算公式为:压缩率 = (压缩后数据大小 / 原始数据大小)* 100%。

根据实验结果,我们可以进行压缩率的比较和评估。

3. 字符的平均重复次数:游程编码将连续重复的字符转化为字符和重复次数的组合。

通过统计游程编码后的数据中字符的平均重复次数,我们可以了解到数据中的重复性程度。

这对于数据的分析和应用具有一定的参考价值。

4. 游程编码在不同类型数据上的效果差异:游程编码的效果受到数据的特点和分布的影响。

在实验中,我们可以尝试不同类型的数据,比如文本数据、图像数据等,来分析游程编码在不同类型数据上的效果差异。

游程长度编码实验报告

游程长度编码实验报告

一、实验目的1. 理解游程长度编码(Run-Length Encoding,RLE)的基本原理和操作方法。

2. 掌握RLE在数据压缩中的应用,并分析其压缩效果。

3. 比较RLE与其他数据压缩方法在压缩比和压缩速度上的差异。

二、实验原理游程长度编码是一种无损数据压缩技术,它通过记录连续相同元素的长度来减少数据量。

在RLE中,数据序列被表示为一系列的(值,长度)对,其中“值”是连续相同元素的值,“长度”是该值的连续出现次数。

三、实验步骤1. 数据准备:选择一组原始数据,例如二值图像或文本文件。

2. 编码实现:编写程序实现RLE编码,包括:- 遍历原始数据,识别连续相同元素及其长度。

- 将识别出的元素和长度组合成(值,长度)对。

- 生成编码后的数据序列。

3. 解码实现:编写程序实现RLE解码,包括:- 解析编码后的数据序列,提取(值,长度)对。

- 根据提取出的(值,长度)对,重建原始数据序列。

4. 性能分析:比较原始数据和编码后数据的长度,计算压缩比。

同时,分析编码和解码的效率。

四、实验结果1. 数据示例:假设我们有一组二值图像,其像素值为0或1。

2. 编码过程:- 原始数据:0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1。

游程编码实验报告

游程编码实验报告

实验二游程编码一、实验目的1、掌握游程编码原理;2、理解数据编码压缩和译码输出编码的实现。

二、实验要求实现游程编码和译码的生成算法。

三、实验内容输入一幅二值图像,先统计要压缩编码的文件中的字符字母出现的次数,按字符字母和空格出现的概率对其进行哈夫曼编码,然后读入要编码的文件,编码后存入另一个文件;接着再调出编码后的文件,并对其进行译码输出,最后存入另一个文件中。

四、实验原理1、xx树的定义:假设有n个权值,试构造一颗有n个叶子节点的二叉树,每个叶子带权值为wi,其中树带权路径最小的二叉树成为哈夫曼树或者最优二叉树;2、xx树的构造:weight为输入的频率数组,把其中的值赋给依次建立的HT Node对象中的data属性,即每一个HT Node对应一个输入的频率。

然后根据data属性按从小到大顺序排序,每次从data取出两个最小和此次小的HT Node,将他们的data 相加,构造出新的HTNode作为他们的父节点,指针parent,leftchild,rightchild赋相应值。

在把这个新的节点插入最小堆。

按此步骤可以构造出一棵xx树。

通过已经构造出的哈夫曼树,自底向上,由频率节点开始向上寻找parent,直到parent为树的顶点为止。

这样,根据每次向上搜索后,原节点为父节点的左孩子还是右孩子,来记录1或0,这样,每个频率都会有一个01编码与之唯一对应,并且任何编码没有前部分是同其他完整编码一样的。

五、实验程序#include<stdio.h>#include<string.h>#define NUM 1000char dat,flag,str[NUM],b[NUM];printf("(请输入待编码的字符串)\n\n");printf("原字符串为:");gets(str);//输入待编码的字符串flag=str[0];//记下第一个字符值作为flag游程编码的起始值/************************编码部分**********************************************/printf("\n游程编码为:");for(i=0;i<strlen(str);i++)//输入字符串的循环{if(str[i+1]==str[i])/************************译码部分**********************************************/printf("\n\n译码结果为:");for(j=0;j<h;j++)//对计数数组进行循环,次数为游程改变的次数{ for(z=0;z<a[j];z++)flag='1';else if(flag=='1')flag='0';//让flag轮流从0和1切换赋值}for(x=0;x<k;x++)printf("%c",b[x]);//将译出的码显示出来printf("\n\n\n");}八、结果分析九、实验心得。

游程编码的分析与实现

游程编码的分析与实现

课程设计任务书专业:通信工程课程设计名称:信息论与编码课程设计设计题目:游程编码的分析与实现一.设计目的1、深刻理解信源编码的基本思想与目的;2、理解游程编码方法的基本原理与特点;3、提高综合运用所学理论知识独立分析和解决问题的能力;4、使用MATLAB或其他语言进行编程。

二.设计内容读入一个图像,将每一个不同游程(不同颜色的像素块)的起始坐标和灰度值记录下来,以达到压缩图像存储空间的目的。

三.设计要求通过编码前后数据大小的对比显示压缩效果。

四.设计条件计算机、MATLAB或其他语言环境五.参考资料[1]曹雪虹,张宗橙.信息论与编码.北京:清华大学出版社,2007.[2]王慧琴.数字图像处理.北京:北京邮电大学出版社,2007.指导教师(签字):教研室主任(签字):批准日期:年月日游程编码的分析与实现摘要本文所研究的二值图像游程编码数据压缩,就是一种具有高压缩比的无损数据压缩技术,它是应用游程编码的原理对二值图像进行数据压缩的编码技术,其编码非常简单,编码和解码速度快,因此其应用范围广泛。

文章首先简要介绍了信源编码的原理,然后重点介绍游程编码的原理和实现技术,对游程编码技术做了较为全面的研究。

包括游程压缩模型、数据压缩、解压缩过程,比给出了相应的MATLAB程序。

关键词:游程编码,解码,信源编码,MATLAB目录1信源编码 (1)1.1信源编码简介 (1)1.2信源编码的理论基础 (1)1.3信源编码的分类及作用 (1)1.4信源编码的历史 (2)2游程编码 (2)2.1游程长度 (2)2.2游程编码算法 (2)2.3游程编码特点 (3)3游程编码的MATLAB实现 (3)3.1程序设计 (3)3.2输出结果 (5)3.2结果分析 (7)总结 (8)参考文献 (9)1信源编码1.1信源编码简介编码实质上就是对信源的原始符号按一定规则进行的一种变换。

编码可分为信源编码和信道编码。

由于信源符号之间存在分布不均匀和相关性,使得信源存在冗余度,信源编码的主要任务就是减少冗余,提高编码效率。

游程编码行程编码

游程编码行程编码
JPEG将其联合编码表示为“NNNNSSSS+尾码”, “NNNN”为当前非零值相对于前一个非零AC系数的 零游程计数,表示ZRL;这将“NNNN/SSSS”组合 为一个新的前缀码,用二维霍夫曼编码。即为AC系 数编码表示形式。
连续色调图像的二维编码
二维编码规则
(1)DC系数编码,得前缀码; (2)AC系数编码,得“NNNN/SSSS+尾码”; (3)综合(1)和(2),可得二维编码结果。
●EOL:规则(3)。同步码,查表可得为000000000001。即为答案。
连续色调图像的二维编码
引出前提 编码原理
AC编码表示形式
前面介绍了二值图像的一维MH编码,但对于多值或 连续色调图像,黑白游程已不适用,而基本RCL的3 元组也不能直接用。
JPEG标准的基本系统利用Z型扫描,将二维量化系 统矩阵转换成了一维数组ZZ(k),数组的第一个元 素ZZ(0)为直流系数DC(在4.2.3节截断霍夫曼编 码中已经讨论过);ZZ(1)~ZZ(63)元素为交流 系数(AC)。
●9个白:规则(1)。结尾码为9(白)对应的10100。即为答案。
●18个黑:规则(1)。结尾码为18(黑)对应的0000001000。即为答案。
●1621个白:规则(2)。组合基干码为1600(白)对应的010011010;补 充结尾码为1621-1600=21(白)所对应的0010111。所以答案为: 0100110100010111。
游程编码
游程编码内容
游程编码概念 基本RCL方法分析
二值图像的游程编码 连续色调图像的二维编码
游程编码概念
定义:
游程编码RCL:
又称“游程长度编 码”、“运行长度编码” 或“行程编码”,是一种 统计编码,该编码属于无 损压缩编码 。

实验三 信源编码实验

实验三 信源编码实验

实验三信源编码实验一、实验目的:1、掌握哈夫曼编码的Matlab实现方法。

2、掌握VC++读取信源数据的方法。

3、运行编译好的霍夫曼编码、算术编码、游程编码编码程序,比较霍夫曼编码、算术编码、游程编码编码的编码效果二、实验内容与步骤1、Huffman编码实验1)编写计算信息熵的M文件参考程序:function h=entropy(p)%H=ENTROPY(P)返回概率矢% 量P的熵函数if length (find(p<0))~=0error('Not a prob.vector,negative component(s)')endif abs (sum(p)-1)>10e-10error ('Not a prob.vector,components do not add up to 1') endh=sum(-p.*log2(p));求信源X=[x1,x2,…,x9],其相应的概率为p=[0.2,0.15,0.13,0.12,0.1,0.09,0.08,0.07,0.06];利用编写的程序计算信息熵,并记录数值。

2)编写程序实现Huffman编码编写实现Huffman编码的M文件,编译后运行,验证程序的正确性并记录编码结果。

参考程序:function [h,l]=huffman(p);%HUFFMAN 哈夫曼编码生成器% [h,l]=huffman(p),返回哈夫曼编码矩阵H及码字长度if length (find (p<0))~=0,erro('Not a prob.vector,negative component(s)')endif abs(sum(p)-1)>10e-10,error('Not a prob.vector,components do not add up to 1') endn=length(p);q=p;m=zeros(n-1,n);for i=1:n-1[q,l]=sort(q);m(i,:)=[l(1:n-i+1),zeros(1,i-1)];q=[q(1)+q(2),q(3:n),1];endfor i=1:n-1c(i,:)=blanks(n*n);endc(n-1,n)='0';c(n-1,2*n)='1';for i=2:n-1c(n-i,1:n-1)=c(n-i+1,n*(find(m(n-i+1,:)==1))-(n-2):n*(fi nd(m(n-i+1,:)==1)));c(n-i,n)='0';c(n-i,n+1:2*n-1)=c(n-i,1:n-1);c(n-i,2*n)='1';for j=1:i-1c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(m(n-i+1,:)==j+1 )-1)+1:n*find(m(n-i+1,:)==j+1));endendfor i=1:nh(i,1:n)=c(1,n*(find(m(1,:)==i)-1)+1:find(m(1,:)==i)*n); ll(i)=length(find(abs(h(i,:))~=32));endl=sum(p.*ll);在命令行后输入》p=[0.1 0.3 0.05 0.09 0.21 0.25];》[H,l]=huffman(p)记录运行结果,并说明编码结果是否正确,计算编码效率。

游程编码原理

游程编码原理

游程编码原理
游程编码是一种压缩算法,用于减少数据的存储空间。

它基于一
种简单的思想:将连续重复的数据块替换成一个标记符和重复的次数。

这样可以大大减小数据的体积。

游程编码的原理如下:
1. 扫描输入数据,找到连续重复的数据块。

2. 将连续重复的数据块替换成一个标记符和重复的次数。

3. 将处理后的数据存储起来。

4. 解码时,读取标记符和重复的次数,重复输出对应的数据块。

例如,假设输入数据为“AAAABBBCCDAA”,使用游程编码可以将
其压缩为“A4B3C2D1A2”。

在解码时,读取标记符和重复的次数,重
复输出对应的数据块,即可恢复原始数据。

游程编码在某些情况下可以极大地减小数据的体积,特别是对于
包含大量重复数据的情况。

然而,在一些数据模式下,它可能会导致
压缩效果不佳甚至变差。

因此,游程编码常常与其他压缩算法结合使用,以提高整体的压缩效果。

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

交通大学信息科学与工程学院综合性设计性实验报告
专业:通信工程专业11级
学号: 2
姓名:徐国健
实验所属课程:移动通信原理与应用
实验室(中心):信息技术软件实验室
指导教师:益才
2014年5月
一、题目
二值图像的游程编码及解码
二、仿真要求
对一幅图像进行编码压缩,然后解码恢复图像。

三、仿真方案详细设计
实验过程分为四步:分别是读入一副图象,将它转换成为二进制灰度图像,然后对其进行游程编码和压缩,最后恢复图象(只能恢复为二值图像)。

1、二值转换
所谓二值图像,就是指图像上的所有像素点的灰度值只用两种可能,不为“0”就为“1”,也就是整个图像呈现出明显的黑白效果。

2、游程编码原理
游程编码是一种无损压缩编码,对于二值图有效。

游程编码的基本原理是:用一个符号值或串长代替具有相同值的连续符号,使符号长度少于原始数据的长度。

据进行编码时,沿一定方向排列的具有相同灰度值的像素可看成是连续符号,用字串代替这些连续符号,可大幅度减少数据量。

游程编码分为定长行程编码和不定长行程编码两种类型。

游程编码是连续精确的编码,在传输过程中,如果其中一位符号发生错误,即可影响整个编码序列,使行程编码无法还原回原始数据。

3、游程编码算法
一般游程编码有两种算法,一种是使用1的起始位置和1的游程长度,另一种是只使用游程长度,如果第一个编码值为0,则表示游程长度编码是从0像素的长度开始。

这次实验采
用的是前一种算法。

两种方法各有优缺点:前一种存储比第二种困难,因此编程也比较复杂。

而后一种需要知道第一个像素值,故压缩编码算法中需给出所读出的图的第一个像素值。

压缩流程图: 解压流程图:
四、仿真结果及结论
原始图像
转化后的灰度图像
二值图像
上图为压缩编码后的图像
00.51 1.52 2.5x 10
5
50
100
150
200
250
300
编码之前的图像数据
0500100015002000250030003500400045005000
50
100
150
200
250
300
350
编码后数据信息
00.51 1.52 2.5x 10
5
50
100
150
200
250
300
解压后的图像数据
解压恢复后的图像
五、总结与体会
通过这次试验,我来了解一些关于游程编码的基本原理,所谓游程编码,其实它就是一种统计类型的编码,更是一种无损压缩编码。

原理是用一个符号值或串长代替具有相同值的连续符号,使符号长度少于原始数据的长度。

只在各行或者各列数据的代码发生变化时,一次记录该代码及相同代码重复的个数,从而实现数据的压缩,,而起始位置和宽度是关键。

二值图像是指只有黑(用255表示)白(用0表示)两种亮度值的图像。

把灰度值接近于255或者0的其他灰度都相应转化成255和0,即灰度图像就变成了黑白二值图像,通过对游程编码的原理可以看到一个灰度值由两个数值里来编码,这样效率很差,即便是游程足够长,用等长编码效率都不是太好。

通过这次试验我对编码有了更深的一些认识,但还不足以独立实现,需要大量查阅资料,总的来说,我对原理很明确,对具体编码这一块儿还不是太熟,以后会在这方面多多实践。

六、主要仿真代码
实验代码:
image1=imread('D:\我的图片\实验图.jpg'); %读入图像
imshow(image1); %显示原图像
title('原始彩色图像');
imgGray = rgb2gray(image1); % 转为黑白图像
figure; % 建立一个新窗口
imshow(imgGray); % 显示转化后的黑白图像
title('转化后的黑白图像');
imwrite(imgGray,'gray.jpg');
image2=imgGray(:); %将原始图像写成一维的数据并设为image2
[c,r]=size(imgGray(:,:,1));
image2=imgGray(:); %同上
image2length=length(image2); %统计长度
for i = 1:1:image2length %f转换为二值图像
if image2(i) >=127
image2(i) = 255;%纯黑色为255
end
if image2(i) <127
image2(i) = 0; %纯白色为0
end
end
image3=reshape(image2,c,r); %重建二维数组图像,并设为image3
figure,imshow(image3)
title('压缩后的二值图像');
% 以下程序为对原图像进行游程编码,压缩
X=image3(:); %令X为新建的二值图像的一维数据组
x=1:1:length(X); % 显示游程编码之前的图像数据
figure,plot(x,X(x));
title('编码前的图像数据');
j=1;
image4=[];
image4(1)=1;
for z=1:1:(length(X)-1)
if X(z)==X(z+1)
image4(j)=image4(j)+1;
else
data(j)=X(z);
j=j+1;
image4(j)=1;
end
end
data(j)=X(length(X)); % 最后一个像素数据赋给data image4length=length(image4); % 统计游程编码后的所占字节长度y=1:1:image4length ; % 显示编码后数据信息
figure,plot(y,image4(y));
title('编码后的数据信息');
CR=image2length/image4length;% 比较压缩前于压缩后的大小
% 下面程序是游程编码解压
l=1;
for m=1:image4length
for n=1:1:image4(m);
rec_image(l)=data(m);
l=l+1;
end
end
u=1:1:length(rec_image); % 查看解压后的图像数据
figure,plot(u,rec_image(u));
title('解压后的图像数据');
rec2_image=reshape(rec_image,c,r); % 重建二维图像数组figure,imshow(rec2_image); % 显示解压恢复后的图像
title('解压恢复后的图像');。

相关文档
最新文档