图像压缩编码——香农-凡诺编码与霍夫曼编码

  • 一、关于信息熵
  • 二、关于香农-范诺编码
    • 2.1 对香农-范诺编码的简单描述
    • 2.2 特例详解
  • 三、关于霍夫曼编码
    • 3.1 对霍夫曼编码的简单描述
    • 3.2 特例详解
  • 四、RGB图像压缩
  • 参考

一、关于信息熵

基本内容:
通常,一个信源发送出什么符号是不确定的,衡量它可以根据其出现的概率来度量。概率大,出现机会多,不确定性小;反之不确定性就大。
不确定性函数f是概率P的减函数;两个独立符号所产生的不确定性应等于各自不确定性之和,即f(P1,P2)=f(P1)+f(P2),这称为可加性。同时满足这两个条件的函数f是对数函数,即。
在信源中,考虑的不是某一单个符号发生的不确定性,而是要考虑这个信源所有可能发生情况的平均不确定性。若信源符号有n种取值:U1…Ui…Un,对应概率为:P1…Pi…Pn,且各种符号的出现彼此独立。这时,信源的平均不确定性应当为单个符号不确定性-logPi的统计平均值(E),可称为信息熵,即,式中对数一般取2为底,单位为比特。但是,也可以取其它对数底,采用其它相应的单位,它们间可用换底公式换算。
最简单的单符号信源仅取0和1两个元素,即二元信源,其概率为P和Q=1-P,该信源的熵即为如图1所示。 由图可见,离散信源的信息熵具有:
①非负性:即收到一个信源符号所获得的信息量应为正值,H(U)≥0 ②对称性:即对称于P=0.5
③确定性:H(1,0)=0,即P=0或P=1已是确定状态,所得信息量为零
④极值性:因H(U)是P的上凸函数,且一阶导数在P=0.5时等于0,所以当P=0.5时,H(U)最大。
对连续信源,香农给出了形式上类似于离散信源的连续熵,虽然连续熵仍具有可加性,但不具有信息的非负性,已不同于离散信源。不代表连续信源的信息量。连续信源取值无限,信息量是无限大,而是一个有限的相对值,又称相对熵。但是,在取两熵的差值为互信息时,它仍具有非负性。这与力学中势能的定义相仿。

二、关于香农-范诺编码

一串消息包含A,B,C,D,E共5类符号,其内容是AABBBBAAAACCCCCCCCCEEEEEEDDDDEEEEEEEEEEEEE,
请问其信息熵是多少?

由上式可得:H(x)=2.043sh
分析:A6;B5;C9;D4;E19;共43个,其信息熵由公式可求得2.069

2.1 对香农-范诺编码的简单描述

在数据压缩的领域里,香农-范诺编码(Shannon–Fano coding)是一种基于一组符号集及其出现的或然率(估量或测量所得),从而构建前缀码的技术。
香农-范诺编码其名称来自于以克劳德·香农和罗伯特·法诺。在理想意义上,它与哈夫曼编码一样,并未实现码词(code word)长度的最低预期;然而,与哈夫曼编码不同的是,它确保了所有的码词长度在一个理想的理论范围 之内。这项技术是香农于1948年,在他介绍信息理论的文章“通信数学理论”中被提出的。这个方法归功于范诺,他在不久以后以技术报告发布了它。香农-范诺编码不应该与香农编码混淆,后者的编码方法用于证明Shannon’s noiseless coding theorem,或与Shannon–Fano–Elias coding(又被称作Elias coding)一起,被看做算术编码的先驱。
Shannon-Fano的树是根据旨在定义一个有效的代码表的规范而建立的。实际的算法很简单:

  1. 对于一个给定的符号列表,制定了概率相应的列表或频率计数,使每个符号的相对发生频率是已知。
  2. 排序根据频率的符号列表,最常出现的符号在左边,最少出现的符号在右边。
  3. 清单分为两部分,使左边部分的总频率和尽可能接近右边部分的总频率和。
  4. 该列表的左半边分配二进制数字0,右半边是分配的数字1。这意味着,在第一半符号代都是将所有从0开始,第二半的代码都从1开始。
  5. 对左、右半部分递归应用步骤3和4,细分群体,并添加位的代码,直到每个符号已成为一个相应的代码树的叶。

2.2 特例详解

消息通讯字符集为S{A,B,C,D,E}
它们出现的概率为P{0.14,0.12,0.21,0.09,0.44}
累加概率为PA{0,0.14,0.26,0.47,0.56}
计算对应概率的码长为N=ceil(-log2P){2,3,3,4,4}
将累加概率转换为二进制后的码字{00,001,010,0111,1000}
香农-范诺编码的平均码长为∑N*P=3.39;四位二进制数等长编码平均长度为4
可以得出平均码长是等长码的3.39/4=85%,压缩率即为15%

三、关于霍夫曼编码

3.1 对霍夫曼编码的简单描述

霍夫曼编码,是一种可以根据字符出现频率给其赋予编码定义的编码方式。也因其编码方式的奇特,故此拥有了最佳编码的称号。
霍夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为WPL=(W1L1+W2L2+W3L3+…+WnLn),N个权值Wi(i=1,2,…n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,…n)。可以证明霍夫曼树的WPL是最小的。

3.2 特例详解

消息通讯字符集为{A,B,C,D,E}
它们出现的概率为{0.14,0.12,0.21,0.09,0.44}
根据以上信息可得编码表A:110;B:1111;C:10;D:1110;E:0
哈夫曼编码平均长度为2.069;三位二进制数等长编码平均长度为3
可以得出平均码长是等长码的2.069/3=69%,压缩率即为31%

