数据压缩算法

游程编码

n分为定长游程编码和变长游程编码两类。

n定长游程编码是指编码的游程所使用的位数是固定的,一旦灰度相同且连续的个数超过了固定位数所能表示的最大值,则转入下一轮游程编码。

n变长游程编码则是指不同范围的游程使用不同位数来进行编码。

游程编码适合于二值图像编码,原因是二值图像的每一行(列)都是由若干个黑白像素段交替出现的,就可以将二元序列转换为游程长度的序列

Y Y Y Y Y G
G B B B B Y

5X5像素中,yellow blue green 三种颜色,分别标志为 Y B G

顺序下来就是YYYYYGGBBBBY …

你可以发现,很多时候一幅图像总是有很多重复的像素。

所以我们可以使用Y4 表示4个Y 。这样就只用了2个字符。重复操作。Y4G2B4Y…

解码的时候,逆过程就可以了。

我们也可以发现如果只有一种颜色的地方,如G1 ,反而由一个字符变成 了两个字符。如果一幅图像,重复很少,那么反而会使编码更大了。

当只有黑白的时候。那么可以这样表示,去掉 W B , 用 黑白的数字表示 。默认以白色开头,黑色开头的加上0 表示。文本类黑纸白字图像好用这个

赫/哈/霍 夫曼(Huffman)编码

核心原理就是利用概率学,把经常出现的用更短的编码来表示。

哈夫曼编码属于变长编码,是一种平均长度最短的即时可译码

n该编码对最常出现的符号赋予最短的码字,然后按符号出现概率递减顺序逐个赋予次长的码字。因此,使编码的平均长度最短。


pi是si的出现概率,li,是对si编码的码字长p_i是s_i的出现概率,l_i,是对s_i编码的码字长 pi​是si​的出现概率,li​,是对si​编码的码字长

Lavg是衡量一个压缩算法的压缩率。L_{avg} 是衡量一个压缩算法的压缩率。 Lavg​是衡量一个压缩算法的压缩率。

举例

信号源 s={s1, s2, s3, s4, s5, s6},其概率分布为p1=0.4, p2=0.3, p3=0.1, p4=0.1, p5=0.06, p6=0.04,求其哈夫曼编码

S1 0.4
S2 0.3
S3 0.1
S4 0.1
S5 0.06
S6 0.04
  1. 将信源符号按出现概率从大到小排成一列,然后把最末两个符号的概率相加,合成一个概率。

  2. 把这个符号的概率与其余符号的概率按从大到小排列,然后再把最末两个符号的概率加起来,合成一个概率。

  3. 重复上述做法,直到最后剩下两个概率为止。

  4. 从最后一步剩下的两个概率开始逐步向前进行编码。每步只需对两个分支各赋予一个二进制码

1-3:

4:

括号 上部分表0 下半部分表1 (上1下0也行,选定,就不要改了)

括号作为二叉树,沿路径到到s即可编码

如 这里的 0.6 为根结点

s1的编码为 0

s2 的编码为 10 。从0.6 根结点开始 到左孩子结点

s3:110 根-> 右孩子 -> 左孩子

s4: 1110 依次类推。

唯一可解码和即时编码。

