行程编码与词典编码 | 学习笔记

简介: 快速学习行程编码与词典编码,介绍了行程编码与词典编码系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【高校精品课-华中科技大学 -智能媒体计算行程编码与词典编码】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/811/detail/15685


行程编码与词典编码


内容介绍

一.行程编码(Run Length Encoding

二、词典编码(Dictionary Encoding )


一、行程编码(Run Length Encoding)

1.概念

行程编码(RLE)在部分教材中,又被称为游程编码。R是Run表示行程和游程;L是 LengthE是 Encoding

图片1.png

RLE 编码的概念

2.乘法代替加法

①使用场景

该算法表示在讲述图像的空间冗余中发现,有大量冗余的区域,两者颜色值接近,通过差分脉冲调制等方法,进行编码后会产生许多相同连续的数字。

②举例

如:全为同一颜色时,经过差分后则全为0或连续若干个8,此时是不采用将单独的0挨个保存,而采用将连续的0看作一个0去保存,另外再将个数存储起来,因为可以解决将加法变为乘法,连续的个数越多,方法效率越高。Eg:此时需要50个8,一个8占3位,采用按个保存则需要150位,而使用将个数单独保存的形式,只需要一个8占3位,一个50占6位,只需要9位。

③好处

此种使用乘法代替加法减少行程长度的方式,可以大幅度降低占用的空间。同时行程长度(Run)的颜色,长度和样本值重复次数越多,编码越有用,压缩比也越高。


二、词典编码(Dictionary Encoding )

1.概念

词典编码类似于查字典的方式。词典编码是根据数据本身包含很多重复的特性,如:在字典中有大量词,不再重复存储相同的词,而采用将其是第几个词的索引存储下来即可。如:“中华人民共和国”在第15页第2条索引,要将15页第2条这个索引记下,而非中华人民共和国”这个词。

词典编码(Dictionary Encoding )的根据是数据本身包含有重复

代码这个特性

例如,文本文件和光栅图像就具有这种特性

2.分类

词典编码法的种类很多,归纳起来大致有两类

①第一类

查找正在压缩的文本,字符或是光栅图像,看其编码的数据是否

在之前输入的数据中出现过。

若出现过,用已经出现过的字符串代替重复的部分,不再重复编

码,只保留字符串的指针。

它的输出仅仅是指针早期出现过的字符串的“指针”

如:输入流为 ABCDXABCM....从第一个开始 A 为第一次出现,则输出 A,B 同理之前并未变过,也为第一次出现,输出 B,之后 CDX 同理输出。但到 ABCM 时,其中连续的 ABC 都曾出现过,此时不再存储ABC而存储P,P表示指向之前出现过的 ABC 字符串的指针。

图片2.png

该算法核心思想:

编译当前字符时,要考虑之前是否出现过。

②第二类

经过统计后发现其中有许多为经常出现的数据

采用从输入的数据中提前创建一个“短语词典(dictionary of the

phrases)”

这种短语不一定具有具体含义的短语,它可以是任意字符的组合。

如:图像一段连续的颜色值或灰度值、任意数字的组合、文本数据字符串等。

遇到已经在词典中出现的短语后,编码器在输出这个词典中的索引号相当于指针,而非短语数据本身。

案例

将经常出现的短语,颜色创建一个词典。ac 由索引号1表示;ax 由索引号2表示;ec由索引号3表示;axx 由索引号4表示;cax 由索引号5表示。

12345分别表示不同的词和短语,共同组成一个词典。开始编译输入数据流时,遇到a在词典中没有,无反应。编译到 ac 发现在词典中有对应,输出索引1。

编译至 acb 词典中并没有,因而将 ac 作为一个词,b 作为一个词分开查找,由ac找到词典中的索引1,b 在词典中未找到,输出 b。而后 axx 在词典中存在,因而输出对应索引4,之后的 a、d、y 在词典中都无法查到,对应输出 a、d、y。

图片3.png

从图中的输入和输出可以看出,输出相比输入而言减少许多。当编码数据量增大时,效果更加明显。

相关文章
|
机器学习/深度学习 人工智能 自然语言处理
AI编程助手对比
AI编程助手对比
643 10
|
网络协议 安全 Unix
深入剖析进程间通信:Unix 套接字、共享内存与IP协议栈的性能比较
深入剖析进程间通信:Unix 套接字、共享内存与IP协议栈的性能比较
459 2
|
设计模式 中间件 程序员
【C/C++ 奇异递归模板模式 】C++中CRTP模式(Curiously Recurring Template Pattern)的艺术和科学
【C/C++ 奇异递归模板模式 】C++中CRTP模式(Curiously Recurring Template Pattern)的艺术和科学
962 3
|
数据中心
网络拓扑包括哪些类型?
【8月更文挑战第19天】网络拓扑包括哪些类型?
998 1
|
存储 开发框架 开发工具
Electron有哪些使用场景
【10月更文挑战第13天】Electron有哪些使用场景
950 0
|
JSON 安全 调度
Android面试题之Kotlin协程一文搞定
本文介绍了协程的基础知识,强调它是轻量级线程,用于处理耗时任务而不阻塞主线程,确保主线程安全。协程特点包括使异步逻辑同步化,并允许函数挂起和恢复。挂起函数由`suspend`关键字标识,只能在协程内部调用。挂起与阻塞的主要区别在于挂起不会导致主线程ANR。 结构化并发和协程作用域(如`CoroutineScope`、`GlobalScope`、`MainScope`等)提供了任务管理,文章还探讨了并发、启动模式、协程取消、超时任务以及资源释放等主题。
310 0
|
运维
计算机网络——计算机网络的性能指标(下)-时延带宽积、往返时间、利用率、丢包率
计算机网络——计算机网络的性能指标(下)-时延带宽积、往返时间、利用率、丢包率
1275 0
|
存储 算法 程序员
实现一个malloc内存分配器(图文并茂)
实现一个malloc内存分配器(图文并茂)
101846 0
|
Ubuntu Docker 容器
迁移harbor
在Ubuntu 22.04 LTS环境中,已安装Docker的Harbor从v2.5.3迁移到v2.9.0,保留原有镜像数据。参考官方文档[v2.9.0](https://goharbor.io/docs/2.9.0/),执行包括数据目录复制、解压新版本、配置harbor.yml和docker-compose.yml、运行安装脚本等步骤。迁移后,通过测试推拉镜像确保功能正常。注意查看潜在的部署问题。
398 0