TD : Compression des images et perte de qualité.

Vincent GODARD - V4- 30/03/2023

Cours SIG et télédétection

Département de géographie - L3 - Université de Paris 8

Inspiré de :

Sources :

Téléchargement des documents nécessaires :

Dossier compressé à télécharger => ici.

1. Chargement des données et des bibliothèques

1.1 Chargement des données

Créez dans le répertoire TD11 un sous répertoire "data" où vous déposerez (bouton Upload Files), depuis votre zone de stockage, les fichiers :

- how87tm3.tif

- how87tm4.tif

Ce noteboock et le répertoire "data" seront au même niveau dans l'arborescence, tous les deux sous TD12.

1.2 Chargement des bibliothèques (library)

Dans le JupyterLab, la bibliothèque Matplotlib est déjà installée. Si la bibliothèque skimage ne l'est pas, il faut l'installer. Idem pour numpy.

Il faut ensuite les charger (fonction import).

On pourra avantageusement regarder à quoi servent les bibliothèques https://scikit-learn.org/stable/ ou https://scikit-image.org/ dont il existe parfois des Wiki en français https://fr.wikipedia.org/wiki/Scikit-learn ou https://fr.wikipedia.org/wiki/Scikit-image ou bien encore https://fr.wikipedia.org/wiki/NumPy.

2. Chargement et affichage des données

2.1 Chargement des données

Lecture d'un fichier image centré sur le secteur des Howe Hill, à l'ouest de Worcester dans le Massachusetts (USA). C'est la bande TM4 (PIR, proche infra-rouge) du Landsat Thematic Mapper (TM) du 10 septembre 1987.

Contrairement au TD11, le fichier n'est plus dans un format .jpg (format compressé JPEG, https://fr.wikipedia.org/wiki/JPEG) mais .tif (format compressé ou non TIFF, https://fr.wikipedia.org/wiki/Tagged_Image_File_Format).

2.2 Affichage du contenu de l'image

On peut aussi vouloir connaître la profondeur de notre variable (son codage) par son type.

○ La fonction type() renvoie le type de objet (entier, texte, tuple...) : https://docs.python.org/fr/3/glossary.html#term-type

Le type est un entier (unsigned integer 8bits) codé sur un octet (256 niveaux de gris par exemple).

2.3 Affichage de l'image HOW87TM4 en niveaux de gris

3. Compression en JPEG

Compression dans un des formats les plus courants, le JPEG (https://fr.wikipedia.org/wiki/JPEG).

3.1 Création de l'image compressée

Compression de l'image HOW87TM4 en jpeg avec un niveau de compression compris entre 1 et 100

Après la compression, il faut comparer les deux fichiers. La première étape peut être visuelle.

À l’œil, celles-ci doivent être encore très ressemblantes. Sinon, les indicateurs statistiques de similitude risquent d'être très défavorables !

À l'œil, la différence n'est pas flagrante !

3.2. Comparaison de l'image compressée HOW87TM4 en JPEG avec l'image TIFF d'origine

Comparaisons visuelles et statistiques.

3.2.1 Comparaison visuelle

Utilisation de la fonction subplot() de "matplotlib.pyplot" qui permet d’organiser différents tracés à l’intérieur d’une grille d’affichage (https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplot.html ou en français https://courspython.com/tracer-plusieurs-courbes.html#affichage-de-plusieurs-traces-dans-la-meme-figure).

La répartition spatiale des différentes valeurs d'écarts (du bleu au jaune) semble assez homogène.

3.2.2 Comparaison statistique

Utilisation de la MSE (Mean-squared error, erreur quadratique moyenne) comme indicateur statistique de la perte due à la compression.

Qu'est-ce que la MSE [mean-squared error ou erreur quadratique moyenne (EQM) https://fr.wikipedia.org/wiki/Erreur_quadratique_moyenne] ? Allez voir le paramétrage et les explications en suivant ce lien : https://scikit-image.org/docs/stable/api/skimage.metrics.html#skimage.metrics.mean_squared_error.

Comme c'est une valeur brute, il est difficile de savoir si cette perte d'information (écart à l'image d'origine) est importante !

Nous allons comparer cette valeur de MSE avec celle obtenue, au prochain chapitre, sur une autre compression, la PNG.

4. Comparaison de l'image compressée HOW87TM4 en PNG avec l'image d'origine en TIFF

4.1 Compression en PNG

Sauvegarde de l'image HOW87TM4 avec un niveau de compression par défaut, quand c'est en .png .

Après la compression, il faut comparer les deux fichiers. Déjà visuellement.

À la lecture, celles-ci doivent être très ressemblantes !

À l’œil, la différence n'est toujours pas flagrante !

4.2 Comparaison de l'image compressée HOW87TM4 en PNG avec l'image TIFF d'origine

Comparaisons visuelles et statistiques.

4.2.1 Comparaison visuelle

Utilisation de la fonction subplot() de "matplotlib.pyplot" qui permet d’organiser différents tracés à l’intérieur d’une grille d’affichage (https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplot.html ou en français https://courspython.com/tracer-plusieurs-courbes.html#affichage-de-plusieurs-traces-dans-la-meme-figure).

La répartition spatiale des différentes valeurs d'écarts (du bleu au jaune) semble assez homogène.

4.2.2 Comparaison statistique

Utilisation de la MSE (Mean-squared error, erreur quadratique moyenne) comme indicateur statistique de la perte due à la compression.

Qu'est-ce que la MSE [mean-squared error ou erreur quadratique moyenne (EQM) https://fr.wikipedia.org/wiki/Erreur_quadratique_moyenne] ? Allez voir le paramétrage et les explications en suivant ce lien : https://scikit-image.org/docs/stable/api/skimage.metrics.html#skimage.metrics.mean_squared_error.

Donc, pas de perte (MSE = 0) avec une compression en PNG !

Cependant, comparez la taille des fichiers TIFF, JPEG et PNG dans votre répertoire des données (data) !

5. Sauriez-vous compresser l'image HOW87TM3 en JPEG puis en PNG et les comparer successivement avec l'image d'origine en TIFF ?

Ne soyez pas surpris si l'image HOW87TM3 est très sombre. Sa dynamique est faible. Nous verrons au TD 14 comment l'analyser et l'améliorer.