赫/哈/霍 夫曼(Huffman)编码 游程编码相关推荐

  1. 基于霍夫曼(Huffman)图像编码的图像压缩和重建-含Matlab代码

    目录 一.引言 二.霍夫曼Huffman编码 2.1 霍夫曼编码流程 2.2 输入数据的编码 三.霍夫曼解码 四.实验结果 五.参考文献 六.Matlab代码(GUI界面)获取 一.引言 随着通信与信 ...

  2. huffman python,哈夫曼(Huffman)编码python代码实现

    首先看定义 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种.Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率 ...

  3. labview霍夫曼编码_香农编码与霍夫曼编码

    一.香农-范诺编码 香农-范诺(Shannon-Fano)编码的目的是产生具有最小冗余的码词(code word).其基本思想是产生编码长度可变的码词.码词长度可变指的是,被编码的一些消息的符号可以用 ...

  4. 计算机论文图片大小,对一副大小为256*256的bmp格式256色的灰度图象进行霍夫曼和字典编码压缩处理...

    内容简介: 课程设计 对一副大小为256*256的bmp格式256色的灰度图象进行霍夫曼和字典编码压缩处理,共31页,6992字 目录 绪论1 1原理分析2 1.1数字图象2 1.1.1灰度图象2 1 ...

  5. 熵编码(算术+霍夫曼)编解码基础知识总结

    在MPEG的TMC13模型中,对于surface point cloud compression,对block和vertices进行熵编码:对于lidar point cloud compressio ...

  6. 霍夫曼(Huffman)编码算法详解之C语言版

    一.Huffman编码 霍夫曼(Huffman)树是一类带权路径长度最短的二叉树树.Huffman树的一个非常重要的应用就是进行Huffman编码以得到0-1码流进行快速传输. 在电报收发等数据通讯中 ...

  7. 深入学习二叉树(三) 霍夫曼树

    深入学习二叉树(三) 霍夫曼树 1 前言 霍夫曼树是二叉树的一种特殊形式,又称为最优二叉树,其主要作用在于数据压缩和编码长度的优化. 2 重要概念 2.1 路径和路径长度 在一棵树中,从一个结点往下可 ...

  8. Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树

    Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树 文章目录 Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树 0x00 摘要 0x01 背景概念 1.1 词向量 ...

  9. 构建一个JPEG解码器(3):霍夫曼表

    霍夫曼表 简述 重构 即时 霍夫曼算法 JPEG DHT 段 源代码 jpeg.h jpeg.cpp inttypes.h main.cpp Makefile 接下来:读取比特流 简述 在上一部分中, ...

  10. 二叉树合集(二):霍夫曼树(图文详解)

    合集地址 二叉树合集(一):二叉树基础(含四种遍历,图文详解) 二叉树合集(二):霍夫曼树(图文详解) 二叉树合集(三):线索二叉树(图文详解) 二叉树合集(四):对称二叉树(递归和迭代实现) 二叉树 ...

最新文章

  1. Cocos Creator 音频文件Audio的绑定与使用(TypeScript)
  2. 测试nginx网站代码_在40行以下代码中使用NGINX进行A / B测试
  3. java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...
  4. 产品经理等级的划分,来看看你是几级的PM?
  5. 基于国密算法SM2SSL证书的https加密,如何实现?
  6. boost::math::interpolators::cardinal_quadratic_b_spline用法的测试程序
  7. Mysql Group by 分组取最小的实现方法
  8. [03] Android系统亮度调节
  9. struts Caused by: no protocol dtd - Class: java.net.URL
  10. bambook引起的adb启动异常的问题
  11. Jquery调用C#后台方法
  12. Testing a React+Redux web application
  13. MySQL中json数据操作(转载)
  14. 计算机系统更新不上怎么办理,电脑系统更新打不开怎么办
  15. Unity3D学习笔记
  16. matlab索引超出数组边界且不提示数组边界的一种处理办法
  17. python自动按键脚本
  18. vue中自己实现的页面切换标签手动关闭功能
  19. CSS笔记(菜鸟教程)
  20. 技术文摘12 yun jia 技术 资料 截图工具 美容

热门文章

  1. python聊天室设计_基于python的GUI聊天室设计
  2. 深度Linux收费,Deepin专业版为收费的,而Deepin社区版则是能免费使用的
  3. Oracle财务管理系统
  4. AE duik插件运用-人物行走动画
  5. 一步一步实现iOS微信自动抢红包(非越狱)
  6. 查普曼-科莫高洛夫方程Chapman–Kolmogorov equation
  7. 微信公众号推送模板消息(二):Access_token的获取
  8. java后台设置定时执行任务,Java定时任务调度详解
  9. 博科光纤交换机配置及管理 B/S篇
  10. matlab作图有拉盖尔,拉盖尔高斯光束matlab