The purpose of this exercise is to perform small manipulations on large 4-dimensional (then 3-dimensional) tables.
To start, we show you how to extract an image from an archive to have it as a Numpy array. We display the image using a function from the Matplotlib library which we will see later.
import numpy as np
import imageio
import tarfile
# si vous n'avez pas ships.tgz, il est dans https://python3.mooc.lrde.epita.fr/tree/lesson4%20Numpy/data/
tar = tarfile.open('data/ships.tgz', 'r:gz')
filenames = tar.getnames()
im = imageio.read(tar.extractfile(filenames[7])).get_data(0) # im is a Numpy array
im.shape
(128, 192, 3)
%matplotlib inline
import matplotlib.pyplot as plt
plt.imshow(im)
<matplotlib.image.AxesImage at 0x7f98bdb5c240>
Créer la table des images¶
Créer la table, Numpy array, images
qui contient toutes les images du fichier data/ships.tgz
. Afficher la forme de la table.
Réorganiser la table¶
On désire que le format de la table soit NxCxXxY
avec
- N : nombre d'image
- C : nombre de canaux de l'image (3 pour RGB)
- X : hauteur de l'image
- Y : largeur de l'image
Écrire la nouvelle table.
Passer en niveaux de gris¶
Passer les images en niveaux de gris. La table résultant a une dimension de moins qu'images
.
Afficher une image pour vérifier votre résultat. On utilisera l'option cmap = 'gray'
dans imshow
.
Ordonner par contraste¶
Fonction contraste¶
Définir une fonction qui détermine le contraste d'une image. Pour cela on calcule l'histogramme de l'image avec N
intervalles.
On définit le constraste c
comme l'écart entre les 2 gris les plus représentés (argsort
vous sera utile) :
On choisira 25 intervalles pour calculer l'histogramme.
Trouver les images la plus et la moins constratée¶
Appliquez votre fonction à toutes les images et affichez les images extrêmes, celle qui qui a le plus grand contraste et celle qui a le plus faible contraste.