游程编码代码(游程编码的实现)
admin 发布:2022-12-19 02:42 128
本篇文章给大家谈谈游程编码代码,以及游程编码的实现对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、什么是游程编码?原理是?其有什么特点或缺点?
- 2、游程编码的介绍
- 3、游程长度编码的介绍
- 4、游程编码的基本原理
- 5、双游程编码
什么是游程编码?原理是?其有什么特点或缺点?
游程编码又称“运行长度编码”或“行程编码”,是一种统计编码,该编码属于无损压缩编码,是栅格数据压缩的重要编码方法。对于二值图有效。
行程编码的基本原理是:用一个符号值或串长代替具有相同值的连续符号(连续符号构成了一段连续的“行程”。行程编码因此而得名),使符号长度少于原始数据的长度。只在各行或者各列数据的代码发生变化时,一次记录该代码及相同代码重复的个数,从而实现数据的压缩。
常见的游程编码格式包括TGA,Packbits,PCX以及ILBM。
行程编码是连续精确的编码,在传输过程中,如果其中一位符号发生错误,即可影响整个编码序列,使行程编码无法还原回原始数据。
游程长度在栅格加密时,数据量没有明显增加,压缩效率较高,且易于检索、叠加合并等操作,运算简单,适用于机器存储容量小,数据需大量压缩,而又要避免复杂的编码和解码运算,增加处理和操作时间的情况。
游程编码的介绍
游程编码(RLC, Run Length Coding),又称“运行长度编码”或“行程编码”,是一种统计编码,该编码属于无损压缩编码,是栅格数据压缩的重要编码方法。对于二值图有效。游程编码,又称行程长度编码或变动长度编码法,是一种与资料性质无关的无损数据压缩技术。变动长度编码法为一种“使用固定长度的码来取代连续重复出现的原始资料”的压缩技术。
游程长度编码的介绍
游程长度编码(run-length code)游程长度编码是栅格数据压缩的重要编码方法,它的基本思路是:对于一幅栅格图像,常常有行(或列)方向上相邻的若干点具有相同的属性代码,因而可采取某种方法压缩那些重复的记录内容。其编码方案是,只在各行(或列)数据的代码发生变化时依次记录该代码以及相同代码重复的个数,从而实现数据的压缩。
游程编码的基本原理
行程编码的基本原理是:用一个符号值或串长代替具有相同值的连续符号(连续符号构成了一段连续的“行程”。行程编码因此而得名),使符号长度少于原始数据的长度。只在各行或者各列数据的代码发生变化时,一次记录该代码及相同代码重复的个数,从而实现数据的压缩。
常见的游程编码格式包括TGA,Packbits,PCX以及ILBM。
例如:5555557777733322221111111
行程编码为:(5,6)(7,5)(3,3)(2,4)(1,7)。可见,行程编码的位数远远少于原始字符串的位数。
并不是所有的行程编码都远远少于原始字符串的位数,但行程编码也成为了一种压缩工具。
例如:555555 是6个字符 而(5,6)是5个字符,这也存在压缩量的问题,自然也会出现其他方式的压缩工具。
在对图像数据进行编码时,沿一定方向排列的具有相同灰度值的像素可看成是连续符号,用字串代替这些连续符号,可大幅度减少数据量。
游程编码记录方式有两种:①逐行记录每个游程的终点列号:②逐行记录每个游程的长度(像元数)
第一种方式: A A A B B A C C C A 这个栅格图形就记为:
A,3,B,5
A,1,C,4,A,5
第二种就记作:
A,3,B,2
A,1,C,3,A,1
行程编码是连续精确的编码,在传输过程中,如果其中一位符号发生错误,即可影响整个编码序列,使行程编码无法还原回原始数据。
游程长度在栅格加密时,数据量没有明显增加,压缩效率较高,且易于检索、叠加合并等操作,运算简单,适用于机器存储容量小,数据需大量压缩,而又要避免复杂的编码和解码运算,增加处理和操作时间的情况。
举例来说,一组资料串"AAAABBBCCDEEEE",由4个A、3个B、2个C、1个D、4个E组成,经过变动长度编码法可将资料压缩为4A3B2C1D4E(由14个单位转成10个单位)。
简言之,其优点在于将重复性高的资料量压缩成小单位;然而,其缺点在于─若该资料出现频率不高,可能导致压缩结果资料量比原始资料大,例如:原始资料"ABCDE",压缩结果为"1A1B1C1D1E"(由5个单位转成10个单位)。
双游程编码
#include iostream
#include string.h
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void DRLC(char *s) { //双游程编码
int i=0,j=0;
char code='1',ending='0',t;//初始化 '0'为结束符,'1'为编码符
while(*s) {
if(*s==code) {
for(;j0;j--) printf("0");//ending没有累积到9个,输出 j 个 0
i++;
if(i==9) {
printf("%d",i);
i=0;
}
} else if(*s==ending) {
if(i0) {
printf("%d",i);
i=0;
} else if(++j==9) { //翻转编码
printf("%d",j);
t=code;
code=ending;
ending=t;
j=0;
}
}
s++;
}
if(j0) printf("%d",j);//输出末尾可能存在的 ending 个数
printf("\n");
system("pause");
}
int main(int argc, char** argv) {
char s[]="10 111111111 111110 1110 000000000 001 11";
DRLC(s);
return 0;
}
关于游程编码代码和游程编码的实现的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 05-02安卓消息播放提示音源代码(安卓原生提示音)[20240502更新]
- 05-02matlab随机共振代码(matlab振荡环节仿真)[20240502更新]
- 05-02dftc代码(dfa代码)[20240502更新]
- 05-02滚动代码生成器(滚动代码生成器手机版)[20240502更新]
- 05-02自动投票代码(自动投票代码大全)[20240502更新]
- 05-02bp神经网络在matlab代码(matlab中bp神经网络)[20240502更新]
- 05-02网页点击进入主页代码(web登录页面代码)[20240502更新]
- 05-02ajax删除代码(ajax 增删改查)[20240502更新]
- 05-02js代码3d图片叠加旋转切换(js图片绕中心旋转的代码)[20240502更新]
- 05-02代码如何实现导航栏(做导航栏代码)[20240502更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接