Dans cet exemple d’utilisation de l’ACP, nous partons d’une image quelconque (quoique…), pour la compresser en utilisant l’ACP. Pour évaluer l’intérêt de la méthode, pour différents nombres d’axes, l’image reconstruite ainsi que la taille des éléments nécessaire à la reconstruction sont affichées.

Le code est visible afin de reproduire l’exemple avec une autre photo.

Image initiale

Comme indiquée, l’image prise ici est simplement ma photo disponible sur la page contact. La librairie jpeg permet d’importer et d’exporter des fichiers JPG, grâce entre autres à la fonction readJPEG().

Il est possible d’afficher cette photo, grâce à la fonction rasterImage(). On retrouve bien l’image originale. Sa taille est non négligeable (14.1 Mb). On en profite pour créer une fonction qui sera utile par la suite pour afficher les images reconstruite.

Découpage en rouge, vert et bleu

Pour compresser cette image, nous allons découper celle-ci dans les trois composantes classiques d’une image : rouge, vert et bleu. Chaque pixel est représenté par une triplet de valeurs entre 0 et 1, représentant la quantité de chaque couleur de base à afficher.

Il est donc possible de représenter ces trois composantes d’une image séparément, tel que ci-dessous.

Compression via ACP

La compression va utiliser une ACP sur chaque composante. Pour cela, nous calculons les valeurs de l’ACP pour chacune, que nous stockons dans une liste pour simplifier le travail par la suite.

On créée trois fonctions permettant, é partir d’un nombre d’axes passé en paramétre : - de calculer la taille des objets utilisés pour recréer l’image, - de reconstruire l’image, - d’afficher l’image reconstruite.

Lorsque nous utilisons uniquement 1 axe, l’image reconstruite est bien évidemment assez loin de l’image de départ.

Avec 3 axes, on se rapproche , au moins de l’idée générale de l’image de base.

Avec 20 axes, l’image est clairement reconnaissable, avec une taille trés raisonnable par rapport é la taille initiale.

Bien évidemment, plus on ajoute d’axes, plus on se rapproche de l’image originale.

Avec 320 axes, bien qu’en ayant divisé presque par 4 la taille de l’image, celle reconstruite est trés proche de l’image originale.

Qualité de l’image reconstruite

On peut aller plus loin et calculer, pour chaque nombre d’axes, la distance entre l’image originale et l’image reconstruite, en sommant les écarts au carré par exemple. On voit clairement que la taille augmente linéairement par rapport aux nombre d’axes. Pour la différence par rapport é l’originale, on remarque que le gain de qualité se fait trés rapidement.

Lorsqu’on zoome avec moins de 50 axes retenus, on remarque que la qualité de l’image reconstruite semble trés bonne méme avec seulement 50 axes retenus, comme vu précédemment. Cette compression permet de diviser la taille de l’image par 22.8.