Initiation aux ondelettes

Transcription

Initiation aux ondelettes
Département Génie Mathématique et Modélisation
4ème année
2014-2015
Initiation aux ondelettes
Christophe Rabut
1
2
Table des matières
1 Préliminaires
1.1 Cadre et méthode de cet enseignement . . . . . .
1.1.1 Pourquoi “ondelettes de Haar” ? . . . . . .
1.1.2 Méthode de travail et rôle du document .
1.2 Compétences à posséder à la fin de cette partie de
1.3 Bibliographie . . . . . . . . . . . . . . . . . . . .
. . .
. . .
. . .
l’UF
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2 Introduction aux ondelettes et à l’analyse multirésolution
2.1 Principe de base . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Point de départ . . . . . . . . . . . . . . . . . . . . .
2.1.2 Avançons un peu : première étape ! . . . . . . . . .
2.1.3 Et maintenant on recommence ! . . . . . . . . . . . .
2.1.4 “Analyse en temps-fréquence” . . . . . . . . . . . . .
2.1.5 Notion de “raffinement” et de “détails” . . . . . . . .
2.2 Codage-décodage, décomposition-reconstruction... . . . . . .
2.2.1 D’abord à la main . . . . . . . . . . . . . . . . . . .
2.2.2 Maintenant le cas général . . . . . . . . . . . . . . .
2.2.3 Représentations graphiques . . . . . . . . . . . . . .
2.3 Compression d’un signal . . . . . . . . . . . . . . . . . . . .
2.4 Dimension 2 . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5 Ondelettes continues . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
5
6
6
7
.
.
.
.
.
.
.
.
.
.
.
.
.
9
10
10
11
13
14
15
15
16
16
17
17
18
19
3 Quelques solutions, figures...
20
4 Travaux Pratiques
4.1 Mise en oeuvre en dimension 1 . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Plusieurs possibilités en dimension 2 . . . . . . . . . . . . . . . . . . . . . .
4.3 Approfondissement : utilisation de boite à outils, internet... . . . . . . . . . .
26
26
26
26
5 Pour aller plus loin...
5.1 Au delà de Haar... . . . . . . .
5.2 Un mot sur les splines linéaires
5.3 Fourier : on aime encore ! . . . .
5.4 Analyse Multiresolution (AMR)
5.5 Dimension 2 . . . . . . . . . . .
5.6 Utilisation . . . . . . . . . . . .
27
27
28
29
29
30
30
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6 Bureau d’études, travail à faire
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
31
3
4
Chapitre 1
Préliminaires
1.1
1.1.1
Cadre et méthode de cet enseignement
Pourquoi “ondelettes de Haar” ?
Ce document est un support de cours pour une brève introduction (7h45 au total, dont
2h45 de TP) aux ondelettes, en 4ème année GMM. La courte durée de cet enseignement
(7h45 au total, dont 2h45 de TP) impose que ce ne soit qu’une introduction, qui a pour
but d’une part d’avoir un “information” alimentant votre culture générale, d’autre part de
vous permettre d’entrer dans ce monde merveilleux des ondelettes et de leurs applications
(essentiellement filtrage et compression), et, j’espère, d’acquérir une certaine autonomie pour
aller plus loin. Les livres indiqués en bibliographie sont des indications qui vous permettent
d’aller plus loin. Par ailleurs, vous trouverez facilement beaucoup d’informations sur les
ondelettes sur internet.
De ce fait, l’essentiel de cet enseignement se limite aux ondelettes de Haar, les plus
simples à comprendre comme à manipuler. Ce ne sont clairement pas les plus utilisées,
car elles présentent deux défauts essentiels (et sans doute quelques autres !) : comme elles
sont discontinues, l’espace engendré approche mal les fonctions continues, et les vitesses de
convergence sont faibles, on a beaucoup mieux avec les ondelettes plus utilisées. J’espère
cependant, par cet enseignement, vous faire toucher du doigt (et apprécier) cette nouvelle
approche, hiérarchique, dite en “temps-fréquence”, percevoir une nouvelle démarche tant
numérique qu’analytique (“analyse multi-résolution”).
Un TP vous permettra de concrétiser cela... vous le ferez individuellement, mais je vous
encourage à parler avec vos camarades lorsque vous avez un difficulté que vous ne savez
comment résoudre. Je suis bien sûr aussi là pour vous aider autant que nécessaire.
Mentionnons dès maintenant que les “autres” ondelettes ne présentent pas les inconvénients
mentionnés ci-dessus, mais elles ont l’inconvénient d’avoir un support plus large, ce qui impose (sauf exception) de travailler de −∞ à +∞, et donc, lorsque l’on est (comme toujours
dans la pratique) sur un domaine borné, nécessitent de prolonger d’une façon ou d’une autre
le support, ce qui a comme conséquence de générer des “effets de bords” génants et difficiles
à gérer.
5
1.1.2
Méthode de travail et rôle du document
Ce cours est une “ cours problématisé”, c’est à dire qu’il est, pour l’essentiel, transformé
en un problème. Il est destiné à être travaillé, morceau par morceau, en trois temps :
D’abord en travail autonome (“à la maison”) pour “ dégrossir” les questions, percevoir ce qui est important, ce qui est difficile, acquérir le contexte ; à ce stade examinez les
questions qui vous sont posées, cherchez à y répondre, à démontrer ce qui est demandé, mais
n’insistez pas trop si cela vous est trop difficile.
Puis, pendant les séances, en équipes (taille optimale : quatre étudiants) : vous
commentez ensemble ce que vous avez appris, examinez les difficultés, vous répondez aux
questions des autres membres de l’équipe, cherchez ensemble à résoudre les points qui ont
posé difficulté à tous (en général vous arrivez tout à fait à résoudre ces problèmes), et, si
besoin, l’équipe formule une question à l’enseignant, qui, bien sûr, vous aide à résoudre ce
problème.
Enfin, bien sûr, pour une bonne assimilation sur le long terme, une reprise en travail
personnel de ce qui a été acquis, de ce que le groupe vous a apporté, est nécessaire. A noter que
cette dernière phase est grandement facilitée par le fait que vous avez vous-même travaillé,
discuté au cours des phases précédentes ; elle devient de ce fait beaucoup moins rébarbative,
mais ne la négligez pas, elle est importante pour asseoir solidement votre connaissance.
A noter que, pour vous faciliter la tâche si vous ne suivez pas ces séances (étudiants à
l’étranger par exemple), ou vous dépanner en cas de besoin (n’abusez pas), quelques solutions
et graphiques sont apportés au paragraphe 3. Par ailleurs ce polycopié, ainsi que divers documents pédagogiques de ma création est accessible sur ma page web : http://www-gmm.insa-toulouse.f
.
.
.
Enfin, ce polycopié est bien sûr perfectible. Merci de m’indiquer non seulement les erreurs
et coquilles qu’il comporte certainement, mais aussi tout type d’amélioration de fond que vous
estimeriez pertinent.
Christophe Rabut
1.2
Compétences à posséder à la fin de cette partie de
l’UF
1. Avoir compris, savoir expliquer et utiliser le principe de la décomposition en “tempsfréquence”, et donc d’une base de fonctions associées, (“ondelettes”). Comprendre l’intérêt
de l’orthogonalité L2 de cette base.
2. Connaı̂tre et savoir manipuler les “ondelettes de Haar”, que ce soit pour décomposer une
fonction continue ou pour “coder” un signal, éventuellement le compresser, et le reconstruire
à partir des données codées. Savoir que les ondelettes de Haar sont peu utilisées et que
d’autres ondelettes sont plus performantes pour la plupart des applications.
3. Savoir lire un graphe de coefficients d’ondelettes, à une et à deux variables.
4. Être autonome pour lire un document utilisant (ou présentant) des ondelettes, à une ou
plusieurs variables, et savoir utiliser ou en restituer l’essentiel.
5. Programmer correctement en matlab, y compris en vectoriel à chaque fois que possible.
Commentaires clairs et appropriés, choix des noms de variables, utilisation de fonctions
internes et externes, dialogues opérateur, graphiques appropriés (avec titres et valeurs des
paramètres)...
6
1.3
Bibliographie
Ces livres seront sous peu disponibles à Bib’INSA
Un très bon livre pour commencer :
Albert Boggess, Francis J. Narcowich, A first course in wavelets with Fourier analysis, 2009,
Wiley, ISBN 978-0-470-43117-7
Un livre de référence, qui contient en particulier la forme explicite de nombreuses ondelettes
très utilisées :
Ingrid Daubeches, 1992 Ten lectures on waveletsSIAM, ISBN 0-89871-274-2
Paul S. Addison, The illustrated Wavelet Transform handbook (introduction Theory and
Applications in Science, Engineering, Medicine and Finance), Editions Taylo §Francis, 2002,
ISBN 0-7503-0692-0
Un livre en français, écrit par un des pionniers des ondelettes :
Stephane Mallat, Une exploration des signaux en ondelettes. Les Editions de l’Ecole
Polytechnique, 2007
Tom H. Koornwinder, Wavelets : An elementary treatment of Theory, and Applications,
World Scientific (Series in Approximations and Decompositions), 1998, ISBN 9810213883
7
8
Chapitre 2
Introduction aux ondelettes et à
l’analyse multirésolution
Cette introduction sera essentiellement travaillée sur le cas particulier des ondelettes
de Haar, situation la plus simple, mais qui devrait permettre de percevoir l’essentiel de la
démarche “ondelettes, multirésolution”. Nous travaillerons tantôt de façon discrète (optique
“signal numérisé”, donc fonction en escalier), tantôt de façon continue (optique analyse fonctionnelle). Ces deux points de vue, bien sûr, se rejoignent à tout instant ! Nous travaillerons
d’abord en dimension 1 (fonctions à une variable), puis en dimension 2 voire 3...
Deux mots d’histoire
Alfréd Haar (1855–1933) est un mathématicien hongrois, surtout connu pour ses travaux
sur les groupes ; il a introduit en particulier la “mesure de Haar” sur les groupes. En 1909
il a créé ce que l’on appelle maintenant l’ondelette de Haar” , à savoir la fonction ψ définie
au §2.1.2 par ψ(t) = 1 si t∈[0 .. 12 [, ψ(t) = −1 si t∈[ 12 .. 1[, ψ(t) = 0 sinon. l’ensemble des
fonctions constituées de ψ, de ses dilatées et de leurs translatées (c’est à dire des fonctions
ψk i présentées au §2.1.3) forment ce que l’on appelle le “système de Haar”.
Au début des années 1980, Yves Meyer (mathématicien français né en 1939), alors à
l’université de Paris-Dauphine, développa la théorie des ondelettes, notamment avec Jean
Morlet, Alex Grossmann, Ingrid Daubechies et Stéphane Mallat. En travaillant dans L2 ,
l’idée de base est de décomposer les fonctions en les “regardant” sur des échelles différentes, la
décomposition à l’échelle d’un niveau donné étant composée de celle à l’échelle immédiatement
au dessus et de “détails” orthogonaux à l’échelle au dessus. Ceci est présenté rapidement au
§5.4.
De très nombreuses applications ont alors été développées grace aux ondelettes, dont la
plus connue est sans doute la compression de fichiers (bien sûr tout le monde ne sait pas
qu’il y a des mathématiques fondamentales dans la norme jpeg 2000).
Un grand nombre de types d’ondelettes ont alors été développées, avec des propriétés
spécifiques (continuité, taille du support, vitesse de convergence), particulièrement à deux
dimensions pour l’analyse d’image (détection de contours, reconnaissance de forme...).
Notations :
.
La notation
:
Le signifie la variable imposée par le contexte : ainsi, si f est une fonction de IR dans IR,
g = f (2 ) signifie la fonction g définie par ∀x ∈ IR , g(x) = f (2x). De même h = f (4 +1) est
la fonction définie par ∀x ∈ IR , h(x) = f (4x+1). Si par contre f est une fonction de IRd dans
IR, g = f (2 ) signifie la fonction g définie par ∀(x, y) ∈ IRd , g(x, y) = f (2(x, y)) = f (2x, 2y)
.
.
.
.
9
Cette notation, courante en analyse fonctionnelle, sera utilisée tout au long de ce document. Pour vous familiariser avec cette notation, faites dès maintenant un graphe représentant
une fonction f quelconque (prenez-là continue), ainsi que la fonction f (2 ) et la fonction
f ( −a). Constatez que f (2 ) correspond à une “compression” d’un facteur 2 de f (et f ( /2)
à une “dilatation” de f ), et f ( − a) à une translation de f . A quoi correspond f (2 − a),
et f (2( − a)) ? Quelle est la différence entre f (2( − a)) et f ( − a) (graphiquement et...
avec des mots !).
.
.
.
.
.
.
.
.
.
Remarquez par ailleurs que si g = 2 f , g est obtenue à partir de f par une dilatation
d’axe Oy et de rapport 2 (“affinité d’axe Oy et de rapport 2”), tandis que si g = f (2 ),
g est obtenue à partir de f par une compression d’axe Ox et de rapport 2 (“affinité d’axe
Ox et de rapport 21 ). De la même façon, constatez que si g = f + a, g est obtenue à partir
de f par une translation de a d’axe Oy tandis que si g = f ( + a), g est obtenue à partir
de f par une translation de −a d’axe Ox. Ceci est illustré par les trois figures ci-dessous,
représentant, outre une fonction f (en maigre), les fonctions f (2 ), f ( − 0,3), f (2 − 1)
(en gras).
.
.
. .
f \ \ (en maigre) et f(2\bullet) (en gras)
f\ \ (en maigre) et f(\bullet−0,3) (en gras)
f \ \ (en maigre) et f(2\bullet−1) (en gras)
1.4
1.4
1.4
1.2
1.2
1.2
1
1
1
0.8
0.8
0.8
0.6
0.6
0.6
0.4
0.4
0.4
0.2
0.2
0.2
0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
.
0
1
0
0.1
Une fonction f et f (2 )
0.2
0.3
0.4
.
0.5
0.6
0.7
.
0.8
0.9
0
1
0
f et f ( − 0,3)
0.1
0.2
0.3
0.4
0.5
.
0.6
0.7
0.8
0.9
1
f et f (2 − 1)
Les intervalles réels et entiers
Les intervalles entiers sont notés avec la notation Matlab. Ainsi [n1 : n2 ], ou plus simplement n1 : n2 désigne les entiers de n1 à n2 .
Les intervalles réels sont notés avec la notation Maple. Ainsi [a .. b] désigne l’ensemble
des nombres réels compris entre a et b.
Par ailleurs, ans toute la suite, on prendra, pour n ≥ 1, xi = (i − 1) 2−n , pour i = 1 : 2n
Produits scalaires :
Nous utiliserons les produits scalaires dans ℓ2 et dans L2 , ainsi que leurs normes associées,
définis pour des vecteurs u et v de IRn et des fonctions f et g de [a .. b] dans IR
(u , v) =
X
ui vi
et
(f , g) =
i=1:n
et
kuk =
q
(u , u) =
sX
u2i
et
kf k =
i=1:n
q
Z
b
a
f (x) g(x) dx
(f , f ) =
s
Z
b
a
f (x)
2
dx
(on peut bien sûr utiliser un poids positif ρ = (ρi )i=1:n ou ρ(x)
, mais ceci est
x∈[0 .. 1]
peu courant pour la plupart des applications, et complique inutilement l’écriture et la
compréhension).
10
2.1
Principe de base
2.1.1
Point de départ
Question : Comment réduire la taille d’une image ? Par exemple, la photo d’un ciel uniformément bleu ne nécessite certainement pas le stockage de 10 millions de pixels... Comment
tenir compte de cela pour réduire la taille d’une image quelconque ?
Définitions :
R
Soit Ω un domaine borné de IRd . On note kΩk la mesure de Ω, c’est à dire kΩk = Ω 1 dx.
Moyenne en continu :
La moyenne
sur un domaine borné Ω ⊂ IRd d’une fonction f de Ω dans IR est définie
1 R
par m = kΩk Ω f (x) dx. La moyenne pondérée par la fonction ρ de Ω dans IR est définie par
R
ρ(x) f (x) dx
m = ΩR
.
Ω ρ(x) dx
Moyenne en discret :
La moyenne discrète, évaluée aux points x = (xi )i∈[1:n] , de la fonction f ci-dessus est
P
définie par m = n1 ni=1 f (xi ). La moyenne pondérée par le vecteur ρ = (ρi )i∈[1:n] est définie
Pn
ρi f (xi )
par m = i=1
.
Pn
i=1 ρi
P
La moyenne (discrète) d’un vecteur u ∈ IRn est définie par m = n1 ni=1 ui . LaPmoyenne
n
ρi ui
n
pondérée par le vecteur ρ = (ρi )i∈[1:n] d’un vecteur u ∈ IR est définie par m = Pi=1
;
n
i=1 ρi
de même pour la moyenne des valeurs d’une matrice.
Première idée pour réduire un signal, une image (réduction maximale ! !) :
Réduire l’image à une constante. Quelle valeur de constante ? On peut d’abord penser
à minimiser la distance globale entre cette constante et les données. Comme distance on
prendra la norme L2 (Ω) pour les fonctions définies sur Ω, et la norme ℓ2 pour les fonctions
discrètes (ou données ponctuelles, vecteurs). C’est ce que l’on appelle la “constante des
moindres carrés”.
Théorème :
Soit f une fonction définie sur une domaine borné.
La constante des moindres carrés (pondérés) de f est la moyenne (pondérée)
de f.
Cela est vrai aussi bien en discret qu’en continu, aussi bien à une variable
qu’à n variables.
Travail à fournir : Démontrez le théorème ci-dessus (cas discret, et/ou cas continu)
(démonstration faite au chapitre 3).
2.1.2
Avançons un peu : première étape !
Restons dans le simple, et travaillons à partir de maintenant à une seule variable, entre
0 et 1. Nous disposons d’une fonction (continue, ou en escalier), et supposons que nous
disposons de deux réels pour approcher cette fonction. Nous voulons donc approcher la
fonction par une fonction en escalier, constante sur [0 .. 12 ] et sur [ 12 .. 1].
Première méthode, la “classique” :
Prendre la moyenne sur [0 .. 12 ], et la moyenne sur [ 12 .. 1]. MAIS aucun de gain de place
si la fonction est “constante”. Dommage. De plus mes habitudes d’informaticien, mais aussi
11
maintenant mes habitudes de mathématicien, font que j’aime bien, lorsque je travaille sur une
situation plus fine, me servir de ce que je peux faire sur une situation moins fine... Comment
donc se servir de la situation “une constante” pour la situation “deux constantes” ? Voyezvous une possibilité ? (suggestion : en utilisant la moyenne sur [0 .. 1], puis... quoi d’autre ?).
Si vous “ séchez”, en voici une (mais faites travailler votre imagination avant de regarder !) :
Deuxième méthode, “rusée !” :
Gardons la moyenne globale (trouvée si l’on a fait les calculs avec un seul réel), et ne
gardons qu’une autre donnée... laquelle ? L’idée est de garder l’écart entre la moyenne dans
[0 .. 12 ] celle dans [ 12 .. 1].
En appelant m la moyenne globale, m0 la moyenne dans [0 .. 12 ], et m1 la moyenne dans
[ 12 .. 1], alors, la première méthode consiste à garder m0 et m1 , alors que la seconde méthode
consiste à garder m et m0 − m1 . On n’y gagne rien ? Non, bien sûr... cependant, si m0 = m1 ,
le second terme est nul, et, si on a une propriété analogue en raffinant plusieurs fois (voir
plus loin), et qu’alors on a beaucoup de zéros, on saura y gagner beaucoup !
Evidemment, si on garde m et m0 − m1 , il nous faudra, pour récupérer les valeurs correctes, “reconstruire” m0 et m1 à partir de m et m0 − m1 . On désire établir les formules
correspondantes, et formaliser en termes de fonctions et d’espaces vectoriels.
.
P
Pour cela : Soient le vecteur y = (10, 8, 4, 6, 4, 8, 7, 1), et f = i=1:8 yi ϕ(8 − i).
Soit maintenant ϕ la fonction définie par ∀x ∈ [0 .. 1[ , ϕ(x) = 1 et ∀x ∈ IR\[0 .. 1] , ϕ(x) =
0.
1. Calculez m, m0 , m1 , m0 − m1 et faites un dessin explicatif pour les valeurs ci-dessus. .
1
Constatez de plus que m = m0 +m
... cette propriété est-elle générale (démontrez... car on
2
s’en servira !) ? Reconstruisez m0 et m1 à partir de m et m0 − m1 .
2. Un peu d’analyse :
Soit maintenant ψ la fonction définie par ∀x ∈ [0 .. 12 [ , ψ(x) = 1, ∀x ∈ [ 21 .. 1[ , ψ(x) = −1,
et ∀x ∈ IR\[0 .. 1] , ψ(x) = 0. ψ est appelée “ondelette de Haar”. Son graphe est présenté
ci-dessous.
Montrez alors les relations suivantes (la plupart de ces relations sont ici simples à démontrer,
mais elles sont importantes, et vraies dans des situations beaucoup plus générales) :
kϕk = kψk = 1
ϕ⊥ψ, c’est à dire (ϕ , ψ) = 0
ϕ = ϕ(2 ) + ϕ(2 − 1) ; ψ
= ϕ(2 ) − ϕ(2 − 1)
et bien sûr aussi : ϕ(2 ) = ϕ + ψ) /2 et ϕ(2 − 1) = ϕ − ψ) /2
.
.
.
.
.
.
.
.
m = (f , ϕ) ; m0 = 2 (f , ϕ(2 )) ; m1 = 2 (f , ϕ(2 − 1)) ;
Soit a = (f , ψ). Alors : m =
m0 +m1
2
1
; a = m0 −m
; m0 = m + a ;
2
m1 = m − a
La “meilleure approximation” de f , dans l’espace des fonctions constantes sur [0 .. 12 ] et
sur [ 12 .. 1] est la fonction σ définie par
.
.
.
σ = m0 ϕ(2 ) + m1 ϕ(2 − 1)
= mϕ + a ψ
√
√
Définissons les fonctions ϕ0 et ϕ1 par ϕ0 = 2 ϕ(2 ) et ϕ1 = 2 ϕ(2 − 1).
.
σ définie ci-dessus s’écrit encore :
√
√
√
√
σ = (f , 2 ϕ(2 )) 2 ϕ(2 ) + (f , 2ϕ(2 − 1)) 2 ϕ(2 − 1)
= (f , ϕ0 ) ϕ0 + (f , ϕ1 ) ϕ1
= (f , ϕ) ϕ + (f , ψ) ψ
.
.
.
12
.
.
4. Appliquez cela à la fonction f = 2 + sin(2π ).
Parlons Espaces vectoriels de fonctions
Il est clair que les fonctions constantes sur [0 .. 12 [ et sur [ 12 .. 1[ forment un espace vectoriel
de dimension 2 (la démonstration est simple... faites-la si cela ne vous paraı̂t pas évident).
Les équations ci-dessus mettent en évidence deux bases de cet espace vectoriel, d’une part
ϕ0 et ϕ1 , d’autre part ϕ et ψ. Ces deux bases sont orthonormales, et les formules ci-dessus
donnent les formules de changement de base, dans un sens et dans l’autre.
On voit bien le phénomène de projection sur un espace vectoriel (fonction f continue,
projetée sur l’espace des fonctions constantes sur [0 .. 12 ] et sur [ 12 .. 1]), l’espace vectoriel étant
muni d’une base orthonormale... Ici l’espace vectoriel est de dimension 2... mais on va vite
affiner la décomposition en utilisant un espace vectoriel de dimension plus élevé !
Ci-dessous deux bases de l’espace vectoriel des fonctions constantes sur [0 .. 12 ] et [ 12 .. 1]
(à savoir ϕ1 et ϕ2 d’une part, et ϕ et ψ d’autre part).
base des φ1, φ2
base des φ, ψ
1.5
1
0.8
0.6
0.4
1
0.2
0
−0.2
0.5
−0.4
−0.6
−0.8
0
−0.2
2.1.3
0
0.2
0.4
0.6
0.8
E : espace des fonctions a 2 niveaux
1
−1
−0.2
1.2
0
0.2
0.4
0.6
0.8
E : espace des fonctions a 2 niveaux
1
1.2
Et maintenant on recommence !
Evidemment, quand on a une bonne idée, on ne la laisse pas en chemin, on la réutilise...
encore et encore. Commençons par une nouvelle fois : coupons [0 .. 12 ] et [ 21 .. 1] en deux
parties égales. Nous avons maintenant quatre intervalles, et nous pouvons garder comme
info les moyennes sur chaque petit intervalle, mais nous pouvons aussi garder m et a que
nous avions auparavant, et y ajouter les “sauts” en x = 14 et x = 34 .
Travail à faire
1. Faites un nouveau dessin qualitatif.
2. Exprimez la meilleure approximation σ par une fonction constante sur 4 morceaux, des
valeurs 10 8 4 6 4 8 7 1 données au § précédent, dans la base des (ϕ(4 − i))i=0:3 et dans la
base des ϕ, ψ, (ψ(2 − i))i=0:1 (si besoin est, vous trouverez la formule attendue au chapitre
3).
3. Dans le cas général, exprimez la meilleure approximation σ, d’une fonction f définie sur
[0 .. 1], par une fonction constante sur 4 morceaux, à l’aide des fonctions ϕ et ψ.
.
.
Cas général
Notations
Soit Sk l’espace vectoriel des fonctions constantes par morceaux, les “morceaux” étant
les intervalles [i 2−k .. (i + 1) 2−k [. On notera σk la meilleure approximation de f dans Sk (au
sens ℓ2 ou au sens L2 .
13
.
2 i) , ψ est obtenue à partir de 2 ψ(2 .) par une translation de 2
même remarque vaut bien sûr pour la fonction ϕ ci-dessous.
Appelons ϕ la fonction ϕ = 2 ϕ(2 . − i).
k
k
−k
.
Appelons ψk i la fonction ψk i = 2 2 ψ(2k − i). Attention ! comme ψk i = 2 2 ψ 2k ( −
k
2
ki
k
−ki
et non de i. La
ki
ki
ki
k
2
k
Remarquez que ϕk i ∈ Sk , et que donc la largeur de la “marche” de ϕk i est 2−k , tandis
que ψk i ∈ Sk+1 , que donc la largeur des deux “marches” de ψk i est 2−(k+1) .
Remarquez que l’on a kψk i k = 1 et (k, i) 6= (k ′ , i′ ) ⇒ (ψk i , ψk′ i′ ) = 0, enfin (ϕ, ψk i ) = 0.
Clairement pour tout k les (ϕk i )i=0:2k −1 forment une base de l’espace vectoriel Sk . On
admettra (mais vous pouvez le démontrer) que pour tout n ϕ et les (ψk i )k=0:n−1,i=0:2k −1
forment une base de Sn .
Il faut maintenant passer au cas général, c’est à dire avec n divisions succcessives, et
donc 2n intervalles dans [0 .. 1] (en effet, chaque division divise chaque intervalle en 2, et
donc multiplie le nombre d’intervalle par 2). A la division numéro k, il y a 2k intervalles, et
donc 2k−1 nouveaux “sauts”...
On utilise alors en général la formule suivante, dite (“formule de décomposition du signal”) :
X
σn = a0 ϕ +
X
ak i ψk i
k=0:n−1 i=0:2k −1
Démontrez que l’on a : a0 = (f, ϕ) ;
ak i = (f , ψk i ).
La formule s’écrit donc encore
X
σn = (f, ϕ) ϕ +
X
(f , ψk i ) ψk i
k=0:n−1 i=0:2k −1
La double somme vous gène ? C’est normal, question de manque d’habitude j’ose dire !
Remarquez seulement pour le moment que chaque valeur de k correspond à un “ étage”, et
que la sommation sur k correspond donc aux étages successifs. La sommation sur i correspond, elle, à la décomposition à l’intérieur d’un même étage (c’est à dire à l’introduction des
nouveaux “sauts” nécessaires pour passer de l’étage k − 1 à l’étage k).
Cette formule est appelée formule de décomposition en ondelettes. Les fonctions ψk i sont
appelées ondelettes. On parle quelquefois de “ondelette père” pour ϕ, et de “ondelette mère”
pour ψ.
Retrouvez par vous-même cette formule (écrivez la contribution d’un “étage”, puis sommez sur les différents étages).
Remarquez que, si l’on est en discret et si la décomposition est faite jusqu’au stade des
données, on n’a rien fait d’autre qu’un changement de base. En effet, σn s’écrit aussi :
σn =
n −1
2X
(f, ϕn,i ) ϕn,i
(1)
i=0
Par contre (nous verrons cela plus en détail dans la partie “analyse multi-résolution”
(§5.4)), si on est en continu, il nous faudra prendre la limite du second membre lorsque
n → ∞. Dans ce cas, on écrira donc, en supposant que la limite existe et est bien f :
k
f = (f, ϕ) ϕ +
∞ 2X
−1
X
(f , ψk i ) ψk,i
k=0
14
i=0
(2)
2.1.4
“Analyse en temps-fréquence”
Prenons maintenant un peu de recul et comparons les deux formules (1) et (2) ci-dessus.
Comparons (2) d’une part avec les développements en série de Fourier, d’autre part avec (1).
σn =
X
i=0:2n −1
.
n
.
.
n
(f , 2 2 ϕ(2n − i)) 2 2 ϕ(2n − i) =
.
X
(f , ϕn i ) ϕn i
i=0:2n −1
Examinons pour cela la fonction ψk i = ψ(2k − i) et constatons que la décomposition
en ondelettes comporte une somme sur i couplée avec une somme sur k. Considérons, pour
faciliter le vocabulaire, que la variable est le temps.
Le ”−i” correspond à une translation dans le temps, et la somme sur i opère donc t donc
une somme de translatés dans le temps. Comme dans la décomposition en temps qu’exprime
P
la formule σ = i=0:2n −1 (f , ϕn i ) ϕn i (chaque terme correspond ici à un intervalle dans lequel
σ est constant, et chacun de ces intervalles est un translaté dans le temps de l’un d’entre
eux).
Le “2k ” correspond à une “contraction” du temps (affinité d’axe Ox et de rapport 2−k ).
Comme dans le cas du développement de f en série de Fourier, la sommation sur k correspond
à une sommation sur des fréquences différentes.
On parlera de “décomposition en temps-fréquence”, alors que l’on parle de “décomposition
en fréquence” pour les séries de Fourier, de décomposition en temps pour la somme (1) des
ϕn i .
Il est important d’avoir compris ce phénomène de double somme, de comprendre pourquoi
on a effectivement besoin de cette double somme. Prenez le temps nécessaire à bien voir ce
qui se passe à chaque étage pour bien comprendre où (et pourquoi) se trouve la sommation en
temps (à l’intérieur d’un étage), et où (et pourquoi) se trouve la décomposition en fréquences
(les différents étages).
Faites un graphique permettant de visualiser les différents coefficients de la décomposition
en ϕ, et de la décomposition en ondelettes.
2.1.5
Notion de “raffinement” et de “détails”
Soit σℓ la fonction obtenue à l’étape ℓ, c’est à dire
σℓ = a0 ϕ +
X
X
ak i ψk i
k=0:ℓ−1 i=0:2k −1
σℓ+1 peut être considéré comme une approximation “plus fine” de f (deux fois plus de
paliers deux fois moins larges que ceux de σℓ ).
Je propose que, pour la fin de ce paragraphe, chaque étudiant apporte sa propre réponse ;
si toute l’équipe est d’accord, on passe à la question suivante, sinon vous échangez vos arguments au sein de l’équipe, afin de tenter d’obtenir un vrai consensus. Vous comparerez
ensuite les points de vue des différentes équipes, et les équipes ayant des réponses différentes
échangeront leurs arguments...).
Soit ℓ ≤ 2. Exprimez σℓ+1 − σℓ (c’est simple !) ; σℓ+1 − σℓ est souvent appelé les détails
du niveau ℓ... et bien sûr les (aℓ+1 i )i=0:2ℓ+1 −1 sont les coefficients des détails. Que représente
exactement aℓ+1 i ψℓ+1 i ? Que se passe-t-il si tous les coefficients (aℓ+1 i )i=0:2ℓ+1 −1 sont nuls ?
Est-ce que cela implique que σn est égal à σℓ ? Faites un graphique simple illustrant votre
réponse.
15
2.2
Codage-décodage, décomposition-reconstruction...
Etant donné un signal, une image, (c’est à dire une fonction f en escalier, définie “pixel
par pixel”, la coder (on parle de “décomposition du signal ou de l’image”), c’est trouver les
coefficients a0 et aki . La décoder (on parle de “reconstruction du signal ou de l’image”), c’est
retrouver les valeurs de f à partir des coefficients a0 et aki .
Une particularité est que lorsque l’on fait du traitement du signal discret (ou du traitement de l’image), on part en général du plus fin vers le plus grossier (on connait en effet les
pixels, c’est à dire “le plus fin”, on part donc des pixels, et on définit les moyennes successives
des données), alors que lorsque l’on fait des maths on travaille d’habitude comme on l’a fait
ci-dessus, du plus grossier au plus fin.
2.2.1
D’abord à la main
Voyons d’abord ce que cela donne sur un cas particulier, et quelles leçons en tirer. On va
partir des valeurs de f ((fi )i=0:7 ), et déterminer d’abord les coefficients (a2,i )i=0:3 , ainsi que
les moyennes (m2,i )i=0:3 des éléments pris deux à deux (on a ainsi m2,i = (f2i + f2i+1 )/2 et
a2,i = (f2i − f2i+1 )/2). Ensuite on fait de même à l’étage inférieur, en traitant les m2,i comme
des données, et on obtient alors les (a1,i )i=0:1 , ainsi que les m1,i . Enfin, le niveau 0, niveau
final, permet d’obtenir a0 et a0,0 .
Soit la fonction à huit valeurs : 10, 8, 4, 6, 4, 8, 7, 1. Déterminez les coefficients de
sa décomposition en ondelettes (vous partirez maintenant du plus fin –les éléments de la
fonction– pour aller vers le plus grossier –leur moyenne–). Puis à partir de ces coefficients
reconstruisez la fonction de départ (vous partirez maintenant du plus grossier pour aller vers
le plus fin). Seulement pour ceux qui travailleraient ce texte seuls, la “solution” se trouve en
fin de ce texte (l’accord au sein d’une équipe suffit pour “valider” le résultat).
Remarquez la chose suivante : “reconstruction progressive” : on commence par transmettre les coefficients de bas niveau, et on n’a pas besoin d’attendre d’avoir tout reçu pour
commencer à reconstruire le signal (l’image). C’est ce qui se passe quand, sur internet, l’image
s’“affine” progressivement. Par contre lorsque l’image se dessine progressivement du haut en
bas, avec toute la précision de chaque ligne avant même que l’image soit entièrement reconstituée, c’est que le codage n’a pas été fait en ondelettes, mais “pixel par pixel” (transmission
des pixels par ligne de matrice).
De plus, en fonction de la précision nécessaire (petite image sur écran ou grande image à
imprimer ; son téléphonique ou son HiFi...), on ira plus ou moins loin dans la décomposition
(inutile d’aller plus loin que le pixel de l’écran, ni de transmettre des fréquences non traduites
par le haut-parleur du téléphone !, ou même inaudible par une oreille humaine).
2.2.2
Maintenant le cas général
Faites l’algorithme qui vous permet de coder ainsi un signal de 2n points, puis de le
reconstruire.
Faites maintenant tourner cet algorithme sous matlab, sur la (ou plutôt des) fonction(s)
qui vous paraı̂traient appropriées (avec un assez grand nombre de valeurs : 512 ou 1024 par
exemple). Vous pouvez faire cela dès maintenant, ou avant le TP pour préparer le TP et
vous permettre d’aller plus loin pendant la séance de TP, ou encore –mais ce serait peut-être
dommage– attendre le TP pour cette réalisation concrète. Ceci vaut aussi pour les autres
programmes matlab mentionnés plus loin.
16
Bien sûr vous programmerez, autant que possible, en vectoriel (plus élégant, plus efficace... et quelquefois plus clair... mais aussi plus “dense” !).
Vous utiliserez en particulier la fonction f définie par f (x) = sin(ωx) + a sin(bωx), avec
différentes valeurs de a, b, et ω, ainsi que la fonction définie par f (x) = 1 + exp(−400(x −
1 2
1 2
) ) + 12 exp(−1400(x − 13 − 12
) ) + 12 exp(−1000(x − 34 )2 ).
3
Vous représenterez la construction (c’est à dire σn ) à divers niveaux de reconstruction.
2.2.3
Représentations graphiques
Comment représenter les coefficients ak i ? Curieusement les représentations sont assez
claires à deux variables, mais moins immédiates à une variable. Restons pour le moment à
une variable.
Plusieurs visualisations des coefficients sont possibles :
1. La plus facile, et peut-être sans doute la plus simple à interpréter... au début : je vous
propose de tracer, pour différents niveau, d’abord les mi du niveau, puis chaque série de
(ak i )i=0:2k pour les k successifs. Indispensable cependant alors, pour pouvoir interpréter un
minimum ces valeurs : un trait vertical doit séparer chaque niveau d’échelle... assez facile à
réaliser, et on voit très facilement que beaucoup de coefficients sont “petits”. Cependant on
voit mal sur quelle partie de la fonction (dans quelle zone sur x) influe tel ou tel coefficient,
ce qui est dommage.
2. Pour remédier à l’inconvénient mùentionné ci-dessus, l’idée est d’indiquer, outre la valeur
du coefficient, le support de l’ondelette concernée par ce coefficient. Oui, mais alors, comment
faire pour tout représenter ? Simple : les infos relatives à chaque échelle sont placées les unes
au dessus des autres, et on utilise le code couleur habituel (bleu : faible, rouge : fort). On
voit très bien alors que les coefficients les plus forts sont là on la fonction présente le plus de
variations. Voyez et comparez les graphes du paragraphe 3.
3. Comparez maintenant les deux modes de représentation pour un même jeu de données ;
pour cela vous pouvez utiliser les figures du paragraphe 3, et/ou créer vos propres figures,
avec un programme matlab que vous aurez créé, ou en utilisant celui accessible depuis ma
page web ! ! ! ! !
2.3
Compression d’un signal
L’idée est maintenant simple : normalement les (ou certains) coefficients ak i devrraient
devenir petits lorsque k augmente... alors on ne fera pas une grande erreur en ne transmettant
pas les petits coefficients, c’est à dire en les ramenant à zéro.
Donc :
1. Codage.
2. On décide un seuil en dessous duquel les coefficients seront ramenés à zéro, et on met à
zéro les coefficients inférieurs (en valeur absolue) à ce seuil.
3. Si il y a beaucoup de 0, un “surcodage” perfomant tirera bénéfice de ce fait pour réduire
la taille du fichier (c’est ce que fait Matlab avec le mode de stockage “sparse”).
4. On transmet (ou on stocke) le signal ainsi codé.
5. A la réception, si nécessaire, on réintroduit les 0 à leur place.
6. On décode, en reconstruisant le signal modifié par le fait que certains coefficients ont été
modifiés (mis à zéro).
Vous l’avez compris : ce “seuil” est précisément le curseur de jpeg : “plus précis, mais
moins compressé ←→ plus compressé mais davantage déformé”.
17
Modifiez le programme précédent en introduisant un seuil et en reconstruisant le signal
modifié. Bien sûr, en titre de votre graphe, vous indiquerez le seuil, le taux de compression
(c’est à dire le rapport du nombre de coefficients nuls sur le nombre initial de coefficients)
et une mesure de l’écart (a priori une moyenne des carrés des écarts entre le signal d’origine
et le signal restitué).
2.4
Dimension 2
Il faudra aussi passer en dimension 2. Dans cette situation, nous aurons besoin de trois
familles de fonctions ψ : une suivant x, une suivant y, une suivant la diagonale. Juste un
mot pour l’ondelette de Haar, plus facile pour un premier abord : lorsque l’on coupe le carré
[0 .. 1] × [0 .. 1] en deux suivant x et en deux suivant y, on obtient quatre carrés d’échelle
inférieure... les fonctions de base (orthogonales) habituellement utilisées sont :
fonction ϕ : 1 sur [0 .. 1] × [0 .. 1], 0 sinon.
fonction ψ x : 1 sur [0 .. 21 ] × [0 .. 1], -1 sur [ 12 .. 1] × [0 .. 1] , 0 sinon.
fonction ψ y : 1 sur [0 .. 1] × [0 .. 21 ], -1 sur [0 .. 1] × [ 12 .. 1], 0 sinon
fonction ψ xy : 1 sur [0 .. 12 ] × [0 .. 12 ] ∪ [ 12 .. 1] × [ 12 .. 1], -1 sur [0 .. 12 ] × [ 21 .. 1] ∪ [ 12 .. 1] × [0 .. 12 ]
, 0 sinon
Les calculs de décomposition et recomposition du signal sont alors assez simples. En
commençant par un signal de 2 × 2 éléments, donnez les formules de décomposition et
de recomposition du signal, et programmez une situation analogue à celle que vous avez
programmée à une variable.
La représentation graphique du signal décomposé est plus simple... et amène à des
résultats plutôt spectaculaires. Vous pouvez prendre des images standard prises sur internet (“ Lena”, bien sur, ou “Barbara”, photographe, mandrill...). Faisons la représentation
graphique par étapes succcessives :
Effectuons d’abord la première étape de décomposition d’une image de 2n × 2n pixels :
cette image est stockée “en clair” dans une matrice A (de dimension 2n × 2n ). Elle est codée
par une matrice B, de dimension 2n × 2n , qui contient les coefficients des ψ x , ψ y , ψ x y et
des ϕ. Les coefficients des ψ x sont stockés dans B(1 : 2n−1 , 1 : 2n−1 ), les coefficients des
ψ y sont stockés dans B(2n−1 + 1 : 2n , 2n−1 + 1 : 2n ), les coefficients des ψ xy sont dans
B(2n−1 + 1 : 2n , 1 : 2n−1 ), enfin les coefficients des ϕ sont dans B(1 : 2n−1 , 2n−1 + 1 : 2n ).
Ainsi, l’image correspondante (avec l’instruction image de matlab) est en quatre parties :
les trois premiers quarts représentent les coefficients des “ détails” dans chaque direction (x,
y, et xy), et le quatrième quart représente les moyennes de chaque groupe de quatre pixels.
L’effet est assez caractéristique, et, après une petite expérience acquise, très compréhensible.
Une très belle visualisation de la décomposition...
En voici une schématisation :
18
Programmez cela, et reconnaissez les formes principales sur chacun des quatre carrés.
Mais il y a mieux ! Effectuons deux étapes de décomposition. Il faut faire une étape sur le
carré B(1 : 2n−1 , 2n−1 +1 : 2n ), et donc le décomposer en quatre carrés, de la même façon que
nous l’avions fait pour la matrice B à partir de la matrice A... cette décomposition en quatre
prend naturellement la place du quatrième carré de l’étape précédente. Et on peut ainsi faire
autant de niveaux de décomposition que l’on désire, et représenter graphiquement tous les
coefficients des différences, ainsi que les moyennes les plus grossières. Personnellement, je
trouve le résultat extrèmement visuel et intéressant.
Programmez cela jusqu’à un niveau de décomposition choisi par l’opérateur. Je trouve
intéressant (et très facile) de visualiser par ailleurs (autres graphes) les carrés des moyennes
successives (donc de tailles décroissantes), en leur gardant la taille de l’image .
Pour faire quelque chose de complet, il ne vous reste plus qu’à définir un seuil de mise à
zéro des coefficients, et de reconstruire l’image, avec compression, en indiquant le seuil et le
taux de compression, et comparer (visuellement, bien sûr, mais aussi en indiquant la norme
ℓ2 de l’écart entre l’image originale et l’image compressée).
Vous aurez alors compris bien des aspects des ondelettes.
2.5
Ondelettes continues
Il faudra bien, un moment ou l’autre, travailler avec de fonctions qui ne sont pas des
constantes par morceaux. La difficulté sera alors la question de l’orthogonalité des fonctions,
essentielle pour que le coefficient de ψk i soit justement (f, ψk i ). On se contentera parfois de
la seule orthogonalité entre des échelles différentes (k 6= k ′ ⇒ (ψk i , ψk′ i′ ) = 0, mais i 6= i′ 6
⇒ (ψk i , ψk i′ ) = 0. Mais attention, on devra alors, à l’intérieur de chaque échelle, résoudre
un système linéaire... On préfèrera plutôt procéder à une orthogonalisation des fonctions à
l’intérieur d’une même échelle. Du point de vue vocabulaire, on parle d’“ondelettes semiorthogonales” lorsque l’orthogonalité n’est que entre des échelles différentes (“ondelettes
orthogonales” lorsque l’orthogonalité est complète). Certains préfèrent parler d’ondelettes
orthogonales (pour semi-orthogonales), et d’ondelettes bi-orthogonales (pour orthogonales).
19
Restons-en, dans le cadre de ce cours d’introduction, aux ondelettes de Haar, les plus simples,
mais soyons conscients que nous avons esquivé ainsi deux difficultés : l’orthogonalité des
ondelettes (immédiates pour les ondelettes de Haar, toujours une difficulté pour les autres
ondelettes), et le support des ondelettes qui pose un problème sur les bords du signal ou
de l’image sitôt que l’on utilise d’autres ondelettes que l’ondelette de Haar. Pour ceux qui
voudraient aller plus loin, vous pourrez examiner le cas des fonctions linéaires par morceaux
(avec ϕ(x) = (|x − 1| − 2|x| + |x + 1|)/2... mais l’ondelette ψ n’est pas évidente... voyez son
expression en annexe !)
Accessoirement vous pouvez aussi utiliser les fonctions de la boı̂te à outils “ wavelets” de
matlab... mais attention à comprendre ce que fait matlab !
20
Chapitre 3
Quelques solutions, figures...
Théorème : “la constante des moindres carrés est la moyenne”
P
Pour un vecteur : On cherche la valeur réelle α telle que E(α) = n1 i=1:n (α − ui )2 soit
minimal. E est une fonction quadratique en α, dont le coefficient de α2 , égal à n, est positif. E
P
présente donc un et un seul minimum, obtenu pour E ′ (α) = 0. Or E ′ (α) = 2nα − 2 i=1:n ui ,
d’où le résultat. La démonstration est analogue pour le cas continu (avec dérivation sous le
signe somme) (n’hésitez pas, faites la !), ainsi que pour le cas avec un vecteur poids positif
(remarquez alors qu’il est indispensable que les poids soient tous positifs pour garantir que
le coefficient de α2 soit positif).
Paragraphe 2.1.2 :
.
2. on a m = 6, m0 = 7 ; m1 = 5. σ s’écrit sous les deux formes suivantes σ = 7ϕ(2 ) +
5ϕ(2 − 1) = 6ϕ + ψ.
.
Paragraphe 2.1.2 :
.
.
1. m = 6 ; m0 = 7 ; m1 = 5. De sorte que σ = 7 ϕ(2 ) + 5 ϕ(2 − 1) = 6 ϕ + ψ. Ce qui donne
le graphe suivant :
meilleures decompositions sur deux niveaux
10
9
8
7
6
5
4
3
2
1
0
−1
0
1
2
3
4
5
m0=7 ; m1= 5 ; m=6 ; a= 1
6
7
8
9
.
2. En appliquant la même démarche à la fonction f = 2+sin(2π ), entre 0 et 2π, on obtient :
R
1
2
m = 2, m0 = 2 0 sin(2π x) dx = 2 + 2/π, m1 = 2 − 2/π ; a = 2/π
Par conséquent, si fe est la meilleure approximation dans S1 au sens L2 de f , on a
∀x ∈ 0 12 , fe(x) = 2 + 2 π2 = m0 et ∀x ∈ 12 1 , fe(x) = 2 − 2 π2 = m1 , ce qui peut encore s’écrire
sous la forme
fe = m0 ϕ(2 ) + m1 ϕ(2 − 1) = m ϕ + a ψ
.
.
21
On obtient alors le graphe suivant (réalisé sous matlab) :
meilleures approximations du sinus
3
2.8
2.6
2.4
2.2
2
1.8
1.6
1.4
1.2
1
0
1
2
3
4
5
y=2+sin(2pi x) ; m=2 ; m0=2+2/pi ; m1=2−2/pi ; a=2/pi
6
7
Paragraphe 2.1.3 :
On obtient :
σ = 9 ϕ(4 ) + 5 ϕ(4 − 1) + 6 ϕ(4 − 2) + 4 ϕ(4 − 3) = 6 ϕ + ψ + 2 ψ(2 ) + ψ(2 − 1)
.
.
.
.
.
.
ce qui donne le graphe suivant :
meilleures decompositions jusqu’a trois niveaux
11
10
9
8
7
6
5
4
3
2
1
0
−1
0
1
2
3
4
5
6
m=6 ; a=1 ; a0=2 ; a1=1 ; a00=1 ; a01=−1
7
8
9
2
3
4
5
6
7
m=6 ; a=1 ; a0=2 ; a1=1 ; a00=1 ; a01=−1 ; a10=−2 ; a11=3
8
9
Paragraphe 2.2.1 : (notations matlab)
m2,0:3 = [9 5 6 4] ; a2,0:3 = [1 − 1 − 2 3]
m1,0:1 = [7 5] ; a1,0:1 = [2 1] ; m0,0 = a0 = 6 ; a0,0 = 1.
On obtient donc le graphe suivant :
meilleures decompositions jusqu’a quatre niveaux
11
10
9
8
7
6
5
4
3
2
1
0
−1
0
1
On “transmet” donc les valeurs suivantes : 6 ; 1 ; 2 1 ; 1 -1 -2 3, et à partir de ces valeurs
on retrouve les valeurs successives des m et celles de f . Personnellement, je dispose les calculs
22
de la façon suivante (remarquez que je vais du plus fin au plus grossier, et non le contraire,
de sorte que les seules opérations à effectuer sot des moyennes de deux nombres) :
10
8
4
9 (1)
6
4
5 (−1)
8
7
6 (−2)
7 (2)
1
4 (3)
5 (1)
6 (1)
Si maintenant on veut “compresser” en utilisant un seuil de 1 (tout ce qui est inférieur
ou égal à 1 est mis à zéro), on obtient les valeurs transmmises (ou stockées) suivantes : 6 ;
0 ; 2 0 ; 0 0 -2 3, , et donc le tableau suivant :
8
8
4
8 (0)
4
4
8
4 (0)
9
6 (−2)
3
6 (3)
6 (2)
6 (0)
6 (0)
c’est à dire le signal compressé suivant : 8 8 4 4 4 8 9 3.
Ces coefficients d’ondelettes sont habituellement représentés par un graphique tel que
celui-ci (voyez les explications au §2.2.3) (le graphique en couleur est accessible sur le fichier
.pdf disponible sur
http://www-gmm.insa-toulouse.fr/~
rabut/enseignement/pageWebEnseignement.htm) :
coefficients d’ondelettes du signal initial
−4.5
6
−4
5
−3.5
4
−3
3
−2.5
2
−2
1
−1.5
0
−1
−0.5
−1
1
2
3
4
5
6
7
8
−2
En opérant un seuillage à 1, on obtient maintenant le graphe des coefficients suivant (la
version couleur est visible dans le fichier .pdf sur ma page web) :
23
coefficients d’ondelettes apres troncature a 1
−4.5
6
−4
5
−3.5
4
−3
3
−2.5
2
−2
1
−1.5
0
−1
−0.5
−1
1
2
3
4
5
6
7
8
−2
Remarquez que sur ces deux graphes, on voit bien la zone sur laquelle impact le coefficient.
De plus, pour une valeur de x donnée, la valeur de la fonction est obtenue en additionnant
les coefficients situées à la verticale de x (changé de signe dans la seconde moitié de la zone
de chaque coefficient puisqu’alors le ψ concerné vaut −1).
Paragraphe 2.2.2 :
(Surtout, surtout, ne regardez pas cet algorithme ni son écriture matlab avant de l’avoir
clairement réalisé vous-même. Seulement alors regardez ce qui suit, et comparez avec ce que
vous avez fait ! Par ailleurs, vous devez avoir parfaitement compris ce qui est fait ci-dessous.)
Codage (“décomposition du signal”) : adminLocal
Pour chaque niveau successif, en descendant,
Calculer les moyennes et les écarts des moyennes du niveau supérieur
Compression :
Mettre à zéro les détails inférieurs (en valeur absolue) à un epsilon donné.
Décodage (“reconstruction du signal”)
Pour chaque niveau successif, en remontant
Reconstruire les moyennes du niveau, à partir des moyennes et des écarts
du niveau inférieur
Avec matlab (bien sûr en vectoriel !) :
Codage :
n = N;
While n>1
b(1:n/2) = (a(1:2:n-1) + a(2:2:n)) / 2 ;
b(n/2+1:n) = (a(1:2:n-1) - a(2:2:n)) / 2 ;
a = b;
n = n/2 ;
end
Seuillage :
a(find(abs(a)<epsilon)) = 0 ;
Reconstruction du signal :
24
n=2
While n≤ N
b(1:2:n-1) = a(1:n/2) + a(1+n/2 : n)
b(2:2:n) = a(1:n/2) - a(1+n/2 : n)
a = b;
n = 2*n ;
end
Quelques figures
signal initial
1.5
1
0.5
0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0.9
1
signal compresse (seuil : 1e−006 ; taux de reduction : 47 pour cent)
1.5
1
0.5
0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
coefficients d’ondelettes
0.4
0.2
0
−0.2
−0.4
0
500
1000
1500
2000
2500
25
3000
3500
4000
4500
signal initial
1.5
1
0.5
0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0.9
1
signal compresse (seuil : 0.001 ; taux de reduction : 75 pour cent)
1
0.5
0
−0.5
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
coefficients d’ondelettes
0.4
0.2
0
−0.2
−0.4
0
500
1000
1500
2000
2500
3000
3500
4000
4500
signal initial
1.5
1
0.5
0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0.9
1
signal compresse (seuil : 0.01 ; taux de reduction : 97 pour cent)
1
0.5
0
−0.5
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
coefficients d’ondelettes
0.4
0.2
0
−0.2
−0.4
0
500
1000
1500
2000
2500
26
3000
3500
4000
4500
signal initial
1.5
1
0.5
0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0.9
1
signal compresse (seuil : 0.04 ; taux de reduction : 99 pour cent)
1
0.5
0
−0.5
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
coefficients d’ondelettes
0.4
0.2
0
−0.2
−0.4
0
500
1000
1500
2000
2500
3000
3500
4000
4500
La représentation classique des coefficients d’ondelettes est représentée ci-dessous pour le
signal complet, puis pour le signal compressé avec un seuil de 0,04. Remarquez que l’on voit
bien sur ces graphes que les coefficients les plus importants sont ceux situés là où la fonction
varie de façon importante.
coefficients d’ondelettes du signal initial
0.2
−12
0.15
0.1
−10
0.05
−8
0
−6
−0.05
−0.1
−4
−0.15
−2
−0.2
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
coefficients d’ondelettes apres troncature a 0.04
0.2
−12
0.15
0.1
−10
0.05
−8
0
−6
−0.05
−0.1
−4
−0.15
−2
−0.2
0
0.1
0.2
0.3
0.4
0.5
0.6
27
0.7
0.8
0.9
1
Chapitre 4
Travaux Pratiques
Vous réaliserez ce TP à un étudiant par poste, mais vous êtes encouragés à vous aider
mutuellement. Bien sûr je vous aiderai aussi en tant que besoin. Pour plus d’efficacité,
travaillez ce TP en travail personnel avant la séance, et terminez-le après la séance (faitesvous un compte-rendu, que je m’engage à commenter si vous me le rendez). Ce TP n’est pas
évalué.
4.1
Mise en oeuvre en dimension 1
Mettez en oeuvre les différents programmes évoqués au fil de ce cours. Vous veillerez à ce
que les présentations, numériques et graphiques pour des petites tailles, graphiques pour des
tailles plus grandes, soient claires et bien présentées. Bien sûr vous ferez un programme “
propre”, c’est à dire indenté, avec des noms de variables clairs, des commentaires appropriés,
et ... en vectoriel ! Vous utiliserez avec profit l’instruction stairs pour représenter les
fonctions en escalier.
4.2
Plusieurs possibilités en dimension 2
S’il vous reste du temps (ce qui sera de toutes façons le cas si vous avez déjà fait tout
ou partie de 4.1 avant le TP), travaillez en dimension 2. Vous avez pour cela plusieurs
possibilités : le mieux est, bien sûr, Haar à deux variables, mais vous pouvez aussi voir
ce que cela change en travaillant ligne par ligne, puis en traitant le nombres ainsi obtenus
en colonnes, ou au contraire colonne par colonne et en traitant ensuite les nombres ainsi
obtenus en lignes. Vous pouvez comparer les résultats obtenus par ces différentes méthodes
(des étudiants différents programmant des méthodes différentes).
Pour cela vous vous procurerez sur internet certaines images “ classiques” telles les incontournables Lena, Barbara, photographe, mandrill...
4.3
Approfondissement : utilisation de boite à outils,
internet...
Vous pouvez aussi (après avoir fait correctement 4.1) manipuler certains programmes tout
prêts (boı̂te à outils matlab, internet...) et voir ce que cela donne sur certaines images. Cela
aussi vous aidera à développer votre intuition ! ... vous pourrez d’ailleurs approfondir cela
dans le cadre du bureau d’études – travail personnel qui servira par ailleurs pour l’évaluation
de vos compétences acquises dans cette partie de l’UF.
28
Chapitre 5
Pour aller plus loin...
(Rédaction schématique, et donc très provisoire... mais cela devrait tout de même vous
aider pour structurer les choses !)
5.1
Au delà de Haar...
Bien sûr, on ne va pas se contenter du “constant par morceaux” (c’est à dire des fonctions
en escalier), il y a sans doute bien mieux, en termes de précision, de vitesse de convergence...
Alors, quels sont les points les plus importants ? Avant de formaliser cela (“Analyse
multi-résolution”, voir un peu plus loin), voyons quelques points importants :
1. L’espace avec les détails contient l’espace sans les détails, ce que nous noterons Vn+1 ⊃ Vn .
Ainsi, (Haar),pour n fixé, l’espace des fonctions constantes sur les intervalles
[i 2−n−1 .. (i + 1) 2−n−1] contient l’espace des fonctions constantes sur les intervalles
[i 2−n .. (i + 1) 2−n].
De même (splines de degré 1), l’espace des fonctions continues sur IR , et linéaires sur
les intervalles [i 2−n−1 .. (i + 1) 2−n−1] contient l’espace des fonctions continues sur IR , et
linéaires sur les intervalles [i 2−n .. (i + 1) 2−n ].
De même (toujours n fixé), l’espace des splines cubiques de nœuds i 2−n−1 contient l’espace des splines cubiques de nœuds i 2−n .
2. Il existe une fonction génératrice de l’espace V0 , habituellement notée ϕ, c’est à dire
P
que pour toute fonction f ∈V0 , il existe un vecteur λ tel que f = i∈ZZ λi ϕ( − i) Cette
fonction ϕ est dite “fonction d’échelle” (“scaling function), ou encore (moins souvent) “père
des ondelettes” ( !).
Dans le cas des splines linéaires la fonction d’échelle ϕ est la “ B-spline linéaire (fonction
“chapeau”, définie par ∀x ∈ IR , ϕ(x) = (|x + 1| − 2|x| + |x − 1|)/2). Dans le cas des splines
cubiques la fonction d’échelle ϕ est la B-spline cubique (vue l’an dernier).
.
.
3. f ∈Vn ⇒ f (2 )∈Vn+1 .
P
En conséquence, il existe un vecteur a tel que ϕ = i∈ZZ λi ϕ(2 − i). Un exercice facile
est de déterminer le vecteur a pour les splines linéaires (n’hésitez pas, lancez-vous !)... et un
exercice moins facile est de déterminer a pour les splines cubiques.
.
4. On note Wn un supplémentaire de Vn+1 dans Vn . On a donc Vn+1 = Vn
de Wn est appelée “base d’ondelettes”.
29
L
Wn . Une base
5. Afin de pouvoir décomposer toute fonction de L2(IR) sur les espaces Vn , on désire de plus
que la suite Vn )n∈ZZ soit dense dans L2 (IR).
Remarque : En général, il est “assez facile” de trouver une base de Wn , mais il est plus
difficile de trouver une base orthogonale de Wn . Or il est précieux de disposer d’une base
orthogonale de Wn , car ainsichaque coefficient d’une fonction f dans la décomposition de f
dans les Wn sera déterminé indépendemment des autres coefficients.
5.2
Un mot sur les splines linéaires
(Vous pouvez passer cela en première lecture))
Une fonction σh linéaire par morceaux de pas h et passant par les points (ih, yi )i∈ZZ s’écrit
(B = ϕ a été définie plus haut) :
σh =
X
i∈ZZ
(vérifiez-le facilement !).
.
yi B( /h − i)
Une fonction σh/2 linéaire par morceaux de pas h/2 et passant par les points (ih/2, zi )i∈ZZ
s’écrit sous les deux formes suivantes :
σh/2 =
X
i∈ZZ
.
zi B(2 /h − i) =
X
i∈ZZ
.
z2i B( /h − i +
X
i∈ZZ
.
δi1 B(2 /h − (2i + 1))
Où les δi1 , coefficients des “détails de niveau 1”, vérifient δi = z2i+1 − y2i +y2 2i+2 .
Par récurrence, une fonction linéaire par morceaux de pas h/2n peut s’écrire sous la forme
suivante, où σh est une fonction linéaire par morceaux de pas h.
σh/2n = σh +
.
X X
k=1:n i∈ZZ
.
δik B(2k /h − (2i + 1))
De sorte que les (B(2 − i))i∈ZZ forment une base d’un espace W0′ , complémentaire de de
V0 dans V1 (V1 = V0 + W0′ ), mais comme B(2 − 1) n’est pas orthogonal (au sens L2 ) à B, il
ne s’agit pas d’une base de W0 . La conséquence est aue l’on ne pourra pas utiliser facilement
ces fonctions pour des approximations des moindres carrés (mais il sera facile de les utiliser
pour interpoler, comme on l’a vu ci-dessus).
.
On sait cependant déterminer directement des ondelettes linéaires par morceaux (“ondelettes splines linéaires “ !). Sans rentrer dans le détail de leur détermination √
(qui sortirait du
cadre√
de cette introduction rapide),√en voici la forme explicite, en notant α = 3−2 ≃ −0, 27,
P
y0 = 3 − 1, ∀i ∈ ZZ − {0} , yi = 3 α|i| , on a la relation ψ(x) = i∈ZZ yi B(2x − 1). Attention cependant ! Cette ondelette est normalisée sur ℓ2 mais pas sur L2 !. Remarquez que cette
ondelette est “oscillante” avec oscillations décroissantes (pratiquement le cas de toutes les ondelettes, c’est même ce qui a donné le nom “ ondelettes”), mais aussi que cette décroissance
est exponentielle, avec un rapport de α, ce qui es peu différente de -0,27 ; cela enst une
décroissance rapide, qui permettra de tronquer assez rapidement les calculs.
Voici le graphique de cette ondelette.
!!!!!!!!
Ondelette spline linéaire
30
5.3
Fourier : on aime encore !
En fait, Fourier nous est encore très utile dans le travail avec les ondelettes. En effet, sans
le voir, nous avons manipulé un produit de convolution lorsque nous manipulions les ondelettes de Haar. Effectivement, la relation (calcul des moyennes) bi = u2i /2 + u2i+1 /2 est, en
notant b′i = b2i , le produite de convolution b′ = a∗u, où a est le vecteur (..., 0, 0, 12 , 21 , 0, 0, 0, ...).
On a donc bb′ = ab ub. Même chose (avec un signe moins) pour les coefficients des détals. On a
la même chose (avec un vecteur a plus compliqué) dans la situation générale des ondelettes.
De sorte que les calculs pourront, dans le cas général, être effectués rapidement en utilisant
la transformée de Fourier rapide (FFT).
5.4
Analyse Multiresolution (AMR)
(“Multiresultion analysis”, ou “MRA” if you just speak English)
En formalisant tout cela en vue de l’analyse des fonctions de L2 , on pose la définition
suivante :
Définition
Une suite (Vj )j∈ZZ de sous-espaces fermés Vj de L2 (IR) est une ‘‘ analyse multirésolu
de L2 (IR)’’ si elle vérifie les six propriétés suivantes :
1. ∀(j, k) ∈ ZZ , f ∈ Vj ⇐⇒ f ( − k 2−j ) ∈ Vj
2. ∀j ∈ ZZ , Vj+1 ⊃ Vj
.
3. lim j → −∞Vj =
4. lim j → +∞Vj =
+∞
T
j=−∞
+∞
S
j=−∞
Vj = {0}
Vj = L2 (IR)
.
5. ∀j ∈ ZZ , f ∈ Vj ⇐⇒ f (2 ) ∈ Vj+1
6. Il existe une fonction ϕ dans V0 telle que (ϕ( −i))i∈ZZ soit une base de Riesz
de V0 . C’est à dire qu’il existe deux réels positifs A et B tels que toute fonction
P
f de V0 se décompose de manière unique sous la forme f = i∈ZZ ai ϕ( − i), les
coefficients ai de la décomposition vérifiant
.
.
A kf k22 ≤
X
i∈ZZ
(ai )2 ≤ B kf k22
(cette relation est souvent appelée relation de stabilité).
Remarque : il est bon de comprendre la signification “concrète” de chacune de ces propriétés
(sauf pour la propriété 6., pour laquelle ce n’est pas très intuitif).
Il s’en déduit toute une nouvelle forme d’analyse des fonctions (y compris transformée en
ondelette, analogue en version ondelette de la transformée de Fourier, tranformée en ondelette
rapide analogue à la FFT...) fort intéressante. Comme indiqué plus haut, le couplage des
propriétés avec la tranformée de Fourier est souvent forte de possibilités et d’intérêt (ainsi
par exemple, une famille (ϕ( − i))j∈ZZ de l’espace V0 qu’elle engendre si et suelement si il
existe A > 0 et B > 0 tels que
.
∀ω ∈ [ .. , ]
−ππ
X
1
1
b
≤
|ϕ(ω
− 2iπ)|2 ≤
B i∈ZZ
A
31
Remarque : A partir des propriétés ci-dessus, on voit qu’il existe un vecteur a tel que ϕ =
a ∗ ϕ(2 ).
.
5.5
Dimension 2
En dimension d ≥ 2, les principes de décompositon restent les mêmes, mais, comme on l’a
vu avec les ondelettes de Haar, il faut plusieurs ondelettes, puisque un pavé en dimension d
est coupé en 2d parties si l’on coupe chaque composante en 2. Il faut donc 2d ondelettes. Sur
le fond les choses ne sont pas fondamentalement plus compliquées, mais de bonnes notations
(en particulier les multi-entiers) sont cependant nécessaires.
La plupart des analyses multirésolutions sont opérées par produit tensoriel, il existe
cependant des analyses multirésolutions (des espaces V0 ... autant dire des fonctions ϕ qui ne
sont pas des produits tensoriels de fonctions à une variables (c’est à dire qui ne vérifient pas
ϕ(x, y) = ϕ1 (x) ϕ2 (y)), et elles ont l’avantage de moins “marquer” les directions des axes
comme des directons privilégiées.
5.6
Utilisation
On a vu, bien sûr, la question de la compression du signal, de l’image, ainsi que la question
du filtrage (en mettant à zéro les coefficients de certains niveaux de détails, on réalise un
filtre....).
On peut aussi utiliser les ondelettes pour approcher des solutions localement irrégulières :
plutôt que d’affiner le maillage localement, on peut décomposer la fonction recherchée en
ondelettes, jusquà un niveau suffisamment fin pour les zones “perturbées”, en imposant à
zéro les coefficients des détails de certains niveaux dans les zones peu perturbées. On réalise
ainsi une forme de maillage “semi-régulier”, plus resséré dans les zones à problème que dans
les zones régulières.
32
Chapitre 6
Bureau d’études, travail à faire
Travail demandé
Je vous demande d’approfondir, en travail personnel, une direction de travail que nous
avons abordée.
Ce peut être, par exemple :
. Compresser des images par l’ondelette de Haar (programme entièrement réalisé par vous-
même), représentation dans la forme habituelle expliquée dans la partie consacrée à l’ondelette de Haar.
. Utiliser diverses ondelettes avec la boite à outils “wavelets” de matlab (dimension 1,
dimension 2... à vous de voir ce que vous préférez),. Comparez alors l’intérêt de telle ou telle
ondelette (vitesse de convergence, précision, régularité, effets de bord...)
. Avancer un peu dans la théorie, avec si possible une application explicite ou mentionnée
comme en vue.
. Travail de synthèse d’un chapitre d’un livre.
. Prendre un chapitre d’un cours ou d’un livre, et le transformer en “cours problématisé”,
c’est à dire modifier l’esprit du texte déclaratif en un texte introduisant les notions, mais
demandant au “lecteur” de faire une partie du travail (réflexion, démonstration, illustration....).
. ...
J’estime qu’un travail entre 20 et 30 heures par personne devrait vous permettre de faire
des choses intéressantes et de mieux assimiler ce que nous avons fait ensemble.
Un compte-rendu d’une vingtaine de pages devrait être suffisant.
Vous ferez ce travail individuellement, ou bien un travail “couplé” en binôme. Dans ce
cas vous devrez préciser qui a fait quoi.
Déclaration d’honnêteté et de non-plagiat
Je demande que votre compte-rendu comporte la phrase mentionnée dans la charte de
non-plagiat de l’INSA, à savoir :
“J’atteste ne pas avoir utilisé les phrases ou les travaux d’un autre en les laissant passer
pour les miennes, et avoir cité l’ensemble de mes sources”
Pour un travail en binôme :
“Nous attestons dominer tous deux l’ensemble du travail présenté, et que celui-ci correspond à un volume de travail équilibré entre les deux signataires de ce travail. Nous attestons
ne pas avoir utilisé les phrases ou les travaux d’un autre en les laissant passer pour les notres,
et avoir cité l’ensemble de nos sources”
33