Projet 3 : Compression d’image à travers la factorisation SVD

Le but de ce projet consiste à programmer un algorithme permettant de faire de la compression d’images en utilisant des techniques matricielles basée sur la factorisation SVD. Ce type d’algorithme est à relier aux algorithmes de compression avec pertes, dont le plus connu est certainement l’algorithme de compression JPEG, lui-même basé usuellement sur la Discrete Cosine Transform (DCT), une transformation voisine de la transformée de Fourier discrète.

Tout au long du sujet, nous allons manipuler des images sous forme de matrices. Avec matplotlib, il est possible de charger de telles matrices en utilisant le code suivant :

import numpy as np
import matplotlib.pyplot as plt

img_full = plt.imread("p3_takeoff_base.png")
n, m, colors = img_full.shape
print(n,m,colors)
300 400 3

Un exemple d’image en couleur (image du domaine public, dûe à la NASA). Les images sont en couleurs correspondant à des matrices de triplets RGB. Il est alors nécessaire d’en extraire les composantes rouge, verte et bleue avant de pouvoir chercher à les compresser.

Tout au long de ce projet, notre but va consister à mettre cette matrice (notée $A$, de dimensions $n\times m$) sous la forme suivante : $A = U \times S \times V$ où $U$ et $V$ sont des matrices orthogonales carrées (respectivement de dimensions $m \times k$ et $k \times n$ avec $k = \min( m, n )$, et $S$ est une matrice de dimensions $k \times k$, diagonale réelle, pour laquelle les éléments diagonaux sont positifs et forment une suite décroissante.

Le sujet se décompose alors en quatre parties :

  • la première partie met en place les fonctions utilitaires pour manipuler les matrices de Householder, nécessaires à la réalisation des deux parties suivantes;
  • la seconde partie transforme la matrice $A$ en une matrice bidiagonale $BD$ par une méthode directe;
  • la troisième partie transforme une matrice bidiagonale $BD$ en une matrice diagonale $S$ par une méthode itérative;
  • la dernière partie applique ces transformations à l’algorithme de compression d’image par factorisation SVD.