TD : Afficher l'histogramme d'une composition colorée.¶

Vincent GODARD - V1- 03/03/2022

Cours SIG et télédétection¶

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

Inspiré de :

  • Creating Histograms https://datacarpentry.org/image-processing/05-creating-histograms/

Sources :

  • données Landsat Thematic Mapper (TM) du 10 septembre 1987, ouest de Worcester, Massachusetts (issues du https://clarklabs.org/download/)

  • scikit-image https://scikit-image.org/

  • matplotlib https://matplotlib.org/


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 un sous répertoire "Data" en dessous de ce notebook (.ipynb). Déposez (bouton Upload Files), depuis votre zone de stockage, le fichier suivant dans ce sous répertoire :

- how87tm234.jpg

1.2 Chargement des programmes¶

In [ ]:
# Pour installer skimage, effacez le # (avant le "!").
# !pip install numpy
# !pip install scikit-image
# !pip install matplotlib
# !pip install ipympl # si version antérieure à Python 3.01.2, sinon message d'erreur avec le widget (window gadget)

import numpy as np
import skimage.color
import skimage.io
import matplotlib.pyplot as plt


#%matplotlib widget # si version antérieure à Python 3.01.2, sinon message d'erreur avec le widget (window gadget)

2. Affichage de la composition colorée et de son histogramme en niveau de gris¶

2.1 Affichage de la composition colorée (CC) HOW87TM234 en niveau de gris¶

In [ ]:
# Lecture de la composition colorée fausse couleur des How Hill (MA) en niveau de gris
image = skimage.io.imread(fname='data/how87tm234.jpg', as_gray=True)

# Affichage de l'image
fig, ax = plt.subplots()
plt.imshow(image, cmap='gray')
plt.show()

2.2 Création de l'histogramme de la composition colorée (CC) HOW87TM234 en niveau de gris¶

In [ ]:
# skimage.util.img_as_ubyte => pour transformer l'image en byte
# si données codées entre o et 1 ou plus de 8 bit retour à https://datacarpentry.org/image-processing/05-creating-histograms/ pour autres instructions
# comment utiliser skimage.util.img => https://www.programcreek.com/python/example/125519/skimage.util.img_as_ubyte
image = skimage.util.img_as_ubyte(image)
histogram, bin_edges = np.histogram(image, bins=256, range=(0, 255))

2.3 Affichage de l'histogramme de la composition colorée (CC) HOW87TM234 en niveau de gris¶

In [ ]:
# Paramétrage et tracé de l'histogramme
plt.figure()
plt.title("Grayscale Histogram")
plt.xlabel("grayscale value")
plt.ylabel("pixel count")
plt.xlim([0, 255])  # pour sélectionner une partie seulement de l'étendue faire varier les bornes

plt.plot(bin_edges[0:-1], histogram)
plt.show()

3. Affichage de la composition colorée et de son histogramme en couleurs¶

3.1 Affichage de la composition colorée (CC) en couleurs¶

In [ ]:
# Lecture de l'image en couleur
image = skimage.io.imread('data/how87tm234.jpg')

# Affichage
fig, ax = plt.subplots()
plt.imshow(image)
plt.show()

3.2 Préparation de l'affichage des bandes de l'histogramme en couleurs¶

In [ ]:
# Création des "tuple" pour sélectionner les couleurs de chaque ligne de l'histogramme
colors = ("red", "green", "blue")
channel_ids = (0, 1, 2)

3.3 Affichage de l'histogramme en couleurs¶

In [ ]:
# Création du "plot", avec une couleur par ligne (celles affectées à l'affichage)
plt.figure()
plt.xlim([0, 256])
for channel_id, c in zip(channel_ids, colors):
    histogram, bin_edges = np.histogram(
        image[:, :, channel_id], bins=255, range=(0, 256)
    )
    plt.plot(bin_edges[0:-1], histogram, color=c)

plt.title("HOW87TM234, Color Histogram with TM4 (Red), TM3 (Green), TM2 (Blue)")
plt.xlabel("Color value")
plt.ylabel("Pixel count")

plt.show()

4. Affichage de la composition colorée (CC) HOW87TM123¶

Sauriez-vous afficher l'histogramme de cette CC vraies couleurs ?

In [ ]:
 
In [ ]:
 
In [ ]: