What is the difference between "dwt2()" and "wavedec2()"?

15 vues (au cours des 30 derniers jours)
WanYu
WanYu le 5 Fév 2020
Commenté : WanYu le 5 Fév 2020
Hi All,
I wish to know the difference between "dwt2()" and "wavedec2()", I have tried it on MATLAB yet it shows different value in each variables.
MATLAB Code as shown:
dwt2
[LL, LH, HL, HH] = dwt2(A, 'db1');
wavedec2
[C, L] = wavedec2(A, 1, 'db1');
Also, I am trying on 3-level DWT with "dwt2()" and "idwt2()", however I faced difficulties when converting it back to a RGB image.
This is how I do for "dwt" process as I want to see the difference on selecting different sub-bands may affects on the image output.
% 1-level dwt
[LL1, LH1, HL1, HH1] = dwt2(A, 'db1');
% 2-level dwt
[LL1_LL2, LL1_LH2, LL1_HL2, LL1_HH2] = dwt2(LL1, 'db1');
[LH1_LL2, LH1_LH2, LH1_HL2, LH1_HH2] = dwt2(LH1, 'db1');
[HL1_LL2, HL1_LH2, HL1_HL2, HL1_HH2] = dwt2(HL1, 'db1');
[HH1_LL2, HH1_LH2, HH1_HL2, HH1_HH2] = dwt2(HH1, 'db1');
% 3-level dwt
[LL1_LL2_LL3, LL1_LL2_LH3, LL1_LL2_HL3, LL1_LL2_HH3] = dwt2(LL1_LL2, 'db1');
[LL1_LH2_LL3, LL1_LH2_LH3, LL1_LH2_HL3, LL1_LH2_HH3] = dwt2(LL1_LH2, 'db1');
[LL1_HL2_LL3, LL1_HL2_LH3, LL1_HL2_HL3, LL1_HL2_HH3] = dwt2(LL1_HL2, 'db1');
[LL1_HH2_LL3, LL1_HH2_LH3, LL1_HH2_HL3, LL1_HH2_HH3] = dwt2(LL1_HH2, 'db1');
[LH1_LL2_LL3, LH1_LL2_LH3, LH1_LL2_HL3, LH1_LL2_HH3] = dwt2(LH1_LL2, 'db1');
[LH1_LH2_LL3, LH1_LH2_LH3, LH1_LH2_HL3, LH1_LH2_HH3] = dwt2(LH1_LH2, 'db1');
[LH1_HL2_LL3, LH1_HL2_LH3, LH1_HL2_HL3, LH1_HL2_HH3] = dwt2(LH1_HL2, 'db1');
[LH1_HH2_LL3, LH1_HH2_LH3, LH1_HH2_HL3, LH1_HH2_HH3] = dwt2(LH1_HH2, 'db1');
[HL1_LL2_LL3, HL1_LL2_LH3, HL1_LL2_HL3, HL1_LL2_HH3] = dwt2(HL1_LL2, 'db1');
[HL1_LH2_LL3, HL1_LH2_LH3, HL1_LH2_HL3, HL1_LH2_HH3] = dwt2(HL1_LH2, 'db1');
[HL1_HL2_LL3, HL1_HL2_LH3, HL1_HL2_HL3, HL1_HL2_HH3] = dwt2(HL1_HL2, 'db1');
[HL1_HH2_LL3, HL1_HH2_LH3, HL1_HH2_HL3, HL1_HH2_HH3] = dwt2(HL1_HH2, 'db1');
[HH1_LL2_LL3, HH1_LL2_LH3, HH1_LL2_HL3, HH1_LL2_HH3] = dwt2(HH1_LL2, 'db1');
[HH1_LH2_LL3, HH1_LH2_LH3, HH1_LH2_HL3, HH1_LH2_HH3] = dwt2(HH1_LH2, 'db1');
[HH1_HL2_LL3, HH1_HL2_LH3, HH1_HL2_HL3, HH1_HL2_HH3] = dwt2(HH1_HL2, 'db1');
[HH1_HH2_LL3, HH1_HH2_LH3, HH1_HH2_HL3, HH1_HH2_HH3] = dwt2(HH1_HH2, 'db1');
Please! Help me with this. Thanks lots!

Réponse acceptée

Subhadeep Koley
Subhadeep Koley le 5 Fév 2020
Basically dwt2() applies 2-D discreet wavelet transformation on the image and provides the approximation and detail coefficients matrices directly. Whereas, wavedec2() only provides the wavelet decomposition vector and the bookkeeping matrix, which contains the number of coefficients by level and orientation. And you can to get approximation and detail coefficients matrices from the wavelet decomposition vector and the bookkeeping matrix using the detcoef2() and appcoef2() function.
Exact same approximation and detail coefficients matrices can be generated using any of those (dwt2 or wavedec2) functions. See the example below
close all; clc;
% Decomposition using wavedec2 and appcoef2
load woman;
[c, s] = wavedec2(X, 1, 'db1');
A1 = appcoef2(c, s, 'db1', 1);
figure; imshow(A1, []); title('Using wavedec2 and appcoef2');
% Decomposition using dwt2
load woman;
[A2, ~, ~, ~] = dwt2(X, 'db1');
figure; imshow(A2, []); title('Using dwt2');
% Difference image between A1 and A2
diffImage = imabsdiff(A1, A2);
figure; imshow(diffImage, []); title('Difference Image');
Now, here is an example how you can display different sub-bands at different wavelet decomposition levels.
clc; close all;
load woman;
[c, s] = wavedec2(X, 3, 'haar');
% Extract the level 1 approximation and detail coefficients.
[H1, V1, D1] = detcoef2('all', c, s, 1);
A1 = appcoef2(c, s, 'haar', 1);
% Display images
figure; subplot(2, 2, 1); imshow(A1, []); title('Approximation Coef. of Level 1');
subplot(2, 2, 2); imshow(H1, []); title('Horizontal Detail Coef. of Level 1');
subplot(2, 2, 3); imshow(V1, []); title('Vertical Detail Coef. of Level 1');
subplot(2, 2, 4); imshow(D1, []); title('Diagonal Detail Coef. of Level 1');
% Extract the level 2 approximation and detail coefficients.
[H2, V2, D2] = detcoef2('all', c, s, 2);
A2 = appcoef2(c, s, 'haar', 2);
% Display images
figure; subplot(2, 2, 1); imshow(A2, []); title('Approximation Coef. of Level 2');
subplot(2, 2, 2); imshow(H2, []); title('Horizontal Detail Coef. of Level 2');
subplot(2, 2, 3); imshow(V2, []); title('Vertical Detail Coef. of Level 2');
subplot(2, 2, 4); imshow(D2, []); title('Diagonal Detail Coef. of Level 2');
% Extract the level 3 approximation and detail coefficients.
[H3, V3, D3] = detcoef2('all', c, s, 3);
A3 = appcoef2(c, s, 'haar', 3);
% Display images
figure; subplot(2, 2, 1); imshow(A3, []); title('Approximation Coef. of Level 3');
subplot(2, 2, 2); imshow(H3, []); title('Horizontal Detail Coef. of Level 3');
subplot(2, 2, 3); imshow(V3, []); title('Vertical Detail Coef. of Level 3');
subplot(2, 2, 4); imshow(D3, []); title('Diagonal Detail Coef. of Level 3');
Hope this helps!
  1 commentaire
WanYu
WanYu le 5 Fév 2020
Hi,
Thanks for the reply, it do helps! However, if I wish to change the value in one of the sub-bands aka do encryption, how can I achieve that?

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by