目录

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

一、引言

随着通信与信息技术的迅速发展、网络技术和多媒体技术的兴起,图像、视频相关的应用越来越广泛。图像和视频具有庞大的数据量,难以存储和传输,因此应对其进行压缩编码。

当今,图像与视频压缩国际标准中主要采用了离散余弦变换(Discrete Cosine Transform,DCT),采用这种变换并不一定是最优的选择,原因之一就是量化表比较复杂,量化需要大量的乘法计算。另外,量化表需要占用一定的存储空间。

霍夫曼编码完全依据字符出现的概率来构造异字头的平均长度最短的码字,有时被称为最佳编码。霍夫曼编码将使用次数较多的代码用长度较短的编码代替,将使用次数较少的代码用较长的编码代替,并且确保编码的唯一可解性。其根本原则是压缩编码的长度(即字符的统计数字x字符的编码长度)最小,也就是权值和最小。本文给出了霍夫曼简表生成原理,霍夫曼编码表和解码表生成流程和霍夫曼编解码的详细方案。

二、霍夫曼Huffman编码

2.1 霍夫曼编码流程

尽管理论上,霍夫曼编码能逼近信源符号的嫡,但实用中很难事先得知各符号发生的概率,因此无法保证霍夫曼码长与实际的符号发生概率相匹配。霍夫曼算法编码流程如下图示。

图1 霍夫曼编码算法框图

2.2 输入数据的编码

对输人数据进行逐系数编码,算法框图如图2所示:

图2 编码流程图

编码分两步进行第一步,将相应的霍夫曼码前缀写人字节;第二步,为了充分利用每一比特,先对数据进行处理再写人相关字节,写人字节的算法实现如下

1) 输人一个数据;

2)查询对应的霍夫曼码(前缀)及其对应长度size;

3)截取对应二进制码的size位

  1. 查询填充的字节地址和位地址;

5)考虑到一般情况下,最大码长应不超过32位,采用无符号整数存储输出,即每32位二进制码填充1字节;

6)对输人数据进行处理;为方便解码 ,所有系数均直接截取所在区间region之对应位数region,因为分区间编码 ,所以该数的绝对值不会超过2region-1,也就是说,不存在溢。出算法采用正数减去所在区间之下限,负数取负构成尾码的算法 ,则正数首位必然为0,负数首位必然为1;查得所在区间的数据长度。

7)重复(3)、(4)、(5)三个步骤;

  1. 继续下一系数的编码,直到全部所有数据编码结束

三、霍夫曼解码

解码是编码的逆过程。由于量化误差,原始数据并不能完全恢复。先从压缩文件中读出最大值max、归一化参数(量化步长)len,构建霍夫曼树的各区间统计频度,再从压缩文件中读出数据的压缩码流,逐系数进行解码。其具体算法如下:

图3 霍夫曼解码流程图

四、实验结果

关联到菜单“霍夫曼压缩”,执行图片的压缩及解压缩操作,读取图片并将之显示到窗体。压缩结果表明,霍夫曼图像压缩可以在无损的前提下有效地进行图像的编解码,具有良好的压缩比,解压缩后的图像与原始图像相比也有较高的PSNR值,可以有效地节省图像在传输、存储等过程中所需要的资源消耗,提高了图像处理的效率。

图4 基于霍夫曼压缩与重建结果

五、参考文献

[1] 杨迎新,张乐平. 基于整数压缩比的SAR图像浮点数据压缩研究[J]. 江西理工大学学报,2006,(4):34-37
[2] 张乐平,吴乐南. 基于非线性预处理的SAR图像浮点数据压缩[J]. 南昌大学学报(理科版),2005,(6):616-618
[3] 张乐平. SAR图像浮点数据压缩研究[D].南京:东南大学, 2006.
[4] 张乐平. 基于自适应编码的SAR浮点模图像数据压缩[J].计算机与现代化,2005,(11):8-2.

六、Matlab代码(GUI界面)获取

上述Matlab(GUI界面)代码如下:

https://download.csdn.net/download/m0_70745318/87765234


博主简介:研究方向涉及智能图像处理、深度学习等领域,先后发表过多篇SCI论文,在科研方面经验丰富。任何与算法程序科研方面的问题,均可私信交流讨论


基于霍夫曼(Huffman)图像编码的图像压缩和重建-含Matlab代码相关推荐

  1. 【第 13 章 基于霍夫曼图像压缩重建--Matlab深度学习实战图像处理应用】

    基于霍夫曼图像压缩重建 部分参考来源: https://blog.csdn.net/qq_59747472/article/details/121890265 为了节省空间,在对数据进行编码时,可以对 ...

  2. 【图像压缩重建】基于霍夫曼算法实现图像压缩重建matlab代码

    1 简介 哈夫曼编码是一种数据编码方式,以哈夫曼树--即最优二叉树.用带杈路径长度最小的二叉树,对数据进行重编码,经常应用于数据压缩.在计算机信息处理中,"哈夫曼编码"是一种一致性 ...

  3. 哈夫曼树编码的实现+图解(含全部代码)

    目录 哈夫曼树的基本概念 ------------哈夫曼树的构造方法 ------------------------哈夫曼编码 ----------------------------------- ...

  4. 基于主要成分分析的人脸二维码识别系统-含Matlab代码

    目录 一.引言 二.人脸图像信息处理 2.1 主成分分析PCA 2.2 PCA人脸压缩与重构算法分析 三.二维码转换以及识别 3.1 QR码 3.2 将人脸图像生成二维码 3.3 二维码的识别与图像还 ...

  5. 基于动态时间规整算法(DTW)的语音识别技术研究-含Matlab代码

    ⭕⭕ 目 录 ⭕⭕ ⏩ 一.引言 ⏩ 二.动态时间规整算法基本原理 ⏩ 三.语音识别实例分析 ⏩ 四.参考文献 ⏩ 五.Matlab代码获取 ⏩ 一.引言 在语音识别技术的发展过程中,动态时间规整算法 ...

  6. 一种基于深度学习(卷积神经网络CNN)的人脸识别算法-含Matlab代码

    目录 一.引言 二.算法的基本思想 三.算法数学原理 3.1 权值共享 3.2 CNN结构 四.基于卷积神经网络的人脸识别算法-Matlab代码 五.Matlab源代码获取 一.引言 在工程应用中经常 ...

  7. 【图像融合】基于随机游走算法实现多焦点图像融合含Matlab代码

    1 内容介绍 近几年来,随机游走模型(random walk)与引导滤波器(guided filter)在图像处理领域受到了研究者们的广泛关注.前者已经被应用于图像处理的多种领域--图像融合.图像平滑 ...

  8. 基于径向基函数RBF神经网络的非线性函数拟合研究-含Matlab代码

    目录 一.RBF神经网络基本原理 二.模型建立 三.RBF网络拟合结果分析 四.注意事项 五.参考文献 六.Matlab代码获取 一.RBF神经网络基本原理 1988年Broomhead和Lowe将径 ...

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

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

最新文章

  1. Linux下设置mysql和tomcat开机启动
  2. xshell如何登陆堡垒机_Xshell连接有跳板机(堡垒机)的服务器
  3. X window的思想和终端的重大意义
  4. flowable更换数据源与连接池
  5. Arcgis for JS扩展GraphicLayer实现区域对象的聚类统计与展示
  6. Git pull 错误:fatal: refusing to merge unrelated histories解决办法
  7. linux用date指令,Linux中date指令的使用
  8. 如何高效管理我的时间?——时间会给你最好的答案
  9. Python 全国考级二级
  10. [uva] 146 - ID Codes
  11. Linux设备驱动:DMA 接口API
  12. 大数据量下高并发同步的讲解(不看,保证你后悔!)
  13. SAP HANA XS 专栏
  14. 大道至简:企业需要的中台是什么?答案是:指挥官体系
  15. python 基于onvif协议 修改摄像头分辨率亮度等操作(window版本
  16. macOS Monterey 12.1 (21C52) 虚拟机 IOS 镜像
  17. python调用不起来chrome_python调用selenium打开chrome浏览器失败
  18. ker矩阵是什么意思_“拨开迷雾”,如何判定矩阵相似?
  19. 实验1 小信号调谐放大器
  20. 使用CAS部署SSO服务的简单实现

热门文章

  1. 单例模式多线程环境实现之几句呢喃
  2. python实现DSA签名数字证书
  3. Java中utf-8占几个字节
  4. 一切都是为最好的准备------致所有正在找工作迷茫的你---------打不到的铜豌豆
  5. 阿里云盘上线了,使用中,1T空间,不限速(似乎)!
  6. sed 在行首或者行尾添加文本
  7. java版真女神转生系列_《真女神转生》适合新手融合的仲魔表
  8. 高效提取分离细菌内膜和外膜蛋白
  9. (转)PhysX第一课:下载、安装、配置开发环境
  10. 使用spark来处理CSV文件数据