二维小波变换——wrcoef2、upcoef2、detcoef2、appcoef2

1.wrcoef2

功能:从二维小波系数重构单分支
用法:

  • X = wrcoef2(‘type’,C,S,wname,N)
    根据小波分解结构[C,S],计算N级重构系数矩阵。wname是包含小波名称的字符向量或字符串标量(有关详细信息,请参阅wfilters)。如果‘type’=‘a’,则重构近似系数;如果’type’=‘h’(‘v’或’d’,则分别重建水平(垂直或对角线)细节系数。级别N必须是整数,使得如果’type’=‘a’,则满足0≤ N≤ size(S,1)-2;如果’type”=“h”、“v”或“d”,则满足1≤ N≤ size’(S,1)-2 。可以给出滤波器,而不是给出小波的名字。
  • X = wrcoef2(‘type’,C,S,Lo_R,Hi_R,N)
    Lo_R是重构低通滤波器,Hi_R是重构高通滤波器
  • X = wrcoef2(‘type’,C,S,wname)
  • X = wrcoef2(‘type’,C,S,Lo_R,Hi_R)
    X = wrcoef2(‘type’,C,S,wname) 与 X = wrcoef2(‘type’,C,S,Lo_R,Hi_R)重构最大水平N= size(S,1)-2的系数。

代码示例:

load woman;% Load an image,X contains the loaded image.
[c,s] = wavedec2(X,2,'sym5');%2级执行分解,使用sym5的X
%1级和2级重建近似值,从小波分解结构[c,s]
a1 = wrcoef2('a',c,s,'sym5',1);
a1 = wrcoef2('a',c,s,'sym5',2);
%在第二层重建细节,从小波分解结构[c,s].
hd2 = wrcoef2('h',c,s,'sym5',2);% 'h' is for horizontal, 
vd2 = wrcoef2('v',c,s ,'sym5',2);% 'v' is for vertical, 
dd2 = wrcoef2('d',c,s ,'sym5',2);% 'd' is for diagonal.
%所有这些图像的大小都相同。
sX = size(X)
sa1 = size(a1)
shd2 = size(hd2)

2.upcoef2

功能:从二维小波系数重构单分支
用法:

  • Y = upcoef2(O,X,wname,N,S)
    计算矩阵X的N步重构系数并取大小S的中心部分。wname是指定小波的字符向量或字符串标量。如果O=‘a’,则重构近似系数;如果O=‘h’(‘v’或’d’,分别),则重构水平(垂直或对角线,分别)细节系数。N必须是严格的正整数。
  • Y = upcoef2(O,X,Lo_R,Hi_R,N,S)
  • Y = upcoef2(O,X,wname,N) or Y = upcoef2(O,X,Lo_R,Hi_R,N)
    返回计算结果而不进行任何截断
  • Y = upcoef2(O,X,wname) or Y = upcoef2(O,X,wname,1)
  • Y = upcoef2(O,X,Lo_R,Hi_R) or Y = upcoef2(O,X,Lo_R,Hi_R,1)

代码示例:

load woman; % Load original image.,X contains the loaded image. 
[c,s] = wavedec2(X,2,'db4');%2级执行分解,使用db4的X. 
% 从系数重建1级的近似值和细节。 
% 这可以使用wrcoef2完成,或等效地使用; 
% Step 1: 从分解结构中提取系数[c,s].
% Step 2: 使用upcoef2重建. 
siz = s(size(s,1),:); 

ca1 = appcoef2(c,s,'db4',1); 
a1 = upcoef2('a',ca1,'db4',1,siz);

chd1 = detcoef2('h',c,s,1); 
hd1 = upcoef2('h',chd1,'db4',1,siz); 

cvd1 = detcoef2('v',c,s,1); 
vd1 = upcoef2('v',cvd1,'db4',1,siz);

cdd1 = detcoef2('d',c,s,1); 
dd1 = upcoef2('d',cdd1,'db4',1,siz);

运行结果:
在这里插入图片描述

3.detcoef2

功能: 二维细节系数
用法:

  • y = detcoef2(o,c,s,n)
    从小波分解结构[c,s]中提取n层方向o的细节系数。
  • [h,v,d] = detcoef2(‘all’,c,s,n)
    以级别n返回处的水平h、垂直v和对角线d细节系数。等价于detcoef2(‘a’,c,s,n)。
  • y = detcoef2(‘compact’,c,s,n)
    返回按行存储的所有细节系数。等价于detcoef2(‘c’,c,s,n)。

这个例子展示了如何从图像的离散小波分析中提取细节系数。本例使用零填充。
代码如下(示例):

%将扩展模式设置为零填充。
origmode = dwtmode('status','nodisplay');
dwtmode('zpd','nodisplay');
%加载并显示图像。
load woman
subplot(131);
imagesc(X)
colormap(gray)
%利用Haar小波对图像进行二级小波分解。
[c,s] = wavedec2(X,2,'haar');
size(X)
size(c)
s
%从小波分解结构[c,s]中提取每个方向第2层的细节系数。显示对角线细节系数。
[chd2,cvd2,cdd2] = detcoef2('all',c,s,2);
size(cdd2)
subplot(132);
imagesc(cdd2)
colormap(gray)
%在每个方向的第1层提取细节系数。显示垂直细节系数。
[chd1,cvd1,cdd1] = detcoef2('all',c,s,1);
size(cvd1)
subplot(133);imagesc(cvd1)
colormap(gray)
%恢复原始扩展模式。
dwtmode(origmode,'nodisplay')

运行结果:
在这里插入图片描述
在这里插入图片描述

4.appcoef2

功能: 二维近似系数
用法:

  • A = appcoef2(C,S,wname)
    使用二维信号的小波分解结构[C,S]和wname指定的小波返回最粗尺度上的近似系数。
  • A = appcoef2(C,S,LoR,HiR)
    使用低通重建滤波器LoR和高通重建滤波器HiR。
  • A = appcoef2(…,N)
    返回N级的近似系数。如果[C,S]是二维信号的M级小波分解结构,则0≤ N≤ M。

代码如下(示例):

origmode = dwtmode('status','nodisplay');
dwtmode('zpd','nodisp')
load woman
subplot(131)
image(X)
colormap(map)
title('Original')
size(X)
%使用db1小波对图像执行三级小波分解。
%显示系数数组cfs中的元素数,以及记账矩阵inds的内容。
%请注意,cfs的元素数与X相同。
wv = 'db1';
[cfs,inds] = wavedec2(X,3,wv);
numel(X)
numel(cfs)
inds
%提取并显示第2级的近似系数。
cfs2 = appcoef2(cfs,inds,wv,2);
subplot(132)
imagesc(cfs2)
colormap('gray')
title('Level 2 Approximation Coefficients')
size(cfs2)
%提取并显示第3级的近似系数。
cfs3 = appcoef2(cfs,inds,wv,3);
subplot(133)
imagesc(cfs3)
colormap('gray')
title('Level 3 Approximation Coefficients')
size(cfs3)
dwtmode(origmode,'nodisplay') 

运行结果:
在这里插入图片描述

  • 3
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个程序通过 subplot 函数将多个小图像放在一个大图像中进行显示,具体步骤如下: 1. 使用 imshow 函数显示原始图像 I,以及分解后的低频和高频信息 c1; 2. 使用 subplot 函数分别创建 3 行 2 列的网格,将每个小图像放到对应的网格中; 3. 在网格的第 1 行第 1 列显示原始图像 I; 4. 在网格的第 1 行第 2 列显示分解后的低频和高频信息 c1; 5. 在网格的第 1 行第 3 列显示第一次压缩后的图像 ca1,并通过 whos 函数显示其字节大小; 6. 在网格的第 2 行第 1 列显示第二次压缩后的图像 ca2,并通过 whos 函数显示其字节大小; 7. 在网格的第 2 行第 2 列显示第三次压缩后的图像 ca3,并通过 whos 函数显示其字节大小; 8. 在网格的第 3 行第 1 列、第 2 列、第 3 列分别显示第一次、第二次、第三次压缩后的低频信息 a1、a2、a3。 下面是代码实现: ``` clear X = imread('wgxy.jpg'); I = rgb2gray(X); I=double(I); subplot(3,3,1); imshow(I,[]); title('原始图像'); axis square; disp('压缩前图像大小字节'); whos('I'); [c,s] = wavedec2(I,3,'bior3.7'); ca1 = appcoef2(c,s,'bior3.7',1); ch1 = detcoef2('h',c,s,1); cv1 = detcoef2('v',c,s,1); cd1 = detcoef2('d',c,s,1); a1 = wrcoef2('a',c,s,'bior3.7',1); h1 = wrcoef2('h',c,s,'bior3.7',1); v1 = wrcoef2('v',c,s,'bior3.7',1); d1 = wrcoef2('d',c,s,'bior3.7',1); c1=[a1,h1;v1,d1]; subplot(3,3,2); imshow(c1,[]); title('分解后低频和高频信息'); axis square; ca1 = appcoef2(c,s,'bior3.7',1); ca1 = wcodemat(ca1,500,'mat',0); a11 = wrcoef2('a',c,s,'bior3.7',1); subplot(3,3,3); imshow(a11,[]); title('第一次压缩图像'); disp('第一次压缩图像字节大小'); whos('ca1'); subplot(3,3,4); ca2 = appcoef2(c,s,'bior3.7',2); ca2 = wcodemat(ca2,500,'mat',0); a22 = wrcoef2('a',c,s,'bior3.7',2); imshow(a22,[]); title('第二次压缩图像'); disp('第二次压缩图像字节大小'); whos('ca2'); subplot(3,3,5); ca3 = appcoef2(c,s,'bior3.7',3); ca3 = wcodemat(ca3,500,'mat',0); a33 = wrcoef2('a',c,s,'bior3.7',3); imshow(a33,[]); title('第三次压缩图像'); disp('第三次压缩图像字节大小'); whos('ca3'); subplot(3,3,6); imshow(a11,[]); title('第一次压缩后低频信息'); axis square; subplot(3,3,7); imshow(a22,[]); title('第二次压缩后低频信息'); axis square; subplot(3,3,8); imshow(a33,[]); title('第三次压缩后低频信息'); axis square; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值