You are on page 1of 43

C ODING THE H AAR WAVELET T RANSFORM

Catherine Bénéteau, Caroline Haddad,


David Ruch and Patrick J. Van Fleet

Department of Mathematics & Statistics


University of South Florida
Tampa, FL USA

PREP - Wavelet Workshop, 2009

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 1/9
T ODAY ’ S S CHEDULE

T ODAY ’ S S CHEDULE

9:00-9:15 Welcome, Introductions


9:15-10:15 Lecture One: Why Wavelets?
10:15-10:30 Coffee Break (SCA 202)
10:30-11:45 Lecture Two: Digital Images
12:00-1:00 Lunch
1:30-2:45 Lecture Three: The Discrete Haar Wavelet Transform
2:45-3:00 Coffee Break (SCA 202)
3:00-4:15 ⇒Lecture Four: Coding the HWT, Edge Detection

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 2/9
T ODAY ’ S S CHEDULE

O UTLINE

T ODAY ’ S S CHEDULE

C ODING THE H AAR T RANSFORM


Implementing WN
Implementing WNT
Coding the 2D Transform

I N THE C LASSROOM
Teaching Ideas
Computer Usage

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 3/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WN

C ODING THE H AAR T RANSFORM


I MPLEMENTING WN

I The natural inclination when coding the HWT is to simply write a


loop and compute the lowpass portion and the highpass portion in
the same loop.

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 4/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WN

C ODING THE H AAR T RANSFORM


I MPLEMENTING WN

I The natural inclination when coding the HWT is to simply write a


loop and compute the lowpass portion and the highpass portion in
the same loop.
I This bogs down in Mathematica and is also difficult to generalize
when we consider longer filters.

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 4/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WN

C ODING THE H AAR T RANSFORM


I MPLEMENTING WN

I The natural inclination when coding the HWT is to simply write a


loop and compute the lowpass portion and the highpass portion in
the same loop.
I This bogs down in Mathematica and is also difficult to generalize
when we consider longer filters.
I If we look at the lowpass portion of the transform, Hv, we can see
a better way to code things.

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 4/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WN

C ODING THE H AAR T RANSFORM


I MPLEMENTING WN

Consider H v when v ∈ R8 . We have

v1
 
 v2 
 1 1
    
0 0 0 0 0 0
2 2
 v3  v1 + v2
 0 0 1 1 0 0 0 0  
 
v4  1  v3 + v4 
Hv=
 2 2  · =  
0 0 0 0 12 12 0 0   v5  2  v5 + v6


0 0 0 0 0 0 21 12 
 v6 
 v7 + v8
 v7 
v8

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 4/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WN

C ODING THE H AAR T RANSFORM


I MPLEMENTING WN

If we rewrite this, we have


   
v1 + v2 v1 v2
1
 
1 v3 + v4   v3 v4 
· 2
Hv=  =
1 = Vh
2 v5 + v6
   v5 v6  2
v7 + v8 v7 v8

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 4/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WN

C ODING THE H AAR T RANSFORM


I MPLEMENTING WN

In a similar way we see that

v1
 
 v2 
− 12 12
    
0 0 0 0 0 0  v3  −v1 + v2
 0 0 −1 1
 
0 0 0 0  v4  1  −v3 + v4 
Gv =  2 2 · =  
 0 0 0 0 − 21 12 0 0   v5  2  −v5 + v6


0 0 0 0 0 0 − 21 12 
 v6 
 −v7 + v8
 v7 
v8

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 4/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WN

C ODING THE H AAR T RANSFORM


I MPLEMENTING WN

Rewriting gives
   
−v1 + v2 v1 v2  1 
1 −v3 + v 4
  v3
 · −2 = Vg
v4 
Gv =  =
1
2  −v5 + v6   v5 v6  2
−v7 + v8 v7 v8

So all we need to do to compute Wn v is to create V , multiply it with h


and g, and join to the two blocks together!

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 4/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WN

C ODING THE H AAR T RANSFORM


I MPLEMENTING WN

Here is some Matlab code to do it:

function y=MyHWT1D1(v)
V=reshape(v,2,length(v)/2)’;
lp=V*[1/2,1/2];
hp=V*[-1/2,1/2];
y=[lp;hp];

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 4/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WN

C ODING THE H AAR T RANSFORM


I MPLEMENTING WN

And some Mathematica code as well:

MyHWT1D1[v_]:=Module[{V,lp,hp,y},
V=Partition[v,2];
lp=V.{1/2,1/2};
hp=V.{-1/2,1/2};
y=Join[lp,hp];
Return[y];
];

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 4/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WNT

C ODING THE H AAR T RANSFORM


