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 :