Le but de cet exercice est de faire des petites manipulations sur des grandes tables à 4 dimensions (puis 3).
Pour commencer on vous montre comment extraire une image d'une archive pour l'avoir sous forme d'une table Numpy. On affiche l'image avec une fonction de la bibliothèque Matplotlib que l'on verra plus tard.
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.