基于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
相关文章
|
18天前
OFDM深入学习及MATLAB仿真(二)
OFDM深入学习及MATLAB仿真
21 1
|
18天前
|
机器学习/深度学习
信道编码译码及MATLAB仿真(三)
信道编码译码及MATLAB仿真
24 3
|
18天前
|
算法
信道编码译码及MATLAB仿真(二)
信道编码译码及MATLAB仿真
24 3
|
3天前
|
文字识别 算法 计算机视觉
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
12 0
|
18天前
雷达模糊函数及MATLAB仿真(三)
雷达模糊函数及MATLAB仿真
15 0
|
18天前
雷达模糊函数及MATLAB仿真(一)
雷达模糊函数及MATLAB仿真
25 0
|
18天前
雷达检测及MATLAB仿真(三)
雷达检测及MATLAB仿真
21 0
|
3月前
|
Perl
【MFAC】基于全格式动态线性化的无模型自适应控制(Matlab代码)
【MFAC】基于全格式动态线性化的无模型自适应控制(Matlab代码)
|
3月前
【数值分析】迭代法求方程的根(附matlab代码)
【数值分析】迭代法求方程的根(附matlab代码)
|
3月前
【数值分析】Jacobi、Seidel和Sor迭代法求解线性方程组(附matlab代码)
【数值分析】Jacobi、Seidel和Sor迭代法求解线性方程组(附matlab代码)

热门文章

最新文章