本文给出SPIHT编码的精细扫描程序,其中包括一个能够将带小数的十进制数转换为二进制表示的函数,这个转换函数可以实现任意精度的二进制转换,特别是将小数部分转换为二进制表示。希望对有需要的朋友有所帮助。下一篇文章将给出SPIHT的解码程序。请关注后续文章,欢迎 Email 联系交流。
4、精细扫描程序
function Rn=refinement(N,LSP_Old)
% 函数 REFINEMENT()为精细编码程序,对上一级编码产生的重要系数列表LSP_Old,读取每个
% 表项相应小波系数绝对值的二进制表示,输出其中第N个重要的位,即相应于 2^N 处的码数
% 输入参数:N —— 本级编码阈值的指数
% LSP_Old —— 上一级编码产生的重要系数列表
% 输出参数:Rn —— 精细扫描输出位流
global Mat
% Mat是输入的小波分解系数矩阵,作为全局变量,在编码的相关程序中使用
Rn=[];
% 每级精细扫描开始时,Rn 均为空表
% LSP_Old 非空时才执行精细扫描程序
if ~isempty(LSP_Old)
rlsp=size(LSP_Old,1);
% 获取 LSP_Old 的表项个数,对每个表项进行扫描
for r=1:rlsp
tMat=Mat(LSP_Old(r,1),LSP_Old(r,2));
% 读取该表项对应的小波系数值
[biLSP,Np]=fracnum2bin(abs(tMat),N);
% 函数 FRACNUM2BIN() 根据精细扫描对应的权位 N ,将任意的十进制正数转换为二进制数,
% 输出参数为二进制表示列表 biLSP 和 权位N与最高权位的距离 Np 。
Rn=[Rn,biLSP(Np)];
% biLSP(Np)即为小波系数绝对值的二进制表示中第N个重要的位
end
end
(1)十进制数转换为二进制表示的程序
function [binlist,qLpoint]=fracnum2bin(num,qLevel)
% 函数 FRACNUM2BIN() 根据精细扫描对应的权位 N ,将任意的十进制正数转换为二进制数,
% 包括带有任意位小数的十进制数。Matlab中的函数 dec2bin()、dec2binvec()只能将十
% 进制数的整数部分转换为二进制表示,对小数部分则不转换。
%
% 输入参数:num —— 非负的十进制数
% qLevel —— 量化转换精度,也可以是精细扫描对应的权位 N
% 输出参数:biLSP —— 二进制表示列表
% Np —— 权位N与最高权位的距离,N 也是本级编码阈值的指数
intBin=dec2binvec(num);
% 首先用Matlab函数dec2binvec()获取整数部分的二进制表示intBin,低位在前,高位在后
intBin=intBin(end:-1:1);
% 根据个人习惯,将二进制表示转换为高位在前,低位在后
lenIB=length(intBin);
% 求出二进制表示的长度
decpart=num-floor(num);
% 求出小数部分
decBin=[];
% 小数部分的二进制表示初始化为空表
% 根据量化精度要求输出总的二进制表示列表
if (qLevel+1)>lenIB
% 如果量化精度高于整数部分的二进制码长,则输出为零值列表
binlist=zeros(1,qLevel+1);
qLpoint=1;
elseif qLevel>=0
% 如果量化精度在整数权位,则输出整数部分的二进制表示intBin
% 不需转换小数部分,同时输出量化精度与最高权位的距离Np
binlist=intBin;
binlist(lenIB-qLevel+1:end)=0;
qLpoint=lenIB-qLevel;
elseif qLevel<0
% 如果量化精度在小数权位,则需转换小数部分
N=-1;
while N>=qLevel
% 小数部分的转换只需进行到量化精度处
res=decpart-2^N;
if res==0
decBin=[decBin,1];
decBin(end+1:-qLevel)=0;
% 如果小数部分的转换完成时仍未达到量化精度所在的权位,则补零
break;
elseif res>0
decBin=[decBin,1];
decpart=res;
N=N-1;
else
decBin=[decBin,0];
N=N-1;
end
end
binlist=[intBin,decBin];
qLpoint=lenIB-qLevel;
% 输出整数部分和小数部分的二进制表示intBin,decBin,以及量化精度与最高权位的距离Np
end
至此,SPIHT算法的编码程序就介绍完毕啦!以后有时间的话会增加熵编码的功能(例如Huffman编码)。
分享到:
相关推荐
[原创]本matlab代码是2012年发表在"计算机应用"的文章"基于自适应编码次序的多级树集合分裂算法"的源代码。 为了在图像轮廓处获得更好的压缩效采,在多级树集合分裂( SPIHT)算法的基础上提出了一种优先编码周围邻域...
SPIHT (Set Partitioning in Hierarchical Trees) 算法是一种高效的图像编码技术,它基于多级树集合分裂的思想。与EZW (Embedded Zerotree Wavelet) 算法相比,SPIHT 在处理特定类型的小波系数时更加高效。EZW 算法...
在MATLAB中实现SPIHT算法,需要编写小波变换、系数排序、树结构构建、筛选和熵编码等模块。代码通常包括预处理、小波分解、显著性检测、编码和后处理等步骤。通过对MATLAB代码的理解和调试,可以更好地掌握SPIHT...
SPIHT(Set Partitioning In Hierarchical Trees,分层树集划分)算法是一种高效、无损的图像压缩技术,尤其在医疗成像、遥感和高质量图像存储等领域有广泛应用。MATLAB作为一款强大的数学计算和仿真软件,是实现...
通过以上介绍,我们可以看到SPIHT算法的MATLAB实现涉及到小波变换、树结构编码和解码等多个方面,是一套完整的图像压缩解决方案。对于希望深入了解和应用SPIHT算法的人来说,这个MATLAB实现提供了宝贵的参考。
SPIHT(Set Partitioning In Hierarchical Trees,分层树集划分)算法是一种基于小波变换的无损图像压缩方法,由Mallat和Zhang在1993年提出。在MATLAB环境中开发SPIHT算法,可以充分利用其强大的数学计算能力和图形...
SPIHT(Set Partitioning in Hierarchical Trees,分层树中的集合划分)是一种高效的图像压缩算法,主要用于无损或近无损的数据压缩。该算法由Sheikholeslam、Fattal和Rabbani在1996年提出,是基于小波变换的熵编码...
对于想要学习和使用SPIHT算法的MATLAB用户,可以从提供的"SPIHT"压缩包文件中找到源代码,通过阅读和运行代码,深入理解算法的实现过程,进而应用于自己的项目中。同时,为了优化性能和适应不同需求,可能需要对源...
7. **MATLAB实现**:在MATLAB环境中,实现SPIHT算法通常包括定义小波基,进行小波变换,执行显著性检测,构建和更新上下文模型,熵编码和解码,以及逆小波变换的过程。需要注意的是,MATLAB提供了丰富的工具箱支持小...
总之,这个压缩包提供了一个完整的SPIHT算法实现,包括编码和解码过程,对于想要学习和理解SPIHT算法的初学者,是一份非常宝贵的资源。通过阅读代码、文档和实验,可以深入掌握SPIHT算法的工作原理,以及如何在Linux...
在MATLAB中实现SPIHT算法,需要编写小波变换和逆变换的代码,以及实现显著性检测、树结构构建和编码解码的逻辑。`SPIHT_Matlab_Demo`可能包含用于演示SPIHT算法的MATLAB脚本和函数,用户可以通过运行这个示例程序来...
在这个项目中,MATLAB被用来实现SPIHT压缩算法的编码和解码过程。源代码包括以下几个关键函数: 1. `func_SPIHT_Demo_Main.m`:这是主程序,调用其他函数进行SPIHT压缩和解压的演示。用户可以通过运行这个脚本来...
- `codecolr` 和 `codetree` 可能包含了SPIHT算法的彩色图像编码和树结构相关的源代码。 - `decdcolr` 和 `decdtree` 对应于解码部分,用于恢复压缩后的图像。 - `SPIHT.doc` 应该是一个文档,详细介绍了SPIHT算法的...
SPIHT,全称为Set Partitioning in Hierarchical Trees,即多级树集合分裂算法,是一种用于图像压缩的无损编码方法。它由Mallat和Zibulevsky在1990年代中期提出,主要用于高分辨率、高精度图像的压缩,特别是在医学...
SPIHT(Set Partitioning in Hierarchical Trees,分层树集划分)是一种用于图像压缩的算法,它基于小波变换和熵编码技术。SPIHT算法在1996年由Sheila K. Ward和J. M. Shapiro提出,是无损和近似无损图像压缩领域的...
SPIHT算法的核心思想是通过自适应地选择和编码图像中的显著系数来实现高效的压缩。它利用小波分解将图像转化为多个频率成分,然后按照重要性排序进行编码。SPIHT算法的关键步骤包括: 1. **初始阈值设置**:根据...
SPIHT(Set Partitioning in Hierarchical Trees,分层树集划分)算法是一种高效的图像压缩方法,由Mallat和Zhang于1993年提出。该算法基于小波变换,利用图像的自相似性和边缘特性,实现了高压缩比的同时保持了较高...
在MATLAB环境中实现SPIHT算法,可以方便地进行图像处理和分析。 首先,MATLAB是MathWorks公司开发的一种高级编程语言和交互式环境,特别适合于数值计算、符号计算、数据分析以及图形可视化等领域。在MATLAB中编写...