how to apply dwt and inverse dwt for an image

30 ビュー (過去 30 日間)
Sathish Kumar
Sathish Kumar 2014 年 2 月 6 日
コメント済み: Toon Tiam 2023 年 6 月 7 日
hi all..im writing a code for getting an image and perform dwt for one level to get 4 sub bands and apply inverse dwt to reconstruct the image. The LL band should contain the intensity imformation of the image but for me the figure for LL is plain white and when tried for reconstructing image iam getting same white screen image. i am not sure what was the mistake i have done.. the code i have written is shown below,
clear all;
close all;
i=imread('image22.jpg');
sX=size(i);
[LL,LH,HL,HH]=dwt2(i,'db1');
figure(1)
subplot(2,2,1);imshow(LL);title('LL band of image');
subplot(2,2,2);imshow(LH);title('LH band of image');
subplot(2,2,3);imshow(HL);title('HL band of image');
subplot(2,2,4);imshow(HH);title('HH band of image');
X = idwt2(LL,LH,HL,HH,'db1',sX);
figure(2)
imshow(X);
kindly help me to fix the same.
  6 件のコメント
mariena aloor
mariena aloor 2019 年 4 月 10 日
Hai Sir
I want to take the features from blood smear image.So how i will use discrete wavelet transform for feature extraction.
I want the code for second level dwt only for the LL band.Kindly give me the matlab code for feature extraction using discrete wavelet transform my mail id is : aloormariena@gmail.com

サインインしてコメントする。

採用された回答

Nawin K Sharma
Nawin K Sharma 2017 年 9 月 25 日
編集済み: Nawin K Sharma 2017 年 9 月 25 日
dwt2 results are in double (Integer) format. For double format, imshow treats non zero values as White and Zero values as Black. That's why you are getting full white screen.
Try this modification in your code
LL=uint8(LL);
uint8 converts double to unsigned integer of 8 bit format,which is used in gray scale or colored images.
If you want o retain double format, use this
imshow(uint8(LL))
  7 件のコメント
lavanya valli
lavanya valli 2020 年 3 月 10 日
sir plz send me the 2 level DWT for grey scale image .......vallilavanya04@gmail.com
Toon Tiam
Toon Tiam 2023 年 6 月 7 日
Had the same issues and your solution solveed it! Thank you!

サインインしてコメントする。

その他の回答 (9 件)

chaitanya goteti
chaitanya goteti 2015 年 9 月 8 日
Use uint8 while displaying the bands, like imshow(uint8(LL)). Hope this helps
  1 件のコメント
Afeza Ajirah
Afeza Ajirah 2017 年 3 月 10 日
i tried this and it appears like this

サインインしてコメントする。


umme kulsum
umme kulsum 2017 年 3 月 31 日
You can use imagesc instead of imshow command

Wayne King
Wayne King 2014 年 2 月 6 日
編集済み: Wayne King 2014 年 2 月 6 日
Are you sure it is just not the scaling of the image in imshow() that is causing you problems?
For example, note:
load woman;
sX = size(X);
[LL,LH,HL,HH]=dwt2(X,'db1');
Xrec = idwt2(LL,LH,HL,HH,'db1',sX);
max(max(abs(X-Xrec)))
The above shows perfect reconstruction. The maximum absolute value of the difference between elements in the original matrix and the reconstructed matrix is on the order of 10^{-13}
  4 件のコメント
shaghayegh alijanian
shaghayegh alijanian 2015 年 7 月 23 日
i get this error would you please help me? Error using - Integers can only be combined with integers of the same class, or scalar doubles.
Error in jpg4 (line 9) max(max(abs(X) - abs(Xrec)))
Walter Roberson
Walter Roberson 2017 年 1 月 24 日
max(max(double(abs(X)) - double(abs(Xrec))))

サインインしてコメントする。


Karbala'a Unvi. Science
Karbala'a Unvi. Science 2014 年 5 月 3 日
Hi every one,... I worked on your code and I did some modification on it and I made it work because I have the same project on my PHD project so if you want the modified code I can send it to you when you send me your e-mail. and give me your opinion. yours Zeyad
  3 件のコメント
Tapaswini Hansdah
Tapaswini Hansdah 2020 年 4 月 17 日
sir can you send me aswell ? tapaswinihansdah1996@gmail.com
Madhu Oruganti
Madhu Oruganti 2020 年 5 月 26 日
Dear sir, I am also working for my phD course can you please share the code at oruganti.madhu@gmail.com

サインインしてコメントする。


Sam
Sam 2014 年 11 月 24 日
At the end of the program just modify it as "imshow(X,[])", and it will work.
  1 件のコメント
Afeza Ajirah
Afeza Ajirah 2017 年 3 月 10 日
I tried it, but it still display plain white. Hmm, anyone can help?

サインインしてコメントする。


Ahmad Shaheen
Ahmad Shaheen 2016 年 12 月 17 日
After i=imread('image22.jpg'); insert the following: i=im2double(i); and it will works.

Harmeet Kaur
Harmeet Kaur 2018 年 1 月 2 日
編集済み: Harmeet Kaur 2018 年 1 月 2 日
hello everyone the above code is not giving the reconstructed image. the output of reconstruction is as follows:
  4 件のコメント
