首页 > 编程语言 >基于huffman编解码的图像压缩算法matlab仿真

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

时间:2024-02-20 18:44:22浏览次数:37  
标签:编解码 概率 编码 压缩算法 符号 matlab 图像 Huffman 节点

1.算法运行效果图预览

 

2.算法运行软件版本

matlab2022a

 

3.算法理论概述

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

 

3.1 Huffman编码算法步骤

初始化:根据符号概率的大小顺序对符号进行排序,即按概率大小排序,得到符号序列。

创建节点:将概率最小的两个节点相加,并作为一个新节点,新节点的概率为这两个节点概率之和。然后,将这两个节点从概率队列中删除,将新节点插入队列中。

更新队列:重复上一步骤,直到队列中只剩下一个节点为止。此时,这个节点就是Huffman树的根节点。

生成编码:从根节点开始,向左的边标记为0,向右的边标记为1。然后,从根节点到每个叶节点的路径就构成了该叶节点对应符号的Huffman编码。

 

 

3.2 Huffman编码的数学原理

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

 

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

 

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

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

 

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

 

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

 

 

 

 

4.部分核心程序

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+"%%]"));

  

标签:编解码,概率,编码,压缩算法,符号,matlab,图像,Huffman,节点
From: https://www.cnblogs.com/matlabworld/p/18023812

相关文章

  • 基于EMD的滚动轴承故障诊断算法matlab仿真
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a  3.算法理论概述       基于经验模态分解(EmpiricalModeDecomposition,EMD)的滚动轴承故障诊断算法是一种有效的非平稳信号处理方法,特别适用于处理非线性、非平稳的振动信号。该方法通过自适应地将复杂信......
  • 基于FPGA的图像Robert变换实现,包括tb测试文件和MATLAB辅助验证
    1.算法运行效果图预览 fpga的结果导入到matlab显示: 2.算法运行软件版本vivado2019.2 matlab2022a 3.算法理论概述       随着数字图像处理技术的不断发展,边缘检测作为图像处理的基本操作,其在机器视觉、自动驾驶、医学影像分析等领域的应用日益广泛。Rober......
  • m基于码率兼容打孔LDPC码oms最小和译码算法的LDPC编译码matlab误码率仿真
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要       码率兼容打孔LDPC码BP译码算法是一种改进的LDPC译码算法,能够在不同码率下实现更好的译码性能。该算法通过在LDPC码中引入打孔操作,使得码率可以灵活地调整,同时利用BP(BeliefPropagation)译码算法......
  • 基于稀疏表示的小波变换多光谱图像融合算法matlab仿真
    1.算法运行效果图预览小波变换融合   PCA融合   基于稀疏表示的小波变换多光谱图像融合算法   性能指标对比   2.算法运行软件版本matlab2022a 3.算法理论概述       随着遥感技术的飞速发展,多光谱图像融合在地球观测、环境监测、......
  • 基于深度学习的性别识别算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本matlab2022a  3.算法理论概述        随着深度学习的飞速发展,其在计算机视觉领域的应用越来越广泛。性别识别作为计算机视觉的一个重要分支,对于人脸分析、社交网络和机器人交互等领域有着重要意义。性别识别是......
  • matlab练习程序(Schur补)
    Schur补是一种矩阵分解方法,通过将一个大的矩阵分解为几个较小的矩阵来简化计算,通常能够提高矩阵求逆的速度。对于形如下面的矩阵:可以把矩阵划分为左上、右上、左下、右下四个分块矩阵。得到矩阵:根据A和D的奇异性,可以分两种情况。如果A可逆,则有:如果D可逆,则有:公式两边同......
  • 基于双树复小波变换和稀疏表示的多光谱和彩色图像融合算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022a 3.算法理论概述     基于双树复小波变换(Dual-TreeComplexWaveletTransform,DT-CWT)和稀疏表示的多光谱和彩色图像融合算法是一种先进的图像融合技术,旨在将多光谱图像(MultispectralImages,MSI)和彩......
  • 基于FPGA的图像RGB转CIE-Lab实现,包含testbench和MATLAB辅助验证程序
    1.算法运行效果图预览 将FPGA的结果导入到matlab,并和matlab的仿真结果进行对比:   2.算法运行软件版本vivado2019.2 matlab2022a 3.算法理论概述     RGB和CIE-Lab是两种常用的颜色空间,它们在不同的应用领域中各有优势。RGB颜色空间主要用于显示设备,而C......
  • 基于chaos混沌的彩色图像加解密系统matlab仿真
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述      基于混沌(Chaos)的彩色图像加解密系统是一种新型的图像加密技术,它利用了混沌理论的特性来提供高度安全的图像加密。下面将详细介绍这种系统的原理、数学公式和实现过程。 3.1混沌理论......
  • 基于yolov2深度学习网络的人员跌倒检测识别matlab仿真
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述      跌倒是一种常见的健康风险,特别是在老年人和患有某些疾病的人群中。及时检测跌倒并采取相应措施对于降低伤害风险至关重要。近年来,深度学习在图像处理和计算机视觉领域取得了显著进展......