基于SPIHT小波变换的图像压缩解压缩matlab仿真,并输出解压后的图像PSNR值

简介: 基于SPIHT小波变换的图像压缩解压缩matlab仿真,并输出解压后的图像PSNR值

1.算法描述

   图像在经过小波变换和量化后,还未实现真正意义上的数据量的压缩。因此,需要通过 SPHIT 编码算法对小波系数进行编码压缩。对图像的编码方式有很多,这些编码包括:游程编码、huffman编码以及算数编码等等。

    对系数矩阵进行了二维提升小波变换后,小波系数有了空间上的特殊结构,这种特殊的结构称为零树结构。SPIHT 算法编码(set partitioning in hierarchical trees)即多级树集合分裂编码。

   SPIHT 算法的主要思想是利用给定的阈值与小波系数集合中的每个系数进行比较,如果值大于阈值,则输出一个二进制的数字作为该系数重要性的标志;这个二进制的标志位就是对图像系数进行编码后所生成的码流。当把所有的小波变换的系数值遍历完以后将阈值减半,再进行扫描小波系数集合,与更新的阈值对比,然后输出相应的图像压缩码流,直到阈值变为 1。

   该算法基于嵌入式零树小波变换编码思想,以 EZW 算法的零树结构为基础,将某树节点及其所有后继节点规划为同一集合,创建 LSP、LIP 和 LIS 三个表项,并采用适当的集合分割排序策略,通过初始化、排序过程、细化过程和量化步长更新这四个子过程完成嵌入式编码。

  SPIHT 编码是一种渐进的对于不重要的系数集合不断的进行分裂,同时空间方向树也在不断变化的过程,这种过程可以使误差逐渐减小。

1.png
2.png

2.仿真效果预览
matlab2022a仿真结果如下:

3.png
4.png
5.png

3.MATLAB核心程序

clear;
close all;
warning off;
addpath(genpath(pwd));
 
% Matlab implementation of SPIHT (without Arithmatic coding stage)
%
 
 
%-----------   Input   ----------------
Orig_I = func_ReadRaw('lena512.raw', 512*512, 512, 512);
rate = 0.6;
 
%-----------   Pre-processing   ----------------
 
OrigSize = size(Orig_I, 1);
max_bits = floor(rate * OrigSize^2);
 
OutSize = OrigSize;
image_spiht = zeros(size(Orig_I));
% "image " is the input of codec
[nRow, nColumn] = size(Orig_I);
 
 
%-----------   Wavelet Decomposition   ----------------
n = size(Orig_I,1);
n_log = log2(n); 
level = n_log;
% wavelet decomposition level can be defined by users manually.
 
type = 'bior4.4';
[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters(type);
 
[I_W, S] = func_DWT(Orig_I, level, Lo_D, Hi_D);
 
%-----------   Coding   ----------------
img_enc = func_SPIHT_Enc(I_W, 100000, nRow*nColumn, level);   
 
%-----------   Decoding   ----------------
img_dec = func_SPIHT_Dec(img_enc);
 
%-----------   Wavelet Reconstruction   ----------------
img_spiht = func_InvDWT(img_dec, S, Lo_R, Hi_R, level);
 
 
figure;
imshow(Orig_I,[]);
 
figure;
imshow(img_spiht,[]);
% %-----------   PSNR analysis   ----------------
Q = 255;
MSE = sum(sum((img_spiht - Orig_I) .^ 2) / nRow / nColumn);
psnr = 10*log10(Q*Q/MSE)
 A117
相关文章
|
5月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
517 0
|
5月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
497 0
|
5月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
185 0
|
5月前
|
5G
基于IEEE 802.11a标准的物理层MATLAB仿真
基于IEEE 802.11a标准的物理层MATLAB仿真
320 0
|
5月前
|
算法
基于MATLAB/Simulink平台搭建同步电机、异步电机和双馈风机仿真模型
基于MATLAB/Simulink平台搭建同步电机、异步电机和双馈风机仿真模型
|
5月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
304 8
|
5月前
|
编解码 算法 数据可视化
MATLAB 实现同步压缩小波变换
MATLAB 实现同步压缩小波变换
400 3
|
5月前
|
存储 人工智能 移动开发
利用 Hough 变换处理量测得到的含杂波的二维坐标,解决多目标航迹起始问题(Matlab代码实现)
利用 Hough 变换处理量测得到的含杂波的二维坐标,解决多目标航迹起始问题(Matlab代码实现)
137 0
|
5月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
206 0
|
5月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
265 8

热门文章

最新文章