当前位置: 首页 > news >正文

基于huffman编解码的图像压缩算法matlab仿真

目录

1.算法运行效果图预览

2.算法运行软件版本

3.部分核心程序

4.算法理论概述

4.1 Huffman编码算法步骤

4.2 Huffman编码的数学原理

4.3 基于Huffman编解码的图像压缩

5.算法完整程序工程


1.算法运行效果图预览

2.算法运行软件版本

matlab2022a

3.部分核心程序

.........................................................................
for ij = 1:size(I0,3) I     = I0(:,:,ij);[m,n] = size(I); % 将当前通道的图像展平为一维向量  Ivect = I(:);% 获取当前通道的唯一像素值和它们的频率  symb  = single(unique(Ivect)); cnts  = hist(Ivect, symb); Probs = double(cnts) ./ sum(cnts); % 计算Huffman编码字典和平均长度  [dictionary,Lens(ij)] = func_huffdict(symb,Probs); % 对当前通道的图像进行Huffman编码  Ienc                  = func_huffencode(symb,dictionary,Ivect); % 对Huffman编码进行解码,得到无损压缩后的像素值  Idec                  = func_huffdecode(symb,dictionary,Ienc);% 将解码后的一维向量重塑为二维图像  Iout(:,:,ij)          = reshape(Idec,m,[]);
end% 将无损压缩后的图像保存为JPEG格式  
imwrite(Iout,'cmps.jpeg'); 
% 显示图像及其相关信息 
figure; 
Isize1      = imfinfo(Names).FileSize;
Isize2      = (Isize1*(sum(Lens(:))/3))/8; 
CmpRates    = 100*((Isize1 - Isize2)/Isize1); subplot(1,2,1);
imshow(I0); 
title(sprintf("原图 \n 容量: "+ Isize1/(1024*1024) + " MB"));subplot(1,2,2);
imshow(Iout); 
title(sprintf("压缩图 \n 容量: "+ Isize2/(1024*1024) + " MB \n 压缩率: "+CmpRates+"%%]"));
96

4.算法理论概述

        Huffman编码是一种用于无损数据压缩的熵编码算法。由David A. Huffman在1952年提出。该算法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码。

4.1 Huffman编码算法步骤

初始化:根据符号概率的大小顺序对符号进行排序,即按概率大小排序,得到符号序列。
创建节点:将概率最小的两个节点相加,并作为一个新节点,新节点的概率为这两个节点概率之和。然后,将这两个节点从概率队列中删除,将新节点插入队列中。
更新队列:重复上一步骤,直到队列中只剩下一个节点为止。此时,这个节点就是Huffman树的根节点。
生成编码:从根节点开始,向左的边标记为0,向右的边标记为1。然后,从根节点到每个叶节点的路径就构成了该叶节点对应符号的Huffman编码。


4.2 Huffman编码的数学原理

       Huffman编码的数学原理主要基于信息论中的熵的概念。熵是一个用于度量随机变量不确定性的量。对于一个离散随机变量X,其熵H(X)定义为:

        Huffman编码的主要思想是,对于出现概率高的符号,赋予较短的编码;对于出现概率低的符号,赋予较长的编码。这样,平均码长就会接近熵的下界,从而实现高效的无损压缩。

4.3 基于Huffman编解码的图像压缩

       在图像压缩中,首先需要将图像数据转换为一系列符号。这可以通过多种方式实现,例如可以将像素值作为符号,或者将像素值的差值作为符号。然后,统计这些符号的出现概率,并使用Huffman编码算法生成对应的Huffman编码。最后,将编码后的数据以及Huffman树的结构信息一起存储或传输。

       解码时,首先读取Huffman树的结构信息,重建Huffman树。然后,根据Huffman树对编码后的数据进行解码,得到原始的符号序列。最后,将符号序列转换回图像数据。

       Huffman编码是一种非常有效的无损数据压缩算法,特别适用于处理具有不同出现概率的符号序列。在图像压缩中,通过将图像数据转换为符号序列,并使用Huffman编码对符号进行压缩,可以实现较高的压缩比和较好的图像质量。同时,由于Huffman编码是无损的,因此解压后的图像与原始图像完全一致,不会引入任何失真。

5.算法完整程序工程

OOOOO

OOO

O

http://www.lryc.cn/news/269775.html

相关文章:

  • python+django网上购物商城系统o9m4k
  • 面试题-性能优化
  • 自身文档管理规范
  • php学习05-常量
  • MFC:如何将JPEG等图片显示到对话框客户区
  • MIUI解BL锁+刷系统教程
  • 数据结构和算法笔记3:双指针法(快慢指针)
  • 股票价格预测 | Python实现Autoformer, FEDformer和PatchTST等模型用于股价预测
  • Git基础学习_p1
  • 4.Redis事务
  • golang 图片加水印
  • sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set问题解决方案
  • 提升效率:使用注解实现精简而高效的Spring开发
  • 全面好用的setting.xml配置
  • 八股文打卡day14——计算机网络(14)
  • NCNN环境部署及yolov5pt转ncnn模型转换推理
  • selenium模块有哪些用途?
  • 精品Nodejs实现的校园疫情防控管理系统的设计与实现健康打卡
  • 爬虫工作量由小到大的思维转变---<第三十五章 Scrapy 的scrapyd+Gerapy 部署爬虫项目>
  • python测试工具: 实现数据源自动核对
  • 要学习openfoam,c++需要掌握到什么程度?
  • web一些实验代码——Servlet请求与响应
  • GPT系列概述
  • 基于遗传算法的集装箱吊装优化,基于遗传算法的集装箱装卸优化
  • postgreSQL单机部署
  • 思维逻辑题3
  • 强大的音乐乐谱控件库
  • 数据库——简单查询复杂查询
  • java虚拟机内存管理
  • Hive实战:词频统计