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