首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在matlab中显示小波变换函数dwt2结果

如何在matlab中显示小波变换函数dwt2结果
EN

Stack Overflow用户
提问于 2015-08-11 06:16:18
回答 2查看 6.1K关注 0票数 3

本文将dwt2函数应用于图像小波变换,给出了四种结果图像:cA(低通图像)、cH (水平细节图像)、cV(垂直细节图像)、cD (对角线细节图像)。到现在为止这一切都很好。我想要可视化那些结果图像。

现在,我正在使用下面的代码可视化这四个结果图像。

代码语言:javascript
复制
image = imread(imagePath);
wavename = 'haar';
[cA,cH,cV,cD] = dwt2(im2double(iamge),wavename);
imshow([cA,cH; cV,cD],'Colormap',gray);

当我运行此代码时,可视化结果如下所示

但我想让我的结果看起来像这样,任何人都可以帮助我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-11 07:00:44

在您问题的第二张图像中,显示了两级小波变换。通过使用dwt2的代码示例,您只需要进行一级分解。要进行两级分解,可以将wavedec2函数与N=2一起使用。要创建如图所示的绘图,您必须仔细查看wavedec2的返回值

(来自[2]的Mathworks图像)

向量C包含所有近似系数,以列的方式存储.S是所谓的“簿记”矩阵,因为它包含关于数据存储方式的信息。

现在第一个图像,上面示例中的cA2,是C的前32*32个条目。使用iijj作为索引变量,我们可以得到C的相关部分,并使用reshape返回图像格式:

代码语言:javascript
复制
ii = 1; jj = prod(S(1,:));
cA2 = reshape(C(ii:jj),S(1,:));

其他二级系数也类似地得到:

代码语言:javascript
复制
ii = jj+1; jj = ii + prod(S(2,:)) - 1;
cH2 = reshape(C(ii:jj),S(2,:));

ii = jj+1; jj = ii + prod(S(2,:)) - 1;
cV2 = reshape(C(ii:jj),S(2,:));

ii = jj+1; jj = ii + prod(S(2,:)) - 1;
cD2 = reshape(C(ii:jj),S(2,:));

使用S的第三行,也可以以同样的方式获得第一级系数。

代码语言:javascript
复制
ii = jj+1; jj = ii + prod(S(3,:)) - 1;
cH1 = reshape(C(ii:jj),S(3,:));

ii = jj+1; jj = ii + prod(S(3,:)) - 1;
cV1 = reshape(C(ii:jj),S(3,:));

ii = jj+1; jj = ii + prod(S(3,:)) - 1;
cD1 = reshape(C(ii:jj),S(3,:));

现在,只需按需要排列图像,就可以创建该情节:

代码语言:javascript
复制
imshow([[cA2,cH2; cV2,cD2],cH1;cV1,cD1],'Colormap',pink)

要添加边框,可以使用rectangle函数和来自S的信息

代码语言:javascript
复制
% Small rectangles
rectangle('Position',[0,0,S(1,1),S(1,2)],'LineWidth',2,'EdgeColor','y');
rectangle('Position',[S(1,1),0,S(1,1),S(1,2)],'LineWidth',2,'EdgeColor','y');
rectangle('Position',[0,S(1,2),S(1,1),S(1,2)],'LineWidth',2,'EdgeColor','y');
rectangle('Position',[S(1,1),S(1,2),S(1,1),S(1,2)],'LineWidth',2,'EdgeColor','y');

% Large rectangles
rectangle('Position',[0,S(3,2),S(3,1),S(3,2)],'LineWidth',2,'EdgeColor','y');
rectangle('Position',[S(3,1),0,S(3,1),S(3,2)],'LineWidth',2,'EdgeColor','y');
rectangle('Position',[S(3,1),S(3,2),S(3,1),S(3,2)],'LineWidth',2,'EdgeColor','y');
票数 3
EN

Stack Overflow用户

发布于 2016-08-31 18:14:28

一个简单得多的方法是将结果串联为矩阵,并填充后续的矩阵:

代码语言:javascript
复制
image = imread(imagePath);
wavename = 'haar';
[cA,cH,cV,cD] = dwt2(im2double(image),wavename);
[cAA,cAH,cAV,cAD] = dwt2(cA,wavename); % Recompute Wavelet of Approximation Coefs.
Level2=[cAA,cAH; cAV,cAD]; %contacinat
imshow([Level2,cH; cV,cD],'Colormap',gray);

"cameraman.tif“图像的结果是:

对于更多的层次,只需计算第二级近似系数的小波。换句话说,采取多个小波,即重新计算当前小波结果的逼近系数的小波,得到下一阶段小波。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31934500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档