赫/哈/霍 夫曼(Huffman)编码 游程编码
数据压缩算法
游程编码
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-3:
4:
括号 上部分表0 下半部分表1 (上1下0也行,选定,就不要改了)
括号作为二叉树,沿路径到到s即可编码
如 这里的 0.6 为根结点
s1的编码为 0
s2 的编码为 10 。从0.6 根结点开始 到左孩子结点
s3:110 根-> 右孩子 -> 左孩子
s4: 1110 依次类推。
唯一可解码和即时编码。
赫/哈/霍 夫曼(Huffman)编码 游程编码相关推荐
- 基于霍夫曼(Huffman)图像编码的图像压缩和重建-含Matlab代码
目录 一.引言 二.霍夫曼Huffman编码 2.1 霍夫曼编码流程 2.2 输入数据的编码 三.霍夫曼解码 四.实验结果 五.参考文献 六.Matlab代码(GUI界面)获取 一.引言 随着通信与信 ...
- huffman python,哈夫曼(Huffman)编码python代码实现
首先看定义 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种.Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率 ...
- labview霍夫曼编码_香农编码与霍夫曼编码
一.香农-范诺编码 香农-范诺(Shannon-Fano)编码的目的是产生具有最小冗余的码词(code word).其基本思想是产生编码长度可变的码词.码词长度可变指的是,被编码的一些消息的符号可以用 ...
- 计算机论文图片大小,对一副大小为256*256的bmp格式256色的灰度图象进行霍夫曼和字典编码压缩处理...
内容简介: 课程设计 对一副大小为256*256的bmp格式256色的灰度图象进行霍夫曼和字典编码压缩处理,共31页,6992字 目录 绪论1 1原理分析2 1.1数字图象2 1.1.1灰度图象2 1 ...
- 熵编码(算术+霍夫曼)编解码基础知识总结
在MPEG的TMC13模型中,对于surface point cloud compression,对block和vertices进行熵编码:对于lidar point cloud compressio ...
- 霍夫曼(Huffman)编码算法详解之C语言版
一.Huffman编码 霍夫曼(Huffman)树是一类带权路径长度最短的二叉树树.Huffman树的一个非常重要的应用就是进行Huffman编码以得到0-1码流进行快速传输. 在电报收发等数据通讯中 ...
- 深入学习二叉树(三) 霍夫曼树
深入学习二叉树(三) 霍夫曼树 1 前言 霍夫曼树是二叉树的一种特殊形式,又称为最优二叉树,其主要作用在于数据压缩和编码长度的优化. 2 重要概念 2.1 路径和路径长度 在一棵树中,从一个结点往下可 ...
- Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树
Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树 文章目录 Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树 0x00 摘要 0x01 背景概念 1.1 词向量 ...
- 构建一个JPEG解码器(3):霍夫曼表
霍夫曼表 简述 重构 即时 霍夫曼算法 JPEG DHT 段 源代码 jpeg.h jpeg.cpp inttypes.h main.cpp Makefile 接下来:读取比特流 简述 在上一部分中, ...
- 二叉树合集(二):霍夫曼树(图文详解)
合集地址 二叉树合集(一):二叉树基础(含四种遍历,图文详解) 二叉树合集(二):霍夫曼树(图文详解) 二叉树合集(三):线索二叉树(图文详解) 二叉树合集(四):对称二叉树(递归和迭代实现) 二叉树 ...
最新文章
- Cocos Creator 音频文件Audio的绑定与使用(TypeScript)
- 测试nginx网站代码_在40行以下代码中使用NGINX进行A / B测试
- java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...
- 产品经理等级的划分,来看看你是几级的PM?
- 基于国密算法SM2SSL证书的https加密,如何实现?
- boost::math::interpolators::cardinal_quadratic_b_spline用法的测试程序
- Mysql Group by 分组取最小的实现方法
- [03] Android系统亮度调节
- struts Caused by: no protocol dtd - Class: java.net.URL
- bambook引起的adb启动异常的问题
- Jquery调用C#后台方法
- Testing a React+Redux web application
- MySQL中json数据操作(转载)
- 计算机系统更新不上怎么办理,电脑系统更新打不开怎么办
- Unity3D学习笔记
- matlab索引超出数组边界且不提示数组边界的一种处理办法
- python自动按键脚本
- vue中自己实现的页面切换标签手动关闭功能
- CSS笔记(菜鸟教程)
- 技术文摘12 yun jia 技术 资料 截图工具 美容
热门文章
- python聊天室设计_基于python的GUI聊天室设计
- 深度Linux收费,Deepin专业版为收费的,而Deepin社区版则是能免费使用的
- Oracle财务管理系统
- AE duik插件运用-人物行走动画
- 一步一步实现iOS微信自动抢红包(非越狱)
- 查普曼-科莫高洛夫方程Chapman–Kolmogorov equation
- 微信公众号推送模板消息(二):Access_token的获取
- java后台设置定时执行任务,Java定时任务调度详解
- 博科光纤交换机配置及管理 B/S篇
- matlab作图有拉盖尔,拉盖尔高斯光束matlab