四、RGB图像压缩


一幅1024*768的24位RGB彩色图像一共在内存中占有多少字节? 如果将其保存为非压缩格式的BMP文件,文件有多少字节?请用实例验证。

首先:

8 bit(位)=1 Byte(字节)
1024 Byte(字节)=1 KB
1024 KB=1 MB
由题

1024 * 768 * 24
=18874368(bit)
=2359296(byte)
=2304(KB)
=2.25(MB)

参考

图像压缩与编码基本概念
图像压缩编码——香农/哈夫曼编码
信息熵与压缩编码基础

图像压缩编码——香农-凡诺编码与霍夫曼编码相关推荐

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

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

  2. 霍夫曼树和霍夫曼编码以及霍夫曼编码的应用

    文章目录 霍夫曼树介绍 1.1霍夫曼树的定义 1.2霍夫曼树的几个概念 1.3构建霍夫曼树的过程 1.4代码实现霍夫曼树 霍夫曼编码介绍 什么是霍夫曼编码 通信领域的应用 字符串压缩 1.构造霍夫曼树 ...

  3. 算法导论——贪心算法:哈夫曼编码(霍夫曼编码)

    2019独角兽企业重金招聘Python工程师标准>>> package org.loda.greedy;import org.junit.Test; import org.loda. ...

  4. 图像处理—霍夫曼编码

    图像压缩编码是专门研究图像数据压缩的技术,就是尽量减少表示数据图像所需要的数据量. 本章主要介绍图像压缩编码的基础知识,重点讲解常用的图像压缩编码方法,如霍夫曼编码.香农编码.算术编码.行程编码和预测 ...

  5. 灵光一现的创造——霍夫曼编码

    点击上方"LiveVideoStack"关注我们 作者 | Alex 技术审校 | 赵军 霍夫曼 声影传奇 #004# 作为一名科学家和老师,我真的非常执着.如果我觉得自己还没有找 ...

  6. 数据结构与算法 / 霍夫曼树、霍夫曼编码和解码

    一. 诞生原因 找出存放一串字符所需的最少的二进制编码. 二. 构造方法 首先统计出每种字符出现的频率,即:概率.权值. 例如:频率表 A:60,    B:45,   C:13   D:69   E ...

  7. 算法科普:有趣的霍夫曼编码

    前言 霍夫曼编码 ( Huffman coding ) 是一种可变长的前缀码.霍夫曼编码使用的算法是 David A. Huffman 还是在MIT 的学生时提出的,并且在 1952 年发表了名为&l ...

  8. 信息论霍夫曼编码c语言,Huffman 信息论与编码 - 下载 - 搜珍网

    霍夫曼编码/Shiyan4/Shiyan.sln 霍夫曼编码/Shiyan4/Shiyan.suo 霍夫曼编码/Shiyan4/Shiyan.v11.suo 霍夫曼编码/Shiyan4/Shiyan4 ...

  9. Python实现英文文本的霍夫曼编码压缩

    霍夫曼编码作为变长码,在已知字符出现的频率的前提下,将频率高的字符用短码表示,频率低的字符用长码表示,实现用最短的码符号完整的表示出一段文本的信息. 例如 对于 这样一文本,进行字符频率统计,部分结果 ...

  10. JPEG 编解码器 霍夫曼编码

    arm11中的JPEG 编解码器 霍夫曼编码是一种被广泛应用而且非常有效的数据压缩技术,根据待压缩数据的特征,一个可压缩掉20%~90%.这里考虑的数据指的是字符串序列.要理解霍夫曼编码,先要理解霍夫 ...

最新文章

  1. 精美的电路图都是怎么画出来的?
  2. SpringBoot Actuator监控【转】
  3. 如何打开python的交互窗口-使用Python显示图形交互窗口
  4. Android-----application的学习
  5. sap 采购订单中收货容差的取值顺序
  6. go uintptr unsafe Pointer offset() 的使用
  7. c语言顺序查找算法,c语言实现排序和查找所有算法
  8. c检程序的公共语言运行时简称为,公共语言运行时检测到无效的程序
  9. 数据库系统概论-第一章绪论
  10. javascript-文档结构遍历
  11. SQL Sever 2008 R2安装步骤
  12. 高盛VR/AR报告完整解读版
  13. 《百度输入法》导致EXCEL 无法使用快捷键Ctrl+;插入日期
  14. 8 种方案机智应对后端一次性返回 10万 条数据
  15. C++位运算:与,或,非( , | , !)
  16. js时间戳转时间年月日时分秒
  17. java, c 亦或用法
  18. 医院医生护士都不愿说的医学小常识,我终于查齐了。留着以后自己学习。什么都有...
  19. CF756div3 vp
  20. Flink1.13学习_第 1 章 初识 Flink

热门文章

  1. qq影音4.0 android,QQ影音4.0官方最新正式版
  2. 个人网站有赞云支付接口申请方法
  3. 酷狗、QQ音乐歌词转换工具
  4. linux 软件放什么目录,Linux 下的各种目录
  5. 百度云sugar上怎么可视化展示数据?
  6. Maix Bit(K210) 裸机开发教程(六)摄像头使用
  7. 客户关系管理之会员管理
  8. java获取ip地址 方法_java获取IP地址的方法
  9. arduino等开源平台
  10. Spring Boot系列 —(一)手把手搭建 SpringBoot 项目