基于二叉树的改进SPIHT算法(Matlab代码实现)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
简介: 基于二叉树的改进SPIHT算法(Matlab代码实现)

💥1 概述

文献来源:

随着现代社会越来越大量的信息需要存储和传输,通常会对这些信息进行压缩。人们不仅希望压缩算法有较高的压缩比,而且希望算法执行速度快。小波变换具有良好的时频局部表达能力和多分辨率分析特性,并有快速分解重构算法,在图像编码领域得到了广泛的应用。嵌入式零树编码算


法[1](Embedded Zerotree Wavelet, EZW)是一种基于小波变换的图像压缩算法,它通过不同尺度的小波系数在每个比特平面的空间相似性构造零树,从而用一个零树根成功地预测了大量非重要系数,取得了比基于离散余弦变换的 JPEG 更好的 压 缩 效 果 。 多 级 树 集 合 分 裂 (Set Partitioning in Hierarchical Trees, SPIHT)算法[2]对 EZW 算法做了重要改进,其具有更高的压缩效率、更快的执行速度等优点,是目前基于零树结构的压缩算法中的较优的算法[3]。SPECK(Set


Partitioning Embedded block)算法[4]加快了计算速度并进一步利用了子带内相连系数块的关系。


为取得更好的压缩效果,以上文献中几乎所有算法都需要进行无损压缩(熵编码)以便提高算法效率。然而,进行熵编码需要很大的计算量。如果在 SPIHT 算法中使用算术编码,编码时间将会多一倍以上[2]。为在保持 SPIHT 算法速度的同时改进压缩效果,本文提出一种新的基于 SPIHT 和二叉树的快速编码算法。该算法与上述文献不同,虽然文献[9]提出了一种基于提升小波的二叉树图像编码方法,不过此方法中的二叉树是一种和 SPIHT 的方向树类似的跨尺度的零树结构,而本文算法中的二叉树则建立在同一尺度的相邻系数上。


📚2 运行结果

部分代码:

clc;clear;
%-----------   Input   ----------------
global level carow row
imname = 'img_lena.bmp';   
Orig_I=double(imread(imname));
[row, col] = size(Orig_I);
% 最大比特率
rate = 1; 
max_bits = floor(rate * row^2);
% 5个比特率下的编码长度[128:1, 64:1, 32:1, 16:1, 8:1]
brates = floor([0.0625, 0.125, 0.25, 0.5, 1]*row*row);
%-----------   Wavelet Decomposition   ----------------
n = size(Orig_I,1);
n_log = log2(n); 
level = floor(n_log);
% level = 3;
carow = 2^(n_log-level);
I_W = wavecdf97(Orig_I, level);
n_max = floor(log2(abs(max(max(I_W)'))));  % 初始阈值T=2^n_max
% =========================================================================
% Coding
[out_head,out_code,out_type,pixFlag] = func_SPIHT_Enc(I_W, max_bits, level); 
l2 = find(out_code==2);   out_code(l2)=[];
l2 = find(out_type=='O');  out_type(l2)=[];
% =========================================================================
% Decoding
disp(['aa_TSPIHT_' imname ' = [']);
img_dec = func_SPIHT_Dec(out_head,out_code,brates,Orig_I);
disp('];');
img_spiht = wavecdf97(img_dec, -level);
Q = 255;
MSE = sum(sum((img_spiht - Orig_I) .^ 2)) / row / col;
psnr = 10*log10(Q*Q/MSE);
rate = numel(Orig_I)*8/length(out_code);
disp([psnr,rate]);
clc;clear;
%-----------   Input   ----------------
global level carow row
imname = 'img_lena.bmp';   
Orig_I=double(imread(imname));
[row, col] = size(Orig_I);
% 最大比特率
rate = 1; 
max_bits = floor(rate * row^2);
% 5个比特率下的编码长度[128:1, 64:1, 32:1, 16:1, 8:1]
brates = floor([0.0625, 0.125, 0.25, 0.5, 1]*row*row);
%-----------   Wavelet Decomposition   ----------------
n = size(Orig_I,1);
n_log = log2(n); 
level = floor(n_log);
% level = 3;
carow = 2^(n_log-level);
I_W = wavecdf97(Orig_I, level);
n_max = floor(log2(abs(max(max(I_W)'))));  % 初始阈值T=2^n_max
% =========================================================================
% Coding
[out_head,out_code,out_type,pixFlag] = func_SPIHT_Enc(I_W, max_bits, level); 
l2 = find(out_code==2);   out_code(l2)=[];
l2 = find(out_type=='O');  out_type(l2)=[];
% =========================================================================
% Decoding
disp(['aa_TSPIHT_' imname ' = [']);
img_dec = func_SPIHT_Dec(out_head,out_code,brates,Orig_I);
disp('];');
img_spiht = wavecdf97(img_dec, -level);
Q = 255;
MSE = sum(sum((img_spiht - Orig_I) .^ 2)) / row / col;
psnr = 10*log10(Q*Q/MSE);
rate = numel(Orig_I)*8/length(out_code);
disp([psnr,rate]);


🌈3 Matlab代码实现

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]黄可坤.基于二叉树的改进SPIHT算法[J].计算机工程,2012,38(15):218-221.

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
5天前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
5天前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
|
14天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
15天前
|
算法
基于龙格库塔算法的锅炉单相受热管建模与matlab数值仿真
本设计基于龙格库塔算法对锅炉单相受热管进行建模与MATLAB数值仿真,简化为喷水减温器和末级过热器组合,考虑均匀传热及静态烟气处理。使用MATLAB2022A版本运行,展示自编与内置四阶龙格库塔法的精度对比及误差分析。模型涉及热传递和流体动力学原理,适用于优化锅炉效率。
|
13天前
|
移动开发 算法 计算机视觉
基于分块贝叶斯非局部均值优化(OBNLM)的图像去噪算法matlab仿真
本项目基于分块贝叶斯非局部均值优化(OBNLM)算法实现图像去噪,使用MATLAB2022A进行仿真。通过调整块大小和窗口大小等参数,研究其对去噪效果的影响。OBNLM结合了经典NLM算法与贝叶斯统计理论,利用块匹配和概率模型优化相似块的加权融合,提高去噪效率和保真度。实验展示了不同参数设置下的去噪结果,验证了算法的有效性。
|
12天前
|
算法 决策智能
基于SA模拟退火优化算法的TSP问题求解matlab仿真,并对比ACO蚁群优化算法
本项目基于MATLAB2022A,使用模拟退火(SA)和蚁群优化(ACO)算法求解旅行商问题(TSP),对比两者的仿真时间、收敛曲线及最短路径长度。SA源于金属退火过程,允许暂时接受较差解以跳出局部最优;ACO模仿蚂蚁信息素机制,通过正反馈发现最优路径。结果显示SA全局探索能力强,ACO在路径优化类问题中表现优异。
|
12天前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
37 2
|
5月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
258 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
5月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
153 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
5月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
125 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码

热门文章

最新文章