I MPLEMENTING WNT

I Writing the code for the inverse transform is a bit trickier.

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 5/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WNT

C ODING THE H AAR T RANSFORM


I MPLEMENTING WNT

I Writing the code for the inverse transform is a bit trickier.


I Now the computation is
h i
WNT v = H T GT v

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 5/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WNT

C ODING THE H AAR T RANSFORM


I MPLEMENTING WNT

I Writing the code for the inverse transform is a bit trickier.


I Now the computation is
h i
WNT v = H T GT v

I Let’s again look at a vector v ∈ R8 and consider the product W8T v:

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 5/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WNT

C ODING THE H AAR T RANSFORM


I MPLEMENTING WNT

1 0 0 0 −1 0 0 0 v1
   

 1 0 0 0 1 0 0 0  
  v2 


 0 1 0 0 0 −1 0 0  
  v3 

T
 0 1 0 0 0 1 0 0  
· v4 
W8 v =  

 0 0 1 0 0 0 −1 0  
  v5 


 0 0 1 0 0 0 1 0  
  v6 

 0 0 0 1 0 0 0 −1   v7 
0 0 0 1 0 0 0 1 v8

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 5/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WNT

C ODING THE H AAR T RANSFORM


I MPLEMENTING WNT

or

v1 − v5
 

 v1 + v5 


 v2 − v6 

T
 v2 + v6 
W8 v =  

 v3 − v7 


 v3 + v7 

 v4 − v8 
v4 + v8

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 5/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WNT

C ODING THE H AAR T RANSFORM


I MPLEMENTING WNT

I The matrix V takes a bit different shape this time.

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 5/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WNT

C ODING THE H AAR T RANSFORM


I MPLEMENTING WNT

I The matrix V takes a bit different shape this time.


I Now V is  
v1 v5
 v2 v6 
V =
 v3

v7 
v4 v8

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 5/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WNT

C ODING THE H AAR T RANSFORM


I MPLEMENTING WNT

I The matrix V takes a bit different shape this time.


I Now V is  
v1 v5
 v2 v6 
V =
 v3

v7 
v4 v8
I We need to dot V with both h = [1, 1]T and g = [1, −1]T but then
intertwine the results.

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 5/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WNT

C ODING THE H AAR T RANSFORM


I MPLEMENTING WNT

Given v = (v1 , . . . , v8 )T , how can we use Matlab/Mathematica


commands to form  
v1 v5
 v2 v6 
V = v3 v7 

v4 v8

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 5/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WNT

C ODING THE H AAR T RANSFORM


I MPLEMENTING WNT

Answer (Matlab):

V = reshape(v,length(v)/2,2);

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 5/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WNT

C ODING THE H AAR T RANSFORM


I MPLEMENTING WNT

Answer (Mathematica):

V = Transpose[Partition[v,Length[v]/2]];

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 5/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WNT

C ODING THE H AAR T RANSFORM


I MPLEMENTING WNT

We can compute
   
v1 + v5 v1 − v5
 v2 + v6   v2 − v6 
Vh =  
 v3 + v7  and Vg =  
 v3 − v7 
v4 + v8 v4 − v8

How do we form W8T v from this?

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 5/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WNT

C ODING THE H AAR T RANSFORM


I MPLEMENTING WNT

Answer (Matlab):

reshape([V*g V*h]’,1,length(v))’;

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 5/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WNT

C ODING THE H AAR T RANSFORM


I MPLEMENTING WNT

Answer (Mathematica):

Flatten[Transpose[{ V g, V h } ]];

or one I just learned:

Riffle[ Vg, Vh ];

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 5/9
C ODING THE H AAR T RANSFORM I MPLEMENTING WNT

C ODING THE H AAR T RANSFORM


I MPLEMENTING WNT

Let’s have a look at the Mathematica notebook

HaarTransform1D.nb

to see how to code the one–dimensional HWT and its inverse.

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 5/9
C ODING THE H AAR T RANSFORM C ODING THE 2D T RANSFORM

2D H AAR T RANSFORM
C ODING THE 2D T RANSFORM

I Coding the 2D Haar transform is easy - we already have a routine


that will apply the HWT to each column of A,

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 6/9
C ODING THE H AAR T RANSFORM C ODING THE 2D T RANSFORM

2D H AAR T RANSFORM
C ODING THE 2D T RANSFORM

I Coding the 2D Haar transform is easy - we already have a routine


that will apply the HWT to each column of A,
I We can easily write a routine to compute C = WN A. Let’s call this
routine W.

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 6/9
C ODING THE H AAR T RANSFORM C ODING THE 2D T RANSFORM

2D H AAR T RANSFORM
C ODING THE 2D T RANSFORM

I Coding the 2D Haar transform is easy - we already have a routine


that will apply the HWT to each column of A,
I We can easily write a routine to compute C = WN A. Let’s call this
routine W.
I Our goal is to compute B = WN AWNT = CWNT .

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 6/9
C ODING THE H AAR T RANSFORM C ODING THE 2D T RANSFORM

2D H AAR T RANSFORM
C ODING THE 2D T RANSFORM

I Coding the 2D Haar transform is easy - we already have a routine


that will apply the HWT to each column of A,
I We can easily write a routine to compute C = WN A. Let’s call this
routine W.
I Our goal is to compute B = WN AWNT = CWNT .
I It turns out that writing code for CWNT is a bit tedious, but if we use
some linear algebra . . .

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 6/9
C ODING THE H AAR T RANSFORM C ODING THE 2D T RANSFORM

2D H AAR T RANSFORM
C ODING THE 2D T RANSFORM

I If we transpose both sides of B = CWNT , we have

B T = WN C T

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 6/9
C ODING THE H AAR T RANSFORM C ODING THE 2D T RANSFORM

2D H AAR T RANSFORM
C ODING THE 2D T RANSFORM

I If we transpose both sides of B = CWNT , we have

B T = WN C T

I So we can simply apply W to C T and transpose the result.

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 6/9
C ODING THE H AAR T RANSFORM C ODING THE 2D T RANSFORM

2D H AAR T RANSFORM
C ODING THE 2D T RANSFORM

I If we transpose both sides of B = CWNT , we have

B T = WN C T

I So we can simply apply W to C T and transpose the result.


I One student wasn’t so sure about this . . .

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 6/9
C ODING THE H AAR T RANSFORM C ODING THE 2D T RANSFORM

2D H AAR T RANSFORM
C ODING THE 2D T RANSFORM

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 6/9
I N THE C LASSROOM T EACHING I DEAS

I N THE C LASSROOM
T EACHING I DEAS

I The students really enjoy the material in this chapter. It is quite


straightforward and ties together everything new we’ve done to
date.

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 7/9
I N THE C LASSROOM T EACHING I DEAS

I N THE C LASSROOM
T EACHING I DEAS

I The students really enjoy the material in this chapter. It is quite


straightforward and ties together everything new we’ve done to
date.
I We have them look at the entropy of particular vectors when
processed by the Haar transform. This gives them some idea of
the potential for wavelet-based compression.

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 7/9
I N THE C LASSROOM C OMPUTER U SAGE

I N THE C LASSROOM
C OMPUTER U SAGE

I As you might imagine, we do lots of coding in this chapter.

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 8/9
I N THE C LASSROOM C OMPUTER U SAGE

I N THE C LASSROOM
C OMPUTER U SAGE

I As you might imagine, we do lots of coding in this chapter.


I We let the students work in pairs and they write code for the Haar
transform and its inverse (1D and 2D) as well as iterated versions.

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 8/9
I N THE C LASSROOM C OMPUTER U SAGE

I N THE C LASSROOM
C OMPUTER U SAGE

I As you might imagine, we do lots of coding in this chapter.


I We let the students work in pairs and they write code for the Haar
transform and its inverse (1D and 2D) as well as iterated versions.
I They can get pretty frustrated with Mathematica at this point - it is
good to show them some simple debugging techniques.

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 8/9
I N THE C LASSROOM C OMPUTER U SAGE

I N THE C LASSROOM
C OMPUTER U SAGE

I We let them use their own images/audio files (sometimes


dangerous).

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 8/9
I N THE C LASSROOM C OMPUTER U SAGE

I N THE C LASSROOM
C OMPUTER U SAGE

I We let them use their own images/audio files (sometimes


dangerous).
I To test their iterated 1D inverse, they must download an audio clip
from the course web site that has been transformed p times,
guess at p, and then apply their inverse to guess the movie clip.

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 8/9
T ODAY ’ S S CHEDULE

9:00-9:15 Welcome, Introductions


9:15-10:15 Lecture One: Why Wavelets?
10:15-10:30 Coffee Break (SCA 202)
10:30-11:45 Lecture Two: Digital Images
12:00-1:00 Lunch
1:30-2:45 Lecture Three: The Discrete Haar Wavelet Transform
2:45-3:00 Coffee Break (SCA 202)
3:00-4:15 Lecture Four: Coding the HWT, Edge Detection
⇒Dinner and free time

T UESDAY, 2 J UNE , 2009 (L ECTURE 4) C ODING THE HWT PREP 2009 9/9

You might also like