%----------------------------------------------------------%
小波图像分解 Matlab 程序 - V2.0版
小波图像重构 Matlab 程序 - V2.0版
%----------------------------------------------------------%
%----------------------------------------------------------%
小波重构矩阵 Matlab 程序 - V3.0版
%----------------------------------------------------------%
function xrec=mywaverec2(coef,scf,recdim,wname)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 函数 MYWAVEREC2() 对输入的分解系数矩阵x进行 recdim 层重构,得到重构矩阵 xrec
% 输入参数:y —— 分解系数矩阵;
% recdim —— 重构级数;
% wname —— 重构所用的小波函数
% 输出参数:xrec —— 重构矩阵。
%
% Copyright by Zou Yuhua ( chenyusiyuan ), Version: 3.0, Date: 2008-07-08
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 求小波函数对应的重构滤波器组系数
[Lo_R,Hi_R] = wfilters(wname,'r');
% 通过小波系数矩阵求出图像的分解级数 decdim
[yr,yc]=size(coef); % 小波系数矩阵 coef 是一个细胞矩阵(cell matrix),其中有 yr 个子矩阵,yc=1
decdim=(yr-1)/3; % 图像的 N 级分解会产生 1 个低频矩阵,N*3 个高频矩阵
if decdim<recdim
error(['Reconstruction level can not larger than decomposition level ( declev = ',num2str(decdim),' )'])
end
rcA=coef{1};
for i=1:recdim % 依次获取第 decdim 级至第(decdim - recdim + 1)级的高频系数矩阵
rcV=coef{(i-1)*3+2};
rcH=coef{(i-1)*3+3};
rcD=coef{(i-1)*3+4};
rcA=myidwt2(rcA,rcV,rcH,rcD,Lo_R,Hi_R,scf(i+2,:)); % 第 N 级重构得到第 N-1 级低频系数矩阵
end
xrec=rcA; % 重构结束后得到的矩阵 rcA 即为输出矩阵 xrec
plotxrec(decdim,recdim,xrec)
function plotxrec(decdim,recdim,xrec)
figure;
xr=uint8(xrec); % 将矩阵xrec的数据格式转换为适合显示图像的uint8格式
[sr,sc]=size(xr);
imshow(xr);
title(['Reconstructed Image. DecLevel = ',num2str(decdim),' , RecLevel = ',num2str(recdim)]);
xlabel(['Size : ',num2str(sr),'*',num2str(sc)]); % 显示重构矩阵的大小
function outcA=myidwt2(rcA,rcV,rcH,rcD,Lo_R,Hi_R,scf)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 函数 MYIDWT2() 对输入的子矩阵序列进行逆小波变换,重构出矩阵 y
% 输入参数:rcA,rcV,rcH,rcD —— 第 N 级低频、高频系数矩阵
% Lo_R,Hi_R —— 图像重构用到的低通、高通滤波器系数
% scf —— 本级小波分解系数矩阵的大小
% 输出参数:outcA —— 第 N-1 级低频系数矩阵,当N-1=0时即为重构图像。
%
% Copyright by Zou Yuhua ( chenyusiyuan ), Version: 3.0, Date: 2008-07-08
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 将四个第 N 级系数矩阵组合成一个矩阵
tmp_mat=[rcA,rcV;rcH,rcD];
[row,col]=size(tmp_mat);
% 这里 tmp_mat 的行列数比第 N-1 级低频矩阵 cA(N-1) 的要长 lf-1 行(列)
% 求出滤波器的长度
lf=length(Lo_R);
for k=1:col % 首先对组合矩阵tmp_mat的每一列,分开成上下两半
ca1=tmp_mat(1:row/2,k); % 分开的两部分分别作为平均系数序列ca1、细节系数序列cd1
cd1=tmp_mat(row/2+1:row,k); % ca1、cd1的长度恰好等于tmp_mat的行数row
tmp1=myidwt(ca1,cd1,Lo_R,Hi_R); % 重构序列的长度是(row+lf-1)
% 通过Matlab函数wkeep()截取与分解级相应的系数序列长度
yt1(:,k)=wkeep(tmp1,scf(1)); % 截取后的重构序列存入缓存矩阵
end
[row1,col1]=size(yt1);
for j=1:row1 % 将缓存矩阵 yt1 的每一行,分开成左右两半
ca2=yt1(j,1:col1/2); % 分开的两部分分别作为平均系数序列ca2、细节系数序列cd2
cd2=yt1(j,col1/2+1:col1);
tmp2=myidwt(ca2,cd2,Lo_R,Hi_R);
outcA(j,:)=wkeep(tmp2,scf(2)); % 2008-07-07 test
% 同理,也要截取 tmp2 中间长度为scf(2)的那一段,存入输出矩阵 outcA
end
function y = myidwt(cA,cD,lpr,hpr);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 函数 MYIDWT() 对输入的小波分解系数进行逆离散小波变换,重构出信号序列 y
% 输入参数:cA —— 平均部分的小波分解系数;
% cD —— 细节部分的小波分解系数;
% lpr、hpr —— 重构所用的低通、高通滤波器。
%
% Copyright by Zou Yuhua ( chenyusiyuan ), Version: 1.0, Date: 2007-11-10
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
lca=length(cA); % 求出平均、细节部分分解系数的长度
lcd=length(cD);
while (lcd)>=(lca) % 每一层重构中,cA 和 cD 的长度要相等,故每层重构后,
% 若lcd小于lca,则重构停止,这时的 cA 即为重构信号序列 y 。
upl=upspl(cA); % 对平均部分系数进行上抽样
cvl=conv(upl,lpr); % 低通卷积
cD_up=cD(lcd-lca+1:lcd); % 取出本层重构所需的细节部分系数,长度与本层平均部分系数的长度相等
uph=upspl(cD_up); % 对细节部分系数进行上抽样
cvh=conv(uph,hpr); % 高通卷积
cA=cvl+cvh; % 用本层重构的序列更新cA,以进行下一层重构
cD=cD(1:lcd-lca); % 舍弃本层重构用到的细节部分系数,更新cD
lca=length(cA); % 求出下一层重构所用的平均、细节部分系数的长度
lcd=length(cD);
end % lcd < lca,重构完成,结束循环
y=cA; % 输出的重构序列 y 等于重构完成后的平均部分系数序列 cA
function y=upspl(x);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 函数 Y = UPSPL(X) 对输入的一维序列x进行上抽样,即对序列x每个元素之间
% 插零,例如 x=[x1,x2,x3,x4],上抽样后为 y=[0,x1,0,x2,0,x3,0,x4,0];
%
% Copyright by Zou Yuhua ( chenyusiyuan ), Version: 2.0, Date: 2008-07-08
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N=length(x); % 读取输入序列长度
M=2*N+1; % 输出序列的长度是输入序列长度的2倍再加一
y=zeros(1,M);
k=1:N;
y(2*k)=x(k); % 输出序列的奇数位为0,偶数位按次序等于相应位置的输入序列元素
重构图像示例:
用一个16*16的随机矩阵进行小波分解和重构,结果如下:
x=randint(16,16,[1 100]);
[coef,scf]=mywavedec2(x,3,'bior3.7');
xrec=mywaverec2(coef,scf,3,'bior3.7');
same=(x==xrec);
lf =
16
[o2sa,f1sa,rsx] =
16 16 0 0 16 16
31 31 15 15 8 8
30 30 15 15 4 4
30 30 15 15 2 2
x =
68 83 87 18 31 83 2 90 38 11 2 66 8 51 42 19
21 96 77 63 12 17 60 29 8 7 29 19 2 95 22 51
28 60 45 25 45 40 82 26 20 24 82 64 23 83 4 43
63 3 63 59 47 53 98 94 5 94 99 18 52 92 9 67
54 82 96 51 2 72 23 14 57 7 2 54 46 12 86 68
6 62 65 47 67 57 71 95 13 27 82 63 71 82 35 96
9 71 25 55 73 47 53 71 53 100 63 69 59 91 47 20
28 10 36 95 29 45 94 85 12 22 57 68 51 16 92 12
41 43 19 35 27 9 72 21 77 50 25 88 8 13 23 57
48 38 50 41 71 45 23 46 38 30 83 2 20 77 87 97
91 17 41 31 79 37 45 9 83 68 27 32 38 73 66 3
60 84 47 42 99 31 18 86 5 96 76 78 28 66 90 88
33 84 62 29 48 86 97 57 60 77 66 31 78 76 49 3
48 46 8 40 91 76 36 32 95 67 22 93 32 67 100 52
60 96 32 51 46 95 5 38 29 14 61 68 64 89 38 20
17 15 61 73 81 56 76 87 89 10 61 8 99 28 54 72
xrec =
68 83 87 18 31 83 2 90 38 11 2 66 8 51 42 19
21 96 77 63 12 17 60 29 8 7 29 19 2 95 22 51
28 60 45 25 45 40 82 26 20 24 82 64 23 83 4 43
63 3 63 59 47 53 98 94 5 94 99 18 52 92 9 67
54 82 96 51 2 72 23 14 57 7 2 54 46 12 86 68
6 62 65 47 67 57 71 95 13 27 82 63 71 82 35 96
9 71 25 55 73 47 53 71 53 100 63 69 59 91 47 20
28 10 36 95 29 45 94 85 12 22 57 68 51 16 92 12
41 43 19 35 27 9 72 21 77 50 25 88 8 13 23 57
48 38 50 41 71 45 23 46 38 30 83 2 20 77 87 97
91 17 41 31 79 37 45 9 83 68 27 32 38 73 66 3
60 84 47 42 99 31 18 86 5 96 76 78 28 66 90 88
33 84 62 29 48 86 97 57 60 77 66 31 78 76 49 3
48 46 8 40 91 76 36 32 95 67 22 93 32 67 100 52
60 96 32 51 46 95 5 38 29 14 61 68 64 89 38 20
17 15 61 73 81 56 76 87 89 10 61 8 99 28 54 72
分享到:
相关推荐
本程序主要针对MATLAB内置小波函数非2:1抽样比例的问题,提供了一种精确的2:1比例的小波分解和重构方法。 小波分解是将一个信号或图像分解成不同频率成分的过程,这些成分由小波函数的不同尺度和位置表示。2:1...
总之,"图像处理小波分析matlab程序"是一个实用的资源,它涵盖了小波分析在图像处理中的各种应用。通过学习和实践这个程序,不仅可以深入理解小波分析的原理,还能掌握如何在MATLAB环境中实现这些高级功能,对于提升...
3. **小波重构**:使用融合后的小波系数,通过`waverec`函数进行图像重构,得到融合图像。此步骤将融合的系数转换回空间域,形成最终的融合图像。 MATLAB中的`wavelet工具箱`提供了多种小波基函数,如Daubechies、...
二维二进小波的快速分解与重构算法matlab实现-ex7-4.rar 使用matlab来实现非正交二次样条二维二进小波的快速分解和重构 编程实现例7.4中可分离二维二进小波的快速分解与重构算法 算法实现 使用matlab来实现...
这个MATLAB项目,"图像小波分解与重构代码",显然是为了教授学生如何运用小波理论对图像进行处理,包括分解和重构过程,同时涉及了图像加噪和去噪的实践。 小波分解是将一个图像分解成不同分辨率层次的细节和结构...
总的来说,"小波分析在图像中的应用-matlab程序"这一主题旨在引导初学者通过MATLAB学习和实践小波分析技术,理解其在图像处理中的重要性和实用性。通过探索和理解提供的代码,不仅可以提升对小波理论的理解,也能...
mra_mallat_2D_iterate.m实现二维图像的分解,mra_mallat_2D_merge_iterate.m实现二维图像的重构。程序针对2^N*2^M像素的图像设计,可以实现任意次数的分解与重构。也很很方便改写成针对任意像素的程序。
在本项目中,开发者可能利用MATLAB的小波工具箱进行小波变换,使用神经网络工具箱构建和训练神经网络模型,实现图像压缩的全过程。 5. **性能评估**: 压缩效果通常通过两个主要指标评估:压缩比(CR)和峰值...
本压缩包包含了一系列MATLAB程序,旨在帮助理解和应用小波分解与重构的技术。 首先,我们要了解小波分解的基本概念。小波分解是将原始信号分解成一系列不同尺度和位置的小波系数的过程。这些系数反映了信号在不同...
- MATLAB中的`wavemngr`函数可以用于管理和显示小波基,而`wavedec`和`waverec`则分别用于进行小波分解和重构。 2. **图像的小波分解** - 在图像处理中,小波变换可以将图像分解成不同尺度和位置的细节信息,有助...
2. 小波分析:掌握小波基的选择、小波分解与重构过程,以及如何利用小波系数进行图像处理。 3. MATLAB编程:熟悉MATLAB语法,能编写图像处理相关的函数和脚本。 4. 图像拼接:学习图像的对齐、匹配和无缝融合技术。 ...
但是,根据上述信息,我们可以推测这个MATLAB程序是关于使用小波分析技术进行图像融合和拼接的实例,这对于理解和学习图像处理、小波分析以及MATLAB编程都是很好的实践素材。学习者可以通过阅读和运行此程序,进一步...
标题中的"小波分析MATLAB源程序"是指使用MATLAB语言编写的关于小波分析的源代码,这些源代码可能包含了对不同小波变换的实现,以及相关的数据处理和分析功能。 描述中提到"从国外大学网站下载,包括雷恩众多最新的...
本节将详细介绍基于MATLAB的小波图像融合算法及其代码实现。 1. **小波理论基础** 小波分析是一种多尺度分析方法,能够同时在时间和频率域内对信号进行分析。在图像融合中,小波分解可以将图像分解为多个不同频段...
在MATLAB中,可以使用`wavedec2`函数进行二维小波分解,然后按照特定规则重组小波系数,最后用`waverec2`函数进行重构。 图像拼接则是将多个图像连接成一个大图像,通常用于全景图的创建。这需要解决图像间的重叠...
在这个“matlab小波去噪”压缩包中,你将找到关于如何在Matlab环境中应用小波去噪的详细程序和注释。 首先,小波去噪的基础是小波理论。小波分析是一种数学工具,它将复杂的信号分解成不同频率和时间的局部成分,这...
基于MATLAB实现的小波图像融合,利用了MATLAB强大的数学计算能力和丰富的图像处理工具箱,为开发者提供了便捷的平台。 在MATLAB中,小波图像融合通常涉及到以下几个主要知识点: 1. **小波理论**:小波分析是一种...
Matlab小波图像处理+完整程序(以下为部分程序:clc; clear; % 装载图像 load woman; % X包含载入的图像 % 绘制原始图像 figure(1); subplot(2,2,1); image(X); colormap(map); title('原始图像'); % 使用sym5对X进行...
小波分解与重构是信号处理领域中的重要技术,它结合了频域分析和时域分析的优势,被广泛应用于图像处理、语音识别、故障诊断、金融数据分析等多个领域。MATLAB作为一个强大的数学计算软件,提供了丰富的工具箱支持小...