Walter Roberson
Walter Roberson 2018 年 5 月 2 日
The line
max(max(abs(i-Xrec)));
tries to calculate something abut then it throws away the results of the calculation. The easiest repair is to comment out the line.
Karbala'a Unvi. Science
Karbala'a Unvi. Science 2020 年 1 月 29 日
Dear Sir,
Try this code and tell me is it working ornot..
clc, close all;
clear all;
X=imread('3.bmp');
imshow(X);
X= double(X);
i=imresize(X,[512 512]);
figure(1);
imshow(i);
sX=size(X);
[LL,LH,HL,HH]= dwt2(X,'db1');
figure(2)
subplot(2,2,1);imshow(LL);title('LL band of image');
subplot(2,2,2);imshow(LH);title('LH band of image');
subplot(2,2,3);imshow(HL);title('HL band of image');
subplot(2,2,4);imshow(HH);title('HH band of image');
%%
Xrec=idwt2(LL,LH,HL,HH,'db1',sX);
% sx=size(X)
% A1=idwt2(LL,[],[],[],'db1',sX);
% H1=idwt2([],LH,[],[],'db1',sX);
% V1=idwt2(LL,[],HL,[],'db1',sX);
% D1=idwt2(LL,[],[],HH,'db1',sX);
max(max(abs(X-Xrec)))
figure(3);
imshow(uint8(Xrec));

サインインしてコメントする。


Ankita Bansal
Ankita Bansal 2018 年 6 月 1 日
編集済み: Ankita Bansal 2018 年 6 月 1 日
Hi Fatima, in your code the sizes of X and i are not equal and you are using X as an input to dwt function. Hence whatever calculation will be done after [LL, LH, HL, HH] = dwt2(X,'db1'); will use X. So, when you try to calculate inverse dwt, the data you will get will be of same size as that of X. Also, the datatype of output of idwt is double whereas i is of uint8 datatype. So, the first reason of getting error is different data type and the second reason is size. To check whether the output you are getting is correct or not you can write max(max(abs(X-uint8(Xrec)))) instead of max(max(abs(i-Xrec))).
if true
% code
end
close all;
clear all;
X=imread('image.png');
imshow(X);
i=imresize(X,[512 512]);
figure;
imshow(i);
sX=size(X);
[LL,LH,HL,HH]= dwt2(X,'db1');
Figure;
subplot(2,2,1);imshow(LL);title('LL band of image');
subplot(2,2,2);imshow(LH);title('LH band of image');
subplot(2,2,3);imshow(HL);title('HL band of image');
subplot(2,2,4);imshow(HH);title('HH band of image');
Xrec=idwt2(LL,LH,HL,HH,'db1',sX);
max(max(abs(X-uint8(Xrec))));
figure;
imshow(Xrec);
Hope this helps
  5 件のコメント
Rahul Kumar Singh
Rahul Kumar Singh 2018 年 10 月 4 日
hello, i am currently working on image steganography in transform domain. As i am new to this i only the theoritical part . my question is after getting the subbands LL,LH,HL,HH how do we obtain the wavelet coeffients so that we can divide them into blocks of four and then choose m\2 blocks out of it(where m is the length of the secret message(in bits) to be embedded ) so that 2 bits can be embedded in each block by pattern matrix method.
i hope you understood my question. any suggestion will help.
Karbala'a Unvi. Science
Karbala'a Unvi. Science 2020 年 1 月 29 日
try this one
clc, close all;
clear all;
X=imread('3.bmp');
imshow(X);
X= double(X);
i=imresize(X,[512 512]);
figure(1);
imshow(i);
sX=size(X);
[LL,LH,HL,HH]= dwt2(X,'db1');
figure(2)
subplot(2,2,1);imshow(LL);title('LL band of image');
subplot(2,2,2);imshow(LH);title('LH band of image');
subplot(2,2,3);imshow(HL);title('HL band of image');
subplot(2,2,4);imshow(HH);title('HH band of image');
%%
Xrec=idwt2(LL,LH,HL,HH,'db1',sX);
% sx=size(X)
% A1=idwt2(LL,[],[],[],'db1',sX);
% H1=idwt2([],LH,[],[],'db1',sX);
% V1=idwt2(LL,[],HL,[],'db1',sX);
% D1=idwt2(LL,[],[],HH,'db1',sX);
max(max(abs(X-Xrec)))
figure(3);
imshow(uint8(Xrec));

サインインしてコメントする。


pallavi singh
pallavi singh 2020 年 8 月 11 日
SIr,
Can u tell me the code of dwt ?
  4 件のコメント
Walter Roberson
Walter Roberson 2020 年 8 月 12 日
You have a small number of choices:
  1. You can apply dwt for every row (of every color plane) independently;
  2. You can apply dwt for every column (of every color plane) independently;
  3. You can apply dwt for every row (of every color plane) independently, and transpose the result and apply dwt to every row (of every color plane) of the result. This is similar to the way that fft2() is fft(fft(IMAGE).')
  4. You can apply dwt for every column (of every color plane) independently, and transpose the result and apply dwt to every column (of every color plane) of the result. This is similar to the way that fft2() is fft(fft(IMAGE).'). In theory this should give the same result as #3
  5. You can reshape the image into a single continuous row and apply dwt to that
  6. You can reshape the image into a single continuous column and apply dwt to that
To be clear: dwt can only be used on one vector at a time, so you cannot just apply it to a 2D or 3D (RGB) array.
See also: dwt2()
pallavi singh
pallavi singh 2020 年 9 月 8 日
Sir , can u tell me the code of 2D-DWT?

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeDiscrete Multiresolution Analysis についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by