[转]行程编码

[url]http://chengkehan.wordpress.com/2011/01/16/%E8%A1%8C%E7%A8%8B%E7%BC%96%E7%A0%81%EF%BC%88run-length-encoding%EF%BC%89/[/url]

行程编码应该算是简单的一种压缩技术了。这种的算法非常明了,比如我有一个字符串“AAAABBBBCCCCDDDD”,如果以最简单的ASCII编码形式保存的话,就需要16个字节,那么如果使用了行程编码呢,编码后将会像是这样,“#A4#B4#C4#D4”,就是12个字节,如果重复char越多效果就越明显了。注意这里我们使用的是ASCII编码的演示,所以“#A4”是三个字节,“#A255”同样是三个字节。压缩后的“#A4#B4#C4#D4”是什么意思呢,在这里“#”是一个标记(一般叫做哨兵),表示在这个后边的字符是被编码过的,当然这里选择“#”只是一个演示,具体的你需要更具情况来选择一个,在被编码的文本中很少出现的字符,这样压缩的效果就会更好(原因后面会说)。那么接下去的“A4”就表示“A”这个字符重复四次,以此类推。

这里有一个要注意个问题,万一我选择的哨兵和被压缩的文本中的字符一样了该怎么办呢,因为我们有时很难保证哨兵一定不会和文本中的字符相同。比如哨兵是“#”压缩的文本是“###”,那么输出的结果应该是“##3”,第一个“#”是哨兵,第二个“#”是重复的字符。

再看上面的例子,其实压缩效果不是那么好,“AAAA”(四个字节)被压缩成了“#A4”(三个字节),那如果是“AAA”(三个字节呢),那么输出的就是“#A3”(还是三个字节),根本没有压缩,所以只有当出现3个以上重复字符时执行该算法才是有效果的,小于三个反而会增加字节数,当然重复字符越多效果就越明显。

好,问题又来了,现在对哨兵是“#”压缩的文本是“###”进行处理,很明显,要压缩的文本不足三个字符,难道就不进行压缩了吗,如果看到小于三个重复的就不压缩,那么我们怎么判断这里的“#”是哨兵还是文本中的字符呢。所以如果文本中有和哨兵相同的字符,那么就不能按照上面说的“三个以上重复的执行算法”来做。这也就是为什么在选择哨兵字符是要做特别注意的原因了,最好哨兵字符不要再文本中出现,因为如果哨兵不是重复多次的切出现的很多,那么压缩的效果将大打折扣了

下面是一个对ASCII进行行程编码的源码

http://www.rayfile.com/zh-cn/files/19cd1e1c-1efc-11e0-97bb-0015c55db73d/
由于是对针对ASCII编码文本的操作,所以一个字符如果重复超过超过255次,那么将从第256次重新开始计数。所以不会出现像这样的“#A256”,而应该是“#A255A”。如果你想把它应用于更广的字符范围可以改成双字节的unicode。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
图像行程编码(Run-length encoding)是一种用于压缩图像信息的方法。它的基本思想是利用相同像素值连续出现的特点,将连续出现的像素值及其出现的次数进行编码,以达到减少图像数据量的目的。 图像行程编码可以通过MATLAB来实现。下面是一个简单的实现过程: 1. 首先,读取要进行编码的图像。可以使用MATLAB中的imread函数来读取图像文件。 2. 将图像换为灰度图像。可以使用MATLAB中的rgb2gray函数将彩色图像换为灰度图像。 3. 对图像进行行程编码。遍历图像的每个像素,并记录每段连续像素值的起始位置、长度和像素值。可以使用MATLAB中的双重循环来实现。 4. 将编码结果保存。可以使用MATLAB中的数据结构或矩阵来保存编码结果,例如使用一个矩阵或向量来保存每段连续像素值的起始位置、长度和像素值。 5. 根据需要,可以选择将编码结果保存为文件或进行其他操作,例如解码、压缩等。 同时,需要注意以下几点: - 图像行程编码可以在水平方向、垂直方向或两个方向同时进行,以更好地压缩图像信息。 - 行程编码的效果取决于图像的特点。对于包含大量连续像素值的图像,行程编码可以有效地减少数据量;而对于包含大量离散像素值的图像,行程编码效果可能较差。 - 行程编码是一种无损压缩方法,即编码后可完全还原原始图像。但它并不适用于所有类型的图像。 通过MATLAB实现图像行程编码可以有效地压缩图像数据,减少存储空间和传输带宽的使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值