Skip to content

Latest commit

 

History

History
147 lines (83 loc) · 7.22 KB

image_processing_tutorial.rst

File metadata and controls

147 lines (83 loc) · 7.22 KB

Images Numériques

Les images numériques sont des images décrites dans un format numérique. On peut les utiliser pour interpréter quantitativement certaines grandeurs. Cette partie dresse un rapide tableau des différentes approches basiques qui permettent d'effectuer ces tâches et donne des pistes pour aller plus loin sur chaque thème abordé.

Les points abordés ici sont détaillés plus finement dans le cours: Traitement_Signal_slides.pdf <Traitement_images/Slides/Traitement_Images_slides.pdf>

Formation

Selon le dispositif qui l'a produite, le sens physique des informations contenues dans une image est différent. Voici quelques exemples d'images classées par type d'informations:

Structure

Deux grandes familles d'images numériques existent:

  • Images vectorielles : elles constituées de figures géométriques (droites, polygones, ...). Elles sont idéales pour représenter des schémas et des courbes.
  • Images matricielles : elles sont constituées d'une matrice de pixels. Chaque pixel d'une même image porte le même type d'informations. Ces informations sont scindées en canaux chacun contenant un nombre qui peut être entier (généralement 8 bits) ou des flottant dans le cas d'images scientifiques. Il est important de noter que la couleur d'un pixel tel qu'il apparait quand on représente une image n'est pas associé de manière unique à l'information contenue dans le pixel. Par exemple, dans une photographie, on cherche à ce que la représentation du pixel soit fidèle à la vision humaine et donc on va donc la décomposer en 3 canaux (rouge, vert, bleu par exemple) avec eventuellement un quatrième canal destiné à coder la transparence. On parle alors d'image polychrome. A l'opposé dans une image à vocation scientifique, on cherchera généralement à quantifier un phénomème scientifique par un seul canal, si possible sous forme flottante. On parle alors d'image monochrome.

On prend un exemple de photographie: grenouille.jpg <Traitement_images/data/grenouille.jpg>

Traitement_images/Example_code/grenouille.py

On s'intéresse maintenant uniquement à des images monochromes formées de nombres flottants. Ainsi si on dispose d'une photographie, on peut isoler un canal ou construire une combinaison quelquconque de canaux comme suit.

Traitement_images/Example_code/grenouille_canaux.py

Une image se résumera donc à une matrice Ziji et j sont les indices des pixels. Dans certains cas, on pourra ajouter des informations comme les coordonnées Xij et Yij des pixels. Toutes ces matrices sont décrites dans le format Python numpy.array avec des pixels sous forme numpy.float64.

Operations

Dans cette partie, nous utiliserons aussi une image générée pour l'occasion:

Traitement_images/Example_code/generate_image.py

Vous pouvez télécharger l'image ici: image.jpg <Traitement_images/Slides/figures/image.jpg>

Lecture

Traitement_images/Example_code/grenouille.py

Sauvegarde

Traitement_images/Example_code/grenouille_save.py

Rognage

Traitement_images/Example_code/grenouille_crop.py

Rotations

Traitement_images/Example_code/grenouille_rotate.py

Histogramme

Un histogramme représente la répartition de la population de pixels en fonction de leur altitude. Une valeur haute dans l'histogramme indique donc qu'un grand nombre de pixels correspondent à l'altitude considérée.

Traitement_images/Example_code/image_hist.py

Seuillage

L'histogramme montre deux pics (Z = 20 et Z = 230) correspondant à deux populations de pixels. Le seuillage consiste à transformer une image monochrome en une image binaire en appliquant un test booléen à chaque pixel. Une image binaire, c'est-à-dire formée de 0 et de 1 ou de Vrai et Faux est ainsi créé. Dans le cas présent, on peut alors chercher séparer les deux populations en effectuant un seuillage Z > 120 :

Traitement_images/Example_code/image_seuillage.py

Erosion / Dilatation

On souhaite mesurer éliminer le bruit révélé par le seuillage effectué précédement. Pour ce faire, les outils issus de la morphologie mathématique tels que l'érosion et la dilatation sont particulièrement adaptés:

Traitement_images/Example_code/image_erosion.py

Pour restaurer la surface des zones partiellement érodées, on applique une dilatation:

Traitement_images/Example_code/image_dilatation.py

Comptage

Si on cherche maintenant a identifier individuellement les zones blanches mises en évidence lors du seuillage, il faut trouver tous les pixels appartenant à la terre Z = 1 qui sont voisins. Le comptage de zones dans une image binaire peut se faire par des algorithmes dédiés . Voici un exemple:

Traitement_images/Example_code/image_comptage.py

Recherche de contours

Si on cherche maintenant à trouver les contours des zones blanches. On peut combiner les opérateurs de dérivation:

Traitement_images/Example_code/image_contours.py

Les performances de la détection sont meilleures avec un filtre dédié comme le filtre de Canny .

Travaux Dirigés

On vous propose de travailler sur l'image suivante: (source ). On vous demande de faire un programme qui effectue les tâches suivantes:

  1. Lire l'image et la convertire au format numpy.array. Bien que d'aspect grisatre, l'image est en couleur et comporte donc 3 canaux. Il convient donc de choisir le canal le plus avantageux.
  2. Rogner séparer l'image en deux parties pour séparer le bandeau inférieur de l'image elle même.
  3. Tracer l'histogramme de l'image et en déduire un moyen de séparer les deux phases.
  4. Calculer la proportion de particules dans l'image.
  5. Compter les particules.
  6. Déterminer la taille moyenne des particules.