Beruflich Dokumente
Kultur Dokumente
This numerical tour explores 2-D multiresolution analysis with the Haar transform. It
was introduced in 1910 by Haar [Haar1910] and is arguably the first example of
wavelet basis.
Contents
Installing toolboxes and setting up the path.
Forward 2-D Haar transform
Inverse 2-D Haar transform.
Haar Linear Approximation
Haar Non-linear Approximation
Bibliography
You need to unzip these toolboxes in your working directory, so that you have
toolbox_signal and toolbox_general in your directory.
For Scilab user: you must replace the Matlab comment '%' by its Scilab counterpart
'//'.
Recommandation: You should create a text file named for instance numericaltour.sce
(in Scilab) or numericaltour.m (in Matlab) to write all the Scilab/Matlab command you
want to execute. Then, simply run exec('numericaltour.sce'); (in Scilab) or numericaltour;
(in Matlab) to run the commands.
getd('toolbox_signal/');
getd('toolbox_general/');
name = 'hibiscus';
f = load_image(name,n);
f = rescale( sum(f,3) );
The Haar transform operates over J = log2 (n) 1 scales. It computes a series of
n n
coarse scale and fine scale coefficients aj , djH , djV , djD R j j where Nj = 2 .
j
J = log2(n)-1;
Note that the set of coarse scale coefficients (aj )j>0 are not stored.
The first step apply a vertical transformtion, which corresponds to applying a 1-D Haar
~ ~
transform on each column, i.e. it computes d j , a j from aj+1 as, for all
= 0, , 2j+1 1 and k = 0, , 2j 1 ,
clf;
imageplot(f,'Original image',1,2,1);
imageplot(haarV(f),'Vertical transform',1,2,2);
One then apply the same 1-D horizontal transform to both ~ , d~ to obtain
a the
j j
resulting matrices at scale j , i.e. to compute aj , dj , dj , djD as, for
H V all
j
, k = 0, ,2 1 ,
~ [k, 2] + a
a ~ [k, 2 + 1] ~ [k, 2] a
a ~ [k, 2 + 1]
j j j j
aj [k, ] = and djH [k, ] = .
2 2
~ ~ ~ ~
d j [k, 2] + d j [k, 2 + 1] d j [k, 2] d j [k, 2 + 1]
dj [k, ] =
V
and djD [k, ] = .
2 2
Shortcut for the vertical transform.
haarH = @(a)haarV(a')';
haar = @(a)haarH(haarV(a));
clf;
imageplot(f,'Original image',1,2,1);
subplot(1,2,2);
plot_wavelet(haar(f),log2(n)-1); title('Transformed');
The output of the forward transform is stored in the variable fw. At a given iteration
indexed by a scale , it will store in fw(1:2^(j+1),1:2^(j+1)) the variable aj+1 .
j = J;
fw = f;
At iteration indexed by j, select the sub-part of the signal containing aj+1 , and apply
it the Haar operator.
fw(1:2^(j+1),1:2^(j+1)) = haar(fw(1:2^(j+1),1:2^(j+1)));
Exercice 1: (check the solution) Implement a full wavelet transform that extract
iteratively wavelet coefficients, by repeating these steps. Take care of choosing the
correct number of steps.
exo1;
Check that the transform is orthogonal, which means that the energy of the coefficient
is the same as the energy of the signal.
Should be 0: 0.000.
clf;
subplot(1,2,1);
imageplot(f); title('Original');
subplot(1,2,2);
plot_wavelet(fw, 1); title('Transformed');
Inverse 2-D Haar transform.
The backward transform computes a signal f1 = H (h) from a set of coefficients
h= (dj )j, {a0 }
The inverse transform starts from j=0 , and computes aj+1 from the knowledge of
aj , dj by first inverting the horizontal transform, for all k, = 0, , 2j 1 ,
aj [k, ] + aH
j [k, ] aj [k, ] aH
j [k, ]
~ [k, 2] =
a and ~ [k, 2 + 1] =
a
j j
2 2
Then one invert the vertical transform, for all k = 0, , 2j 1 and for all
j+1
= 0, ,2 1
~ [k, ] + d~ [k, ]
a ~ [k, ] d~ [k, ]
a
j j j j
aj [2k, ] = and aj [2k + 1, ] =
2 2
ihaarH = @(a,d)ihaarV(a',d')';
Shortcut to invert horizontal and then vertical transforms. This defines the invert of the
Haar transform.
Initialize the signal to recover f1 as the transformed coefficient, and select the
smallest possible scale j = 0 .
f1 = fw;
j = 0;
Exercice 2: (check the solution) Write the inverse wavelet transform that computes f1
from coefficients fW.
exo2;
Should be 0: 0.000.
Cut-off scale.
j = J-1;
exo3;
fT = H ST H(f)
where ST is the hard tresholding operator
xi if |xi | > T ,
ST (x)i = { .
0 otherwise.
S = @(x,T) x .* (abs(x)>T);
T = .1;
fwT = S(fw,T);
Display the coefficients before and after thresholding.
clf;
subplot(1,2,1);
plot_wavelet(fw); axis('tight'); title('Original coefficients');
subplot(1,2,2);
plot_wavelet(fwT); axis('tight'); title('Thresholded coefficients');
Exercice 4: (check the solution) Find the threshold T so that the number of remaining
coefficients in fwT is a fixed number m . Use this threshold to compute fwT and then
display the corresponding approximation f1 of f . Try for an increasing number m of
coeffiients.
exo4;
Bibliography
[Haar1910] Haar A. Zur Theorie der orthogonalen Funktionensysteme,
Mathematische Annalen, 69, pp 331-371, 1910.