`
womendu
  • 浏览: 1513635 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

多级树集合分裂(SPIHT)算法的过程详解与Matlab实现(8)实例演示

阅读更多

现在我们分别用一幅16*16的Lena局部图像和一幅64*64的Girl局部图像来查看SPIHT算法的编码过程和解码效果。


1、编码过程演示
这里我们使用的源图像是一幅16*16的Lena眼睛局部图像,其源图像和3级小波分解如下图所示:

图1
3级分解的小波系数矩阵为:



利用SPIHT编码算法对图像进行3级编码和3级解码后,输出如下结果:

N = 7 % 初始阈值指数
T = 128 % 初始阈值

ini_LSP = [] % 初始重要系数列表

ini_LIP = % 初始不重要系数列表
1 1
1 2
2 1
2 2
1 3
1 4
2 3
2 4
3 1
3 2
4 1
4 2
3 3
3 4
4 3
4 4

ini_LIS = % 初始不重要子集列表
1 3
1 4
2 3
2 4
3 1
3 2
4 1
4 2
3 3
3 4
4 3
4 4

ini_LisFlag = DDDDDDDDDDDD %初始不重要子集列表中各表项的类型

codeLevel = 1 % 第一级编码
Threshold = 128 % 第一级编码的阈值
SnL = % 第一级编码输出的排序扫描位流和精细扫描位流
0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7
RnL =
7

codeLevel = 2 % 第二级编码
Threshold = 64 % 第二级编码的阈值
SnL = % 第二级编码输出的排序扫描位流和精细扫描位流
0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7
RnL =
7 0 7

codeLevel = 3 % 第三级编码
Threshold = 32 % 第三级编码的阈值
SnL = % 第三级编码输出的排序扫描位流和精细扫描位流
0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0 0 0 0 7
RnL =
7 0 7 0 0 1 7


RecImMat = % 3级解码后重构的小波系数矩阵





可以看到,3级解码后重构的小波系数矩阵大部分区域都是未被扫描赋值的随机数,所以要进行更高级的编码和解码,才能获得高质量的重构图像。
对源图像再进行7级编码和7级解码,我们看一下图像重构效果如何:

RecImMat = % 7级解码后重构的小波系数矩阵




可见,7级解码后系数矩阵大部分元素都被扫描赋值了,只剩下一个2*2的区域低于解码阈值而未被扫描,但由于初始的重构矩阵是一个元素最大值小于最高级解码阈值的二分之一的随机矩阵,这就保证了重构图像尽可能平滑地恢复,而不会出现区域色块。

2、运行时间
下面,我们通过一幅64*64的Girl图像来看看程序的运行时间和重构效果。
图像分解级数:3
SPIHT编码级数:7
SPIHT解码级数:7

(1)主程序代码如下:

function RecIm=spiht(Im,imDim,codeDim,decodeDim)

global rMat cMat
strtime=cputime;
[rMat,cMat]=size(Im);
% ----- Image Wavedec ----- %
DecIm=mywavedec2(Im,imDim);

% ----- SPIHT Coding ----- %
[T,SnList,RnList,ini_LSP,ini_LIP,ini_LIS,ini_LisFlag]=spihtcoding(DecIm,imDim,codeDim);

% ----- SPIHT Decoding ----- %
DecodeMat=spihtdecoding(T,SnList,RnList,ini_LSP,ini_LIP,ini_LIS,ini_LisFlag,decodeDim);
% ----- Waverec -----%
m=2^imDim;
DecImLL=DecIm(1:rMat/m,1:cMat/m)
DecodeLL=DecodeMat(1:rMat/m,1:cMat/m)
% 显示小波分解系数矩阵和重构系数矩阵在LL_N分解级的数据,比较重构效果
RecIm=mywaverec2(DecodeMat,imDim,decodeDim);
Runtime=cputime-strtime

(2)小波分解系数矩阵和重构系数矩阵的LL_N分解级的数据,比较重构效果



DecImLL =
67.0625 106.3750 117.5625 130.3125 110.0000 75.6875 82.6875 65.6250
61.5000 50.7500 61.9375 127.0000 104.6875 67.8125 43.2500 36.8750
69.3750 117.4375 121.5625 146.7500 123.0625 123.4375 90.9375 92.1250
76.9375 153.5000 151.0625 143.3750 111.2500 150.3125 143.3750 124.8125
69.8750 135.8750 117.9375 106.4375 85.8750 133.1250 138.6875 116.5625
54.2500 94.8750 99.2500 117.9375 118.1250 104.3125 102.0625 88.2500
56.2500 75.5625 126.6875 129.4375 119.9375 89.8750 112.0625 83.2500
74.5000 45.7500 101.3125 133.0000 124.8125 116.1875 105.0000 77.0000

DecodeLL =
67 107 117 131 111 75 83 65
61 51 61 127 105 67 43 37
69 117 121 147 123 123 91 93
77 153 151 143 111 151 143 125
69 135 117 107 85 133 139 117
55 95 99 117 119 105 103 89
57 75 127 129 119 89 113 83
75 45 101 133 125 117 105 77

(3)运行时间
Runtime = 8.0625




最后,我们再看看对普通的256*256图像,程序运行效果如何。同样是3级小波分解、7级编码、7级解码。

Runtime = 484.8125



分享到:
评论

相关推荐

    【老生谈算法】多级树集合分裂(SPIHT)算法的过程详解与Matlab实现.docx

    ### SPIHT算法详解及其Matlab实现 #### 一、SPIHT算法概述 ##### 1.1 SPIHT算法与EZW算法的区别 SPIHT (Set Partitioning in Hierarchical Trees) 算法是一种高效的图像编码技术,它基于多级树集合分裂的思想。与...

    基于自适应编码次序的多级树集合分裂算法matlab代码

    为了在图像轮廓处获得更好的压缩效采,在多级树集合分裂( SPIHT)算法的基础上提出了一种优先编码周围邻域中重要系数较多的系数与集合的小波图像压缩算法。在编码之前对系数或集合按照周围重要系数的个数进行排序,...

    在matlab中实现了对SPIHT算法的编写_实现了对SPIHT算法的编写_在matlab中_

    在MATLAB中实现SPIHT算法,需要编写小波变换、系数排序、树结构构建、筛选和熵编码等模块。代码通常包括预处理、小波分解、显著性检测、编码和后处理等步骤。通过对MATLAB代码的理解和调试,可以更好地掌握SPIHT...

    spiht算法的MATLAB源代码

    SPIHT(Set Partitioning In Hierarchical Trees,分层树集划分)算法是一种高效、无损的图像压缩技术,尤其在医疗成像、遥感和高质量图像存储等领域有广泛应用。MATLAB作为一款强大的数学计算和仿真软件,是实现...

    SPIHT.rar_MATLAB SPIHT_MATLAB spiht算法_SPIHT-matlab_matlab SPIHT

    SPIHT(Set Partitioning in Hierarchical Trees,分层树中的集合划分)是一种高效的图像压缩算法,主要用于无损或近无损的数据压缩。该算法由Sheikholeslam、Fattal和Rabbani在1996年提出,是基于小波变换的熵编码...

    spiht算法的matlab实现

    通过以上介绍,我们可以看到SPIHT算法的MATLAB实现涉及到小波变换、树结构编码和解码等多个方面,是一套完整的图像压缩解决方案。对于希望深入了解和应用SPIHT算法的人来说,这个MATLAB实现提供了宝贵的参考。

    matlab开发-SPIHT算法图像压缩

    SPIHT(Set Partitioning In Hierarchical Trees,分层树集划分)算法是一种基于小波变换的无损图像压缩方法,由Mallat和Zhang在1993年提出。在MATLAB环境中开发SPIHT算法,可以充分利用其强大的数学计算能力和图形...

    SPIHT算法源代码 MATLAB

    对于想要学习和使用SPIHT算法的MATLAB用户,可以从提供的"SPIHT"压缩包文件中找到源代码,通过阅读和运行代码,深入理解算法的实现过程,进而应用于自己的项目中。同时,为了优化性能和适应不同需求,可能需要对源...

    SPIHT_Matlab_Demo.rar_DEMO_SPIHT_SPIHT图像_SPIHT算法_spiht matlab

    在MATLAB中实现SPIHT算法,需要编写小波变换和逆变换的代码,以及实现显著性检测、树结构构建和编码解码的逻辑。`SPIHT_Matlab_Demo`可能包含用于演示SPIHT算法的MATLAB脚本和函数,用户可以通过运行这个示例程序来...

    SPIHT压缩算法Matlab实现源代码

    在这个项目中,MATLAB被用来实现SPIHT压缩算法的编码和解码过程。源代码包括以下几个关键函数: 1. `func_SPIHT_Demo_Main.m`:这是主程序,调用其他函数进行SPIHT压缩和解压的演示。用户可以通过运行这个脚本来...

    SPIHT算法的软件实现

    SPIHT(Set Partitioning in Hierarchical Trees,分层树集划分)算法是一种高效的图像压缩算法,主要用于无损或近无损的数据压缩。该算法由Sheikholeslam、Fattal和Rabbani在1996年提出,是基于小波变换的熵编码...

    spiht 算法的实现

    SPIHT(Set Partitioning In Hierarchical Trees,分层树集划分)算法是一种高效的图像压缩方法,主要用于无损或近无损的数据压缩。该算法基于小波变换,由Sheila K. Natarajan在1993年提出。SPIHT算法在保持图像...

    图像压缩SPIHT算法

    8. **性能评估**:为了衡量SPIHT算法的性能,通常会使用诸如峰值信噪比(PSNR)、结构相似度指数(SSIM)等指标,这些指标可以反映压缩图像与原始图像的质量差异。 SPIHT算法的优势在于其优良的压缩性能和对图像...

    SPIHT算法_SPIHT算法_

    **SPIHT算法详解** SPIHT,全称为Set Partitioning in Hierarchical Trees,即多级树集合分裂算法,是一种用于图像压缩的无损编码方法。它由Mallat和Zibulevsky在1990年代中期提出,主要用于高分辨率、高精度图像的...

    在matlab中实现了对SPIHT算法的编写.rar_SPIHT_matlab_matlab spiht

    SPIHT(Set Partitioning in Hierarchical Trees,分层树集划分)算法是一种高效的图像压缩方法,由Mallat和Zhang于1993年提出。该算法基于小波变换,利用图像的自相似性和边缘特性,实现了高压缩比的同时保持了较高...

    SPIHT.rar_MATLAB SPIHT_SPIHT_SPIHT algorithm_spiht matlab

    **SPIHT算法详解** SPIHT(Set Partitioning in Hierarchical Trees,层次树集划分)算法是一种基于小波变换的无损图像压缩算法,由Mallat和Zibulski在1993年提出。该算法以其高效、精确的编码性能在图像压缩领域...

    spiht改进算法(matlab)

    SPIHT(Set Partitioning in Hierarchical Trees,分层树集划分)是一种用于图像压缩的算法,它基于小波变换。SPIHT算法以其高效、高压缩率和良好的图像重构质量而闻名,尤其适用于医学图像和遥感图像的压缩。在本...

    【图像压缩】基于matlab GUI多级树集合分裂排序spiht图像压缩(含PSNR)【含Matlab源码 2688期】.md

    CSDN Matlab武动乾坤上传的资料均有对应的代码,代码均可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行...

Global site tag (gtag.js) - Google Analytics