gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:32:05 25 4
gpt4 key购买 nike

我在图像上应用 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);

当我运行这段代码时,可视化结果如下所示 enter image description here

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

enter image description here

最佳答案

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

data (图片来自 Mathworks,来自 [ 2 ])

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

现在第一个图像,上面例子中的cA2,是C的前32*32个条目。使用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');

关于matlab - 如何在matlab中显示小波变换函数dwt2的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31934500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com