Projet Algorithmique Numerique Compression d’image a travers la factorisation SVD Projet n˚1 Groupe n˚2 Responsable : classerre Secr´etaire : mghozzi Codeurs : makdim, jdiebold, kgalienne Compression d’image ` a travers la factorisation SVD R´esum´e : Ce projet consiste a ` mettre en place les outils n´ecessaires de manipulation de matrices pour faire de la compression d’images par la factorisation SVD des matrices. Ainsi, la premi`ere partie concernera les fonctions qui permettent de manipuler les matrices de Householder. La deuxi`eme partie mettra en place une fonction qui transforme une matrice A en une matrice bidiagonale H. Dans la troisi`eme partie, une fonction qui transforme une matrice bidiagonale BD en une matrice siagonale S sera d´efinie. Et dans la quatri`eme partie, les transformations pr´ec´edentes seront appliqu´ees afin de r´ealiser la compression d’images. Transformations de Householder Dans cette partie, nous nous int´eressons aux matrices de Householder, et nous allons mettre en place deux fonctions permettant de manipuler ces matrices. Matrice de Householder associ´ ee ` a deux vecteurs Dans un premier temps, nous avons cr´eer une fonction qui, ´etant donn´e deux vecteurs pass´es en param`etres de mˆeme norme, retourne la matrice de Householder associ´ee. Rappelons que H = Id − 2 × U t U , il faut alors exprimer X−Y U en fonction de X et Y : U = kX−Y ement´e l’algorithme 1 : k . Nous avons alors impl´ Entr´ ee : X, Y : : deux vecteurs de mˆeme norme Sortie : H tel que HX = Y V ←X −Y; U ← V / kV k; I ←identite(taille(X)); Retourner : I − 2 × U t U Algorithme 1 : Algorithme de g´en´eration de matrice de Householder La compl´exit´e de cet algorithme est O(n2 ), la somme de deux matrices se faisant en temps quadratique (en supposant que la fonction la.norm de numpy ait une complexit´e inf´erieure `a O(n2 )). Produit d’une matrice de Householder par un vecteur Dans un second temps, nous cherchons ` a effectuer le produit d’une matrice de Householder par un vecteur de mani`ere optimis´ee. Pour cela, nous n’allons pas directement calculer HX mais nous allons utiliser la formule HX = X − 2 × U (t U X). Dans un premier temps, il faut g´en´erer H `a partir de U, `a partir de la formule suivante : T (= U t U ) = −(H − Id/2), √ U0 = T00 Ui = T0i /U0 On obtient alors U ou −U , ce qui est ´equivalent puisque U t U = (−U )(−t U ) L’algorithme de calcul du produit se fait alors en O(n) : la g´en´eration de U, les produits vecteur-vecteur et vecteur-scalaire et la somme vecteur-vecteur se font en O(n). La g´en´eralisation de ce produit ` a un produit matrice-matrice permet de g´en´erer un algorithme de complexit´e O(n2 ) (on fait n produit matrice-vecteur), complexit´e inf´erieure `a celle d’un produit matrice-matrice usuel qui est de O(n3 ). Enseirb-Matmeca 1 Informatique-I1 Projet Algorithmique Numerique Compression d’image a travers la factorisation SVD Mise sous forme bidiagonale Cette deuxi`eme partie consiste en l’impl´ementation d’une fonction qui applique les transformations de Householder pour d´ecomposer une matrice A sous la forme A=Qleft*BD*Qright, avec BD une matrice bidiagonale. L’algorithme de cette fonction est le suivant : Entr´ ee : A : : Matrice carr´ee Sortie : Qlef t, BD, Qright : : Qleft et Qright des matrices orthogonaux et BD matrice bidiagonale Qlef t ← Id; Qright ← Id; BD ← A; pour (i=0 ; i<= (n-1) ; i++) faire Q1 ← Householder(BD[i :n,i],V1(i)); Qleft ← Qleft*Q1; BD ← Q1*BD; si (i=(n-2)) alors Q2← Householder(BD[i,(i+1) :n],V2(i)); Qright← Q2*Qright; BD ← BD*Q2; Retourner : Qleft , BD , Qright Algorithme 2 : Algorithme de bidiagonalistion Le vecteur V1(i) est telque 1 0 . V 1(i) = kBD[i : n, i]k ∗ . . 0 Et V2(i) est tel que : 1 0 . V 1(i) = kBD[i, (i + 1) : n]k ∗ . . 0 Transformations QR Dans cette partie nous allons ´etablir la fonction de d´ecomposition SVD en utilisant la d´ecomposition QR plusieurs fois sur une matrice bidiagonale. Enseirb-Matmeca 2 Informatique-I1 Projet Algorithmique Numerique Compression d’image a travers la factorisation SVD Premier Algorithme Entr´ ee : A : : une matrice bidiagonale Sortie : (U, S, V ) : : trois matrices qui correspendent `a la d´ecomposition SVD de A U ← identite(taille(A)); V ← identite(taille(A)) ; S ← A; pour (i=0 ; i<= nMax ; i++) faire (Q1,R1) ← decompositionQR(transpose(S)); (Q2,R2) ← decompositionQR(transpose(R1)); S ← R2; U ← U*Q2; V ← transpose(Q1)*V; Retourner : (U, S, V ) Algorithme 3 : Algorithme de d´ecomposition SVD La complexit´e de cet algorithme est ´equivalente au produit de nMax et la complexit´e de la d´ecomposition QR fournie par python. On voit que la matrice R (que nous avons pris comme ´etant la matrice R2) converge vers une matrice diagonale. La figure ref figurepermet de voir la vitesse de convergence de R `a partir de la matrice S : −1 −20 0 0 0 0 −5 −16 0 0 S= 0 0 18 −25 0 0 0 0 8 6 Optimisation Dans un premier temps, nous allons prouver que les matrices S, R1 et R2 sont toujours bidiagonales. Pour cela, il faut prouver que si S est bidiagonale et S=QR, alors R est bidiagonale : Q ´etant orthogonale, Q−1 l’est aussi, or la multiplication par une matrice orthogonale conserve les particularit´es de la matrice, donc si Q−1 ∗ S est bidiagonale, alors R est bidiagonale. Ceci montre que : S bidiagonale → R1 bidiagonale ; R1 bidiagonale → R2 bidiagonale ; et R2 bidiagonale → S bidiagonale. (car S=R2) Enseirb-Matmeca 3 Informatique-I1
© Copyright 2024 Paperzz