1 transformations de householder · pdf filen tn jjnjj2 (1) nous ... matrice-matrice usuel...

8
Projetn˚2 COMPRESSION D’IMAGE A TRAVERS LA FACTORISATION ”SVD” Groupe n˚2 - Equipe n˚4 Responsable : xluo Secr´ etaire : imhamdi Codeurs : achasseloupdechatill,wandujar,ygarbage esum´ e: Ce projet consiste ` a mettre en place un algorithme permettant de faire la compression d’images. Pour cela on utilisera des techniques matricielles bas´ ees sur la factorisation SVD. La premi` ere partie de ce projet met en place les fonctions de manipulation des matrices de HouseHolder qu’on utilisera dans les deux parties suivantes afin de transformer une matrice A en une matrice bidiagonale BD avec les deux m´ ethodes directe et it´ erative. La derni` ere partie applique alors ces transformations ` a l’algorithme de compression d’image par transformation SVD. 1 Transformations de Householder Dans cette partie, nous allons expliquer les algorithmes utilitaires mis en place pour manipuler les matrices de Householder. 1.1 La matrice de HouseHolder Une matrice de HouseHolder associ´ ee ` a un vecteur non nul N de taille n peut s’´ ecrire sous la forme suivante o` u id est la matrice identit´ e de dimension n : H = Id - 2 × N t N ||N || 2 (1) Nous souhaitons dans un premier temps trouver l’expression du vecteur N de taille n pour que la matrice de HouselHolder H envoie le vecteur X (de taille n) sur le vecteur Y de mˆ eme taille et norme que X. L’expression math´ ematique du vecteur N en fonction de X et Y est la suivante : N = X - Y ||X - Y || (2) Nous avons donc mis en place un algorithme que nous avons appel´ e obtenirVecteurSymetrie(X,Y) qui permet ` a l’aide de l’´ equation (2) d’obtenir le vecteur de sym´ etrie N efinissant la matrice de HouseHolder. Ensuite, pour obtenir la matrice de HouseHolder ` a partir des vecteurs X et Y nous avons d´ efini la fonction obtenirHouseHolderXY(X, Y) qui ` a l’aide de l’algorithme pr´ ec´ edent permet de trouver cette matrice en utilisant l’´ equation (1). L’algorithme obtenirHouseHolderN(N) fait la eme chose mais il prend comme param` etre le vecteur de sym´ etrie N . Ainsi pour envoyer 3 4 0 sur 0 0 5 la matrice de HouseHolder est 0.64 -0.48 0.6 -0.48 0.36 0.8 0.6 0.8 0 1

Upload: vuongtuyen

Post on 04-Mar-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Transformations de Householder · PDF fileN tN jjNjj2 (1) Nous ... matrice-matrice usuel admet une complexit e de l’ordre de n n ( vecteur vecteur) c’est- a-dire ... conserve

Projet n 2COMPRESSION D’IMAGE A TRAVERSLA FACTORISATION ”SVD”

Groupe n 2 - Equipe n 4

Responsable : xluoSecretaire : imhamdiCodeurs : achasseloupdechatill,wandujar,ygarbage

Resume : Ce projet consiste a mettre en place un algorithme permettant de faire la compression d’images.Pour cela on utilisera des techniques matricielles basees sur la factorisation SVD. La premiere partie de ceprojet met en place les fonctions de manipulation des matrices de HouseHolder qu’on utilisera dans les deuxparties suivantes afin de transformer une matrice A en une matrice bidiagonale BD avec les deux methodesdirecte et iterative. La derniere partie applique alors ces transformations a l’algorithme de compressiond’image par transformation SVD.

1 Transformations de Householder

Dans cette partie, nous allons expliquer les algorithmes utilitaires mis en place pour manipuler lesmatrices de Householder.

1.1 La matrice de HouseHolder

Une matrice de HouseHolder associee a un vecteur non nul N de taille n peut s’ecrire sous la formesuivante ou id est la matrice identite de dimension n :

H = Id− 2× N tN

||N ||2(1)

Nous souhaitons dans un premier temps trouver l’expression du vecteur N de taille n pour que lamatrice de HouselHolder H envoie le vecteur X (de taille n) sur le vecteur Y de meme taille et normeque X. L’expression mathematique du vecteur N en fonction de X et Y est la suivante :

N =X − Y

||X − Y ||(2)

Nous avons donc mis en place un algorithme que nous avons appele obtenirVecteurSymetrie(X,Y)

qui permet a l’aide de l’equation (2) d’obtenir le vecteur de symetrie N definissant la matrice deHouseHolder. Ensuite, pour obtenir la matrice de HouseHolder a partir des vecteurs X et Y nousavons defini la fonction obtenirHouseHolderXY(X, Y) qui a l’aide de l’algorithme precedent permetde trouver cette matrice en utilisant l’equation (1). L’algorithme obtenirHouseHolderN(N) fait lameme chose mais il prend comme parametre le vecteur de symetrie N .

Ainsi pour envoyer

340

sur

005

la matrice de HouseHolder est

0.64 −0.48 0.6−0.48 0.36 0.8

0.6 0.8 0

1

Page 2: 1 Transformations de Householder · PDF fileN tN jjNjj2 (1) Nous ... matrice-matrice usuel admet une complexit e de l’ordre de n n ( vecteur vecteur) c’est- a-dire ... conserve

1.2 Optimisation du produit matrice-matrice

La multiplication d’une matrice de HouseHolder H par un vecteur U revient simplement a trouverl’image de ce vecteur par la matrice de HouseHolder en utilisant l’expression initiale de H c’est a dire :

H × U =

(Id− 2× N tN

||N ||2

)U = U − 2× N tN

||N ||2U (3)

Pour cela nous avons cree une fonction appliquerHouseHolderVecteur prenant comme parametresles deux vecteurs X et Y definissant notre matrice de HouseHolder et le vecteur U . Cet algorithmecalcule le produit matriciel a l’aide de la fonction houseHolderInterne traduisant l’equation (3).Nous souhaitons optimiser le produit matriciel entre une matrice de HouseHolder et une autre ma-trice de meme taille. Pour eviter de faire un produit matrice-matrice nous avons utilise la fonctionprecedente qui fait intervenir uniquement des produits matrice-vecteur. L’algorithme mis en place estle suivant :

fonction appliquerHouseHolderMatrice(X,Y : vecteurs, M : matrice)N ← obtenirVecteurSymetrie(X, Y)

tN ← transposee de NL ← nombre de lignes de NC ← nombre de colonnes de MRes ← matrice L× C

pour i de 0 a L faire

iieme ligne de Res ← houseHolderInterne(N, tN, iieme colonne de M)

retourner Res

La complexite de cette fonction est de l’ordre de n produits matrice-vecteur (ou n est la taille dela matrice). D’autre part, d’apres l’algorithme appliquerHouseHolderVecteur un produit matrice-vecteur est equivalent a deux produits vecteur-vecteur donc de complexite 2 × n. Finalement, lacomplexite de notre algorithme est de l’ordre de 2 × n × n equivalent a Θ(n2). Alors que le produitmatrice-matrice usuel admet une complexite de l’ordre de n × n × Θ(vecteur − vecteur) c’est-a-direune complexite equivalente a Θ(n3).

2 Mise sous forme bidiagonale

Dans cette partie nous expliquons les algorithmes permettant de mettre une matrice carree sousforme bidiagonale. Pour ce faire, nous devons extraire des vecteurs colonnes et des vecteurs lignesd’une matrice donnee. Nous avons egalement besoin de generer des vecteurs a une seule composantenon nulle.

2.1 Extraction de vecteurs colonnes et lignes

Nous avons code deux fonctions extraireVecteurColonne(M, i) (respectivement la fonctionextraireVecteurLigne(M, i)) permettant d’extraire le vecteur colonne de la ieme colonne (respec-tivement le vecteur ligne de la ieme ligne) de la matrice M . Cependant, pour pouvoir utiliser les

2

Page 3: 1 Transformations de Householder · PDF fileN tN jjNjj2 (1) Nous ... matrice-matrice usuel admet une complexit e de l’ordre de n n ( vecteur vecteur) c’est- a-dire ... conserve

fonctions fournies par la partie 1 permettant d’obtenir des matrices de HouseHolder, les deux fonc-tions d’extraction produisent des vecteurs colonnes.

Exemple : si on se donne la matrice A suivante :

11 21 5 1248 548 16 88747 88 91 4517 32 68 17

, les appels des

fonctions extraireVecteurColonne(A, 1) et extraireVecteurLigne(A, 1) produisent lesvecteurs : t

(0 58 88 32

)et t

(0 0 16 887

)Les vecteurs ci-dessus ne sont pas exactement la 1ere ligne et la 1ere colonne de la matrice A. En effet,nous avons respecte les contraintes de l’algorithme de bidiagonalisation suivantes :

– le vecteur extrait de la ieme colonne a ses i premieres composantes nulles,– le vecteur extrait de la ieme ligne a ses i+1 premieres composantes nulles.

2.2 Generation de vecteurs de meme norme a une seule composante nonnulle

Nous avons egalement mis en place deux fonctions genererVecteurColonne(M, i) (respective-ment genererVecteurLigne(M, i)) permettant de generer le vecteur de meme norme que le vecteurcolonne extrait de la ieme colonne (respectivement le vecteur ligne extrait de la ieme ligne) et ayantseulement sa ieme (respectivement (i + 1)eme) composante non nulle.Ainsi, en considerant la meme matrice A que precedemment, les appels de genererVecteurColonne(A,1) et genererVecteurLigne(A, 1) produisent les vecteurs : t

(0 556 0 0

)et t

(0 0 887.1 0

)2.3 Mise sous forme bidiagonale d’une matrice carree

Ces fonctions auxiliaires etant disponibles, nous avons implemente l’algorithme de mise sous formebidiagonale suivant :

fonction miseSousFormeBidiagonale(A : matrice carree)n ← taille(A)Qleft, Qright ← matriceIdentite(n)BD ← Apour i de 0 a n− 1 faire

X ← extraireVecteurColonne(BD, i)singleX ← genererVecteurColonne(BD, i)Q1 ← obtenirHouseHolderXY(X, singleX)Qleft ← Qleft · Q1BD ← Q1 · BDsi (i < (n− 2)) alors

X ← extraireVecteurLigne(BD, i)singleX ← genererVecteurLigne(BD, i)Q2 ← obtenirHouseHolderXY(X, singleX) ;Qright ← Q2 · Qright

BD ← BD · Q2retourner (Qleft, BD, Qright)

3

Page 4: 1 Transformations de Householder · PDF fileN tN jjNjj2 (1) Nous ... matrice-matrice usuel admet une complexit e de l’ordre de n n ( vecteur vecteur) c’est- a-dire ... conserve

L’algorithme renvoie la matrice transformee, ainsi que les changements de base a gauche et a droite.A chaque tour de boucle de l’algorithme, nous pouvons verifier que Qleft ·BD ·Qright = A.

3 Transformations QR

Dans cette partie nous allons mettre sous forme SVD une matrice diagonale en appliquant uncertain nombre de fois la transformation QR.

3.1 Factorisation SVD

Dans un premier temps nous avons ecrit une fonction SVD decompositionQR qui prend commeparametres une matrice bidiagonale BD et un entier representant le nombre d’iterations a effectueret qui renvoie un triplet de matrices U , S et V ayant des proprietes specifiques. Cet algorithme utilisela fonction numpy.linalg.qr pour la transformation QR.Dans cet algorithme la matrice S converge vers une matrice diagonale :

Exemple : L’application de l’algorithme sur la matrice

1 4 0 00 4 1 00 0 3 40 0 0 3

donne la matrice

S =

5.85636553 0 0 0

0 5.50207658 0 00 0 1.73675226 00 0 0 0.64329448

en negligeant les termes < 10−5.

Pour montrer cette propriete nous avons mis en place des fonctions permettant de tester la conver-gence de S. La fonction dessinerConvergenceDiagS permet de dessiner cette convergence. Elle prendcomme parametres la taille de la matrice BD, la precision et le nombre d’iterations. L’algorithme estle suivant :

fonction dessinerConvergenceDiagS (n, step : entiers, precision : reel)BD ← matrice bidiagonale aleatoire de taille npour i de 1 a step faire

res ← SVD decompositionQR (BD, i)

S ← 2eme element de la liste resy[i] ← nombre d’elements extradiagonaux de S

Tracer le graphique y = f(step)

Pour une matrice bidiagonale de taille n et pour un nombre d’iteration egal a 100 nous avons obtenula Figure 1 (voir page suivante).

D’autre part, nous avons cree une fonction verifierInvariantEgalite USV BD pour s’assurer quel’invariant U × S × V = BD est toujours verifie (ce qui est le cas voir tests de la partie 3 ).

4

Page 5: 1 Transformations de Householder · PDF fileN tN jjNjj2 (1) Nous ... matrice-matrice usuel admet une complexit e de l’ordre de n n ( vecteur vecteur) c’est- a-dire ... conserve

Figure 1 – Convergence de S vers une matrice bidiagonale en fonction du nombre d’iterations

3.2 Optimisation de la decomposition QR

Nous allons maintenant montrer l’invariant S,R1 et R2 sont des matrices bidiagonales.L’algorithme de factorisation SVD SVD decompositionQR prend comme parametre une matrice bidi-agonale. Donc, S est une matrice bidigonale des le depart. Or, d’apres le cours la factorisation QRconserve la forme d’une matrice tridiagonale. Pour montrer l’invariant nous pouvons alors suivre leraisonnement suivant :S est une matrice bidiagonale superieure⇒ tS est une matrice bidiagonale inferieure.⇒ tS est une matrice tridiagonale.⇒ R1 est une matrice tridiagonale (car la factorisation QR conserve la forme tridiagonale).⇒ R1 est une matrice bidiagonale superieure (car R1 est une matrice triangulaire superieure - d’apresla decomposition QR - et tridiagonale).On peut suivre le meme raisonnement pour R2 pour montrer l’invariant.

Nous allons maintenant calculer la complexite de l’algorithme de factorisation SVD sachant quenous n’avons pas reussi a implementer l’algorithme optimise de la factorisation QR. Notons Θ(QR) lacomplexite de la factorisation QR. La complexite de l’algorithme de decomposition SVD est de l’ordrede step×Θ(QR) or d’apres le cours la complexite de l’algorithme de decomposition QR est de l’ordrede step×Θ(n2) et peut meme aller jusqu’a step×Θ(n) si la matrice de depart est bidigonale. Doncla complexite de la fonction de factorisation SVD optimisee est de l’ordre de Θ(step2 × n).

5

Page 6: 1 Transformations de Householder · PDF fileN tN jjNjj2 (1) Nous ... matrice-matrice usuel admet une complexit e de l’ordre de n n ( vecteur vecteur) c’est- a-dire ... conserve

3.3 Modification des matrices U et S

La decomposition SVD demande a ce que les elements de la matrice S soient positifs et ordonnesde maniere decroissante. Nous avons donc cree une fonction modifierUS qui prend comme parametreles matrices U et S et les modifie de sorte que S verifie la propriete precedente et que l’invariant(U × S × V ) = BD soit conserve.

fonction modifierUS (U, S : matrice)l← nombre de lignes de S

C ← nombre de colonnes de S

diagS ← diagonale de S

triS ← les elements de la diagonale de S positifs et tries

diagS ← diagStriS

pour i de 0 a min(l, C) faire

S[i,i] ← triS[i]

iieme colonne de U ← iieme colonne de U × diagS[i]

retourner (U,S)

4 Application a la compression d’image

Dans cette partie nous appliquons la transformation SVD a l’algorithme de compression d’image.Nous avons commence par mettre en place un algorithme CompressionRangK permettant d’obtenirune compression au rang k d’une matrice carree donnee. En effet, cet algorithme modifie le rang dela matrice S en la copiant jusqu’a la colonne k et en mettant a 0 le reste des valeurs.

4.1 Gain pour la compression au rang k

Soit A la matrice carre de dimension n representant l’image d’origine. Notons A′ la matrice del’image compressee. En decomposant les matrices U , S et V par blocs, on obtient le calcul suivant :

A′ =

(U1 U2

U3 U4

)(S1 00 0

)(V1 V2

V3 V4

)=

(U1S1V1 U1S1V2

U3S1V1 U3S1V2

)(4)

On remarque alors que les blocs U2, U4,V3 et V4 n’interviennent pas dans le resultat final. Pourstocker la matrice A′, il suffit donc de memoriser les valeurs des blocs S1, U1, U3, V1, et V2, soitk + 2k(n− k) + 2k2 = 2kn + k valeurs.Le gain de place pour une compression au rang k vaut donc n2 − 2kn − k. Si ce gain est stricte-ment negatif, la transformation est de taille superieure a l’image initiale. En revanche, pour que la

compression soit efficace, k ne doit pas depasser n2

2n+1 .

4.2 Efficacite de la compression

Afin de pouvoir determiner l’efficacite, il a fallu utiliser un exemple. Nous avons choisi l’exemplede l’image de la NASA representant la terre (500pxpar500px). Pour pouvoir l’exploiter, il nous a fallurealiser son acquisition, son traitement et sa recomposition.

6

Page 7: 1 Transformations de Householder · PDF fileN tN jjNjj2 (1) Nous ... matrice-matrice usuel admet une complexit e de l’ordre de n n ( vecteur vecteur) c’est- a-dire ... conserve

4.2.1 Acquisition, traitement et recomposition de l’image

L’image est encodee sous forme d’une matrice de pixels, eux meme representes sur la base dusysteme RGB par des matrices de trois elements. Une fois l’acquisition effectuee, il faut decomposercette matrice en trois matrices afin de pouvoir travailler sur chaque couleur des pixels. Pour ce faire,nous avons utilise la fonction suivante :fonction decomposerMatrice(M : Matrice)

n ← taille(S)

M1, M2, m3 ← CreerMatriceCarre(n)

pour i de 0 a k faire

pour j de k a n faire

M1[i][j] = M[i][j][0]

M2[i][j] = M[i][j][1]

M3[i][j] = M[i][j][2]

retourner M1, M2, M3

Une fois l’image acquise, on applique l’algorithme de compression en utilisant la decomposition SVD,puis en appliquant l’algorithme de compression au rang k pour chacune des trois matrices issues dela SVD.La recomposition de l’image est basee sur le meme principe que l’algorithme de decomposition, nousne detaillerons pas son contenu.

4.2.2 Exemples

Voici ci-dessous deux exemples d’application de nos algorithmes de compression au rang 50 et aurang 100 avec a gauche l’image d’origine.

image initiale compression au rang 50 compression au rang 100

Figure 2 – compression d’une image au rang 50 et 100

7

Page 8: 1 Transformations de Householder · PDF fileN tN jjNjj2 (1) Nous ... matrice-matrice usuel admet une complexit e de l’ordre de n n ( vecteur vecteur) c’est- a-dire ... conserve

4.2.3 Efficacite

L’efficacite de la compression se determine a partir de la distance entre la matrice de depart etla matrice de l’image compressee. Pour cela, on utilise la norme fournie par la bibliotheque numpy

appliquee sur la difference entre les deux matrices.

Efficacite(Mat dep, Mat res) = ||Mat dep - Mat res ||

Ainsi, en iterant cette methode pour des compressions allant de k = 0 a k = 500 on obtient lacourbe de l’efficacite suivante :

Figure 3 – Courbe de l’efficacite de la compression en fonction du rang k

5 Conclusion

Ce projet nous a paru particulierement interessant pour ce qui est de la manipulation des matricesde HouseHolder et de l’implementation d’algorithmes de factorisation matricielle (factorisation QR).Il nous a permis d’apprendre la factorisation SVD et de voir un exemple concret de son application :la compression d’image.

8