3

我在图像上应用 dwt2 函数以应用小波变换,它给出四个结果图像 cA(低通图像)、cH(水平细节图像)、cV(垂直细节图像)、cD(对角线细节图像)。一切都很好,直到现在。我想可视化这些结果图像。

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

image = imread(imagePath);
wavename = 'haar';
[cA,cH,cV,cD] = dwt2(im2double(iamge),wavename);
imshow([cA,cH; cV,cD],'Colormap',gray);

当我运行此代码时,可视化结果如下所示 在此处输入图像描述

但我希望我的结果应该是这样的,任何人都可以帮助我。

在此处输入图像描述

4

2 回答 2

3

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

数据(图片来自 Mathworks,来自 [ 2 ])

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

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

ii = 1; jj = prod(S(1,:));
cA2 = reshape(C(ii:jj),S(1,:));

其他二级系数同样得到:

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

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,:));

现在可以通过根据需要排列图像来简单地创建绘图:

imshow([[cA2,cH2; cV2,cD2],cH1;cV1,cD1],'Colormap',pink)

要添加边框,您可以使用以下rectangle功能和信息S

% 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');
于 2015-08-11T07:00:44.417 回答
2

一个更简单的方法是将结果连接为矩阵,并填充后续矩阵:

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”图像的结果是:

在此处输入图像描述

对于更多级别,只需计算第二级近似系数的小波。也就是说,取多个小波,即重新计算当前小波结果的近似系数的小波,得到下一级小波。

于 2016-08-31T18:14:28.520 回答