游程编码(Run Length Coding)

这篇具有很好参考价值的文章主要介绍了游程编码(Run Length Coding)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

游程编码

游程编码(Run Length Coding,简称RLC)又称游程编码、行程长度编码、变动长度编码 等,是一种统计编码。主要技术是检测重复的比特或字符序列,并用它们的出现次数取而代之。比较适合于二值图像的编码,但是不适用于连续色调阁像的压缩,例如日常生活中的照 片。为了达到较好的压缩效果,有时行程编码和其他一些编码方法混合使用。

该编码属于无损压缩编码,是栅格数据压缩的重要编码方法。对于二值图有效。该压缩编码技术相当直观和经济,运算也相当简单,因此解压缩速度很快。RLE压缩编码尤其适用于计算机生成的图形图像,对减少存储容量很有效果。

RLC的基本原理是:用一个符号值或串长代替具有相同值的连续符号(连续符号构成了一段连续的“行程”。行程编码因此而得名),使符号长度少于原始数据的长度。

基本介绍

行程编码(Run-length Coding)是相对简单的编码技术,主要思路是将一个相同值 的连续串用一个代表值和串长来代替。例如,有一个字符串“aaabccddddd”,经过行程 编码后可以用“3a1b2c5d”来表示。对图像编码来说,可以定义沿特定方向上具有相同灰度值的相邻像素为一轮,其延续长度称为延续的行程,简称为行程或游程。例如,若沿水平方向有一串M个像素具有相同的灰度N,则行程编码后,只传递2个值(N,M) 就可以代替M个像素的M个灰度值N。

此方式下每两个字节组成一个信息单元。第一个字节给出其后面相连的象素的个数。第二个字节给出这些象素使用的颜色索引表中的索引。例如:信息单元03 04,03表示其后的象素个数是3个,04表示这些象素使用的是颜色索引表中的第五项的值。压缩数据展开后就是04 04 04 .同理04 05 可以展开为05 05 05 05. 信息单元的第一个字节也可以是00,这种情况下信息单元并不表示数据单元,而是表示一些特殊的含义。这些含义通常由信息单元的第二个字节的值来描述。
行程编码对传输差错很敏感,如果其中一位符号发生错误,就会影响整个编码序列的正确性,使行程编码无法还原回原始数据,因此一般要用行同步、列同步的方法.把差错控制 在一行一列之内。

示例1

例如:5555557777733322221111111。行程编码为:(5,6)(7,5)(3,3)(2,4)(l,7)。可见,行程编码的位数远远少于原始字符串的位数。

示例2

在对图像数据进行编码时,沿一定方向排列的具有相同灰度值的像素可看成是连续符号,用字串代替这些连续符号,可大幅度减少数据量。行程编码是连续精确的编码,在传输过程中,如果其中一位符号发生错误,即可影响整个编码序列,使行程编码无法还原回原始数据。

游程编码(Run Length Coding)

对如上图所示的栅格数据,可沿行方向进行如下游程长度编码: (9,4),(0,4),(9,3),(0,5),(0,1)(9,2),(0,1),(7,2),(0,2),(0,4),(7,2),(0,2),(0,4),(7,4),(0,4),(7,4) ,(0,4),(7,4) ,(0,4),(7,4)。游程长度编码只用了40个整数就可以表示,而如果用前述的直接编码却需要64个整数表示,可见游程长度编码压缩数据是十分有效又简便的。事实上,压缩比的大小是与图的复杂程度成反比的,在变化多的部分,游程数就多,变化少的部分游程数就少,图件越简单,压缩效率就越高。

游程长度编码在栅格加密时,数据量没有明显增加,压缩效率较高,且易于检索,叠加合并等操作,运算简单,适用于机器存贮容量小,数据需大量压缩,而又要避免复杂的编码解码运算增加处理和操作时间的情况。

游程编码适用的场景

算法的基本思想是将重复且连续出现的字符进行压缩,使用更简短的方式来描述,这种方式是基于柯氏复杂度的,那么什么是柯氏复杂度呢,比如有这么三个字符串,它们的长度都是100,其中第一个是100个A,第二个是99个A和一个B,第三个是100个完全随机的字符,我们想办法用尽可能短的语言来描述原字符串,描述第一个字符串时可以说“这是100个A”,描述第二个字符串可以说“这是99个A,然后是一个B”,但是描述第三个字符串时应该怎么说呢?比较容易想到的是“这是100个随机字符”,看上去似乎没有问题,但是这里一个比较重要的点是描述信息需要符合这么一个条件,当单独给出对字符串的描述时能够根据描述恢复出原字符串的内容,100个A和先99个A然后是一个B可以,但是100个随机字符太笼统了显然不行,这个描述信息的长度就称之为柯氏复杂度,在这个例子中第一个柯氏复杂度最小,第二第三依次次之。

那么在不同情况下这个编码的效果如何呢,假如采用定长1个字节来描述连续出现次数,并且一个字符占用1个字节,那么描述(连续出现次数,某个字符)需要的空间是2个字节,只要这个连续出现次数大于2就能够节省空间,比如AAA占用3个字节,编码为(3,A)占用两个字节,能够节省一个字节的空间,可以看出连续出现的次数越多压缩效果越好,节省的空间越大,对一个字符编码能够节省的空间等于=连续出现次数-2,于是就很容易推出连续出现次数等于2时占用空间不变,比如AA占用两个字节,编码为(2,A)仍然占用两个字节,白白浪费了对其编码的资源却没有达到节省空间的效果,还有更惨的情况,就是连续出现次数总是为1,这个时候会越压越大,比如A占用一个字节,编码为(1,A)占用两个字节,比原来多了一个字节,这种情况就很悲剧,一个1M的文件可能一下给压缩成了2M(真是效果奇佳啊),这是能够出现的最糟糕的情况,相当于在文件的每一个字节前面都插入了一个多余的字节0X01(这个字节表示连续出现次数为1),这种情况说明不适合使用游程编码,事实上,绝大多数数据的特征都属于第三种情况,不适合使用游程编码。文章来源地址https://www.toymoban.com/news/detail-444517.html

到了这里,关于游程编码(Run Length Coding)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【2023最新版】腾讯云CODING平台使用教程(Pycharm/命令:本地项目推送到CODING)

    目录 一、CODING简介 网址 二、CODING使用 1. 创建项目 2. 创建代码仓库 三、PyCharm:本地项目推送到CODING 1. 管理远程 2. 提交 3. 推送 4. 结果 四、使用命令推送 1. 打开终端 2. 初始化 Git 仓库 3. 添加远程仓库 4. 添加文件到暂存区 5. 提交更改 6. 推送         腾讯云 CODING 平台是

    2024年02月09日
    浏览(67)
  • 每日coding

    给你一个字符串 word ,你可以向其中任何位置插入 \\\"a\\\"、\\\"b\\\" 或 \\\"c\\\" 任意次,返回使 word 有效 需要插入的最少字母数。 如果字符串可以由 \\\"abc\\\" 串联多次得到,则认为该字符串 有效 。 示例 1: 示例 2: 示例 3: 提示: 1 = word.length = 50 word 仅由字母 \\\"a\\\"、\\\"b\\\" 和 \\\"c\\\" 组成。 这道题目

    2024年01月19日
    浏览(50)
  • 如何从Coding拉取代码

    加入团队项目获取权限(之加入团队是看不到代码的); 下载git; windows+r,打开cmd,选择文件夹位置,输入 ssh-keygen -t rsa -C + \\\"自己邮箱号\\\" ,一直点击“enter”键即可 找到 id_rsa.pub 文件,拷贝所有内容(上图第三行会显示文件位置); 打开Coding,找到个人账户设置-SSH公钥-粘

    2024年02月09日
    浏览(28)
  • pandas字段分列遇到ValueError: Length of values does not match length of index

    在使用pandas针对字段进行分列时遇到这个问题,ValueError: Length of values does not match length of index。 问题描述 例如:针对字段进行分列 data[\\\'time\\\'] = data[\\\'time\\\'].astype(str) data[\\\'day\\\'] = data[\\\'time\\\'].str.split(\\\" \\\")[0] data[\\\'hour\\\'] = data[\\\'time\\\'].str.split(\\\" \\\")[1] 原来是语句写错了,这里只需要改成:

    2023年04月12日
    浏览(36)
  • CODING DevOps产品认证笔记

    第一章敏捷软件开发背景 背景:乌卡时代 易变性:当今世界的变化越来越多越来越快,越来越不可预测。 不确定性:历史上的任何一个时代所带来的经验已经无法为当今世界的所有变化提供参照。 复杂性:事物间的交融越来越密切各种问题的改生原因,其带来的影响和反应会受

    2024年02月03日
    浏览(30)
  • coding 自定义节点服务器

    在root账号下  选择手动接入 安装客户前,请检查环境依赖。如何安装环境依赖? · Python 3.6, 3.7, 3.8, 3.9 · Git = 2.8 · Java 8 或 11 以及 Jenkins 1. 创建工作目录并进入工作目录 创建 codingci/tools 进入 codingci/tools  安装java11 (Python和git 系统自带 查看版本是否支持)  2.在上述工作

    2024年02月09日
    浏览(40)
  • 【论文阅读笔记】Contrastive Multiview Coding

     这篇文章主要探讨人类通过多种感官通道来观察世界,比如左眼观察到的长波长光通道,或右耳听到的高频振动通道。每个观察角度都带有噪音且是不完整的,但一些重要的因素,如物理、几何和语义,往往在所有观点之间共享(例如,“狗”可以被看到、听到和感受到)

    2024年01月18日
    浏览(38)
  • Hutool改变我们的coding方式(二)

    测试代码地址:https://gitee.com/Augenstern-creator/kuang-study_-hutools Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了

    2024年01月16日
    浏览(92)
  • 腾讯Coding的持续部署模块的使用。

    1,需要先开启集群:搜索容器服务,使用TKE容器服务: 新建集群的操作如下: 2,创建完集群后,点击进入集群。 点击按钮开启外网访问,基本信息 - 外网访问的按钮打开。 会要求选择外网访问设置。最新版的使用安全组来配置。 点击新建安全组: 添加一个安全组后,点

    2024年02月14日
    浏览(33)
  • 我的个人网站——宏夏Coding上线啦

    网站地址:宏夏Coding Github地址:🔥🔥宏夏coding网站,致力于为编程学习者、互联网求职者提供最需要的内容!网站内容包括求职秘籍,葵花宝典(学习笔记),资源推荐等内容。 大家好,我是宏夏c,目前是一名软件工程专业的大三学生。🙂 回顾起大一入学的那个初夏,我

    2024年02月09日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包