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

本文涉及的产品
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: 基于二叉树的改进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.

相关文章
|
9天前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
|
6天前
|
机器学习/深度学习 人工智能 搜索推荐
从零构建短视频推荐系统:双塔算法架构解析与代码实现
短视频推荐看似“读心”,实则依赖双塔推荐系统:用户塔与物品塔分别将行为与内容编码为向量,通过相似度匹配实现精准推送。本文解析其架构原理、技术实现与工程挑战,揭秘抖音等平台如何用AI抓住你的注意力。
134 6
从零构建短视频推荐系统:双塔算法架构解析与代码实现
|
9天前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
97 14
|
9天前
|
机器学习/深度学习 算法
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)
|
9天前
|
机器学习/深度学习 传感器 算法
【裂纹检测】检测和标记图片中的裂缝(Matlab代码实现)
【裂纹检测】检测和标记图片中的裂缝(Matlab代码实现)
|
12天前
|
传感器 机器学习/深度学习 算法
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
|
11天前
|
传感器 机器学习/深度学习 算法
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
|
13天前
|
传感器 算法 数据挖掘
基于协方差交叉(CI)的多传感器融合算法matlab仿真,对比单传感器和SCC融合
基于协方差交叉(CI)的多传感器融合算法,通过MATLAB仿真对比单传感器、SCC与CI融合在位置/速度估计误差(RMSE)及等概率椭圆上的性能。采用MATLAB2022A实现,结果表明CI融合在未知相关性下仍具鲁棒性,有效降低估计误差。
124 15
|
13天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的XGBoost序列预测算法matlab仿真
基于WOA优化XGBoost的序列预测算法,利用鲸鱼优化算法自动寻优超参数,提升预测精度。结合MATLAB实现,适用于金融、气象等领域,具有较强非线性拟合能力,实验结果表明该方法显著优于传统模型。(238字)
|
9天前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)

热门文章

最新文章