# CM : Traitement d'image
4 cours magistraux
7 tp de 2h
TD noté le 15/11/2022
Projet à réaliser en binôme pendant le TD7 le 06/12/2022 date de rendu le 18/12/2022.
[TOC]
# I. Image numérique
Définition : image acquise, créée, traitée, stockée sous forme de binaire.
Provenance : dispositif ou programme informatiques.
Image 2D : un tableau à deux dimensions composé de pixels.
Pixel : élement unitaire d'un image, associé à une position et une couleur (ou intensité).
Définition d'image : nombre de pixels.
# II. Notion de couleur
x
# III. Traitement d'image
i(x, y) = 255 * (i(x, y) - min) / (max - min)
## 1. Opérations globales sur l'image
#### Exercice 3 : Segmentation d'image par seuillage sur histogramme

Seuil inférieur : < 6
Seuil supérieur : > 12
#### Exercice 4 : Seuillage
Question 1 : seuil autour de 50 et autour de 100 (prendre les deux premiers minimums globaux)
Seuillage : mettre tous les pixels en dessous de certains pics d'une seule couleur, permet d'avoir une image qu'avec 2 ou 3 couleurs, et qui soit très constrastée.
Question 2 : xxx
## 2. Opérations locales sur l'image
Constat :
* motifs dans l'images,
* différencier certaines régions,
* suppression du bruit.
Bruit : pixels d'intensités aberrantes (mauvaises luminosités, poussières, perturbations)
Bruit "poivre et sel" : aléatoirement plusieurs pixels aux valeurs 255 ou 0.
=> Peu apparaître lors de la numérisation d'une image

Bruit "gaussien" : chaque pixel prend une valeur aléatoire en suivant une loi gaussienne.*

Traitement local : traiter l'image par régions.
Voisinage d'un pixel : ensemble des pixels connexes au pixel.

Outils : opératuer de morphologie mathématique, filtres
### A. Filtres
#### a. Introduction
Permet :
* Améliorer la qualité d'un image
* Supprimer le bruit
Définition : région contenant des coefficients. Modifie l'intensité d'un pixel en fonction de son voisinage.
Le principe est de podérer l'intensité du pixel par les pixels voisins
Importance de la taille du filtre (3x3, 5x5, 7x7) : si la taille du filtre est plus grande, on prend en compte plus de voisins, la taille choisie peut donc changer les comportements des filtres
Calcul de la nouvelle intensité :
On positionne le filtre sur l'image, centré sur un pixel. Pour chaque pixel, on multiplie son intensité par le coef du filtre. On fait ensuite la somme de l'ensemble

Zone verte : taille du filtre
Zone rouge : pixel concerné
Calcul : $40*0 + 42*1 + 46*0 + \cdots + 58 * 0 = 42$

#### b. Filtre moyenneur et passe bas :
Filtre moyenneur :
L'intensité d'un pixel est remplacé par la moyenne de celles de ses voisins.
-> rend l'image plus flou, peut permettre de lisser les bruits qui perturbent la perception de l'image
Filtre passe-bas : permet d'éliminer les hautes fréquences liées au bruit
Avantages : Elimine les intensités avec une fréquence importante
Inconvénients : élimine les détails de l'image et rends l'image plus floue
##### Exercice 1 :
Attention: les intensités sont toujours des entiers.
=> Somme des valeurs + arrondi à l'entier inférieur
#### c. Filtre gaussien
Convolution avec une gaussienne
Permet de lisser l'image

Avantages :
* supprime le bruit dans les parties homogènes
* dégrade moins les détails
Inconvénients :
* conserve une partie du bruit
* moins efficace que le lissage moyenneur
#### d. Filtre médian
Remplace l'intensité d'un pixel par l'intensité médiane de ses voisins
Intéret : même si plusieurs pixels voisins sont bruités, on peut corriger le pixel courant

On perd les petits détails, elle n'est pas flou mais plutôt lissée
Avantages :
* Bons résultats bruit poivre et sel
* Elimine moins les détails de l'image que le filtre moyenneur
Inconvénients :
* lissage : même des pixels corrects peuvent être modifiés
* couteux : coût de l'algorithme du calcul médian
Exercice 2 :
| 1 | 1 | 1 |
| --- | --- | --- |
| 1 | 8 | 1 |
| 1 | 1 | 2 |
=> Médiane de [1;1;1;1;8;1;1;1;2] = 1

=> La médiane est l'élement d'indice 4

=> La médiane est la moyenne entre le rang 4 et le rang 5.

### B. Détection de contours
#### a. Gradient d'image
Pour détecter si un pixel est sur la frontière d'un contour, nous pouvons regarder la valeur relative des pixels autour de ce pixel.

Un pixel ferait partie d'un contour si la somme des variations (positives ou négatives) horizontales et verticales est élevée.
#### b. Détection d'arrêtes par gradient
Pour détecter les arrêtes dans un image.
#### c. Filtre de type Prewitt

#### d. Approximation des gradients
Le filtre subit une convolution avec l'image pour calculer des approximations des dérivées horizontales et verticales.
Filtre de Sobel :

### C. Opérateurs de morphologie mathématique
Permet de :
* Supprimer du bruit sur des images binaires
* Extraire des contours sur des images binaires
Chaque intensité du pixel de l'image résultante est calculée en prenant en compte le voisinage du pixel.
Principe : traiter l'image par région
* Région binaires, souvent carrées
* Positionnement de la région pour que son centre soit sur le pixel où on veut l'appliquer
* Renvoi une nouvelle intensité pour le pixel : blanc ou noir
* Parcours de l'ensemble de l'image
Exemple :

* Erosion : Suppression de points du contour des objets en tenant compte de l'élément structurant
* Dilatation : Ajout de points du contour des objets en tenant compte de l'élément structurant
* Ouverture : Erosion + Dilatation

---
* Fermeture : Dilatation + Erosion

---
#### a. Erosion
Un pixel est un pixel objet si la région centrée sur ce pixel ne contient que des pixels objet : rétrécit l'objet

#### b. Dilatation
* Dilater X revient à éroder son complémentaire
=> On regarde tout autour de notre pixel, s'il y a un pixel coloré, alors on le colore lui même.

##### Remarques :
* Les opérateurs de dilatation sont duales.
* Elles suppriment du bruit à l'intérieur et à l'extérieur de l'objet
* Mais, elles changent la taille des objets.
* Les opérations suivantes remédient à ce problème.
#### c. Ouverture
Ouverture : Erosion suivie d'une dilation de l'image érodée
Intérêt : Supprime les petites structures. Permet de déconnecter des objets indépendant
#### d. Fermeture
Fermeture : Dilatation suivie d'une erosion de l'image dilatée
Intéret : Fusionne les structures proches, les trous sont comblés. Pemret de recoller les composantes d'un objet.
Exemple : 
#### e. Ouverture et fermeture
Permet d'éliminer une grande quantité de défaut
/!\ perte de détails possible
Gradient morphologique : différence pixel à pixel entre une image dilatée et image érodée
=> donne des contours
### D. Opérateurs arithmétiques
ET
NON ET
OU
OU EXCLUSIF
#### a. Squelettisation
L'ensemble des lignes médianes i.e. l'ensemble des points equidistants de deux points de frontière.
Exemple :
* Squelette d'un cercle : centre
* Squelette d'une ellipse : son grand axe

Il est nécessaire d'améliorer l'image pour utiliser la squelettisation :

Propriétés :
* Invariation par transformation (translation, rotation, etc.)
* Préserve les propriétés topologiques de la forme
Applications :
* reconnaissance de forme
* animations
* recherche de chemins
* organisation de nuages de points
* modélisation de solides pour la conception et la manipulation de formes
### E. Analyse individuelle
Opération de vision par ordinateur qui permet d'extraire l'information de connexité d'une image segmentée.
Principe :
* Grouper sous une même étiquette tous les pixels en contact dans l'image.
* Les groupes de pixels connectés sont appelés composantes connexes (blobs).
* On obtient un image étiquetée (ou ensemble de caractéristiques) : la boîte englobante pour chaque composante connexe.
* Cette opération s'appelle analyse (ou étiquetage) en composantes connexes.
Connexité :
Composante connexe :
* Ensemble de pixels connexes entre eux
* Pour deux pixels appartenant à la composante connexe, il est possible de définir un chemin à l'intérieur de la composante connexe
Etiquetage : consiste à affecter une étiquette distincte à chaque composante connexe
Les pixels blancs de l'image rassemblés par "paquets" (composantes) connexes et à chaque composante connexe correspond une couleur (non noirs).
Exemple : 
#### a. Approche par remplissage
Entrée : image binaire B
Sortie : matrice (carte) d'étiquettes L
Algorithme
* Créer une matrice L, de même taille que B, initialisée à 0
* Initialiser le compteur d'étiquettes numLabels = 0
* Tant qu'il y a des pixels à 1 dans B
* Trouver le prochain pixels (x,y) à 1 dans B
* Incrémenter numLabels et donner à L(x,y) la valeur numLables
* Mettre B(x,y) = 0
* Traiter de la même manière les pixels de 4 connexes avec p(x, y) et qui sont à 1 dans B jusqu'à ce qu'il n'y ai plus rien
Exemple : 
#### b. Approche par double parcours :
Entrée : Image binaire B
Sortie : matrice d'étiquettes L
Algotithme
* Premier parcourps de l'image, dans le sens classique (raster-scan order): A chaque pixel à 1 dans B on affecte
* la plus petite étiquette parmi celles de ses voisins haut et gauche
OU
* une nouvelle étiquette si aucun de ses deux voisins n'est étiquettée
Second parcours de l'image dans le sens inverse :
* À chaque pixel précédemment étiqueté, on affecte la plus petite étiquette parmi la sienne et celles de ses voisins bas et droite.
Principe :
* Lors du premier parcours, si 2 voisins portent des étiquettes différentes $I_i$ et $I_j$ , choisir l'une déntre elles pour le pixel et mémoriser l'équivalence $I_i$ ≡ $I_j$
* Lors du second parcours, réétiqueter les pixels selon la table d'équivalences (en renumérotant éventuellement les étiquettes pour qu'elles soient consécutives)
Exemple :

à 8 voisins :

à 4 voisins :

#### c. Étiquetage d'une image binaire
--
#### d. Généralités
* Nettoyage de l'image
* Suppression des objets du bords
* suppression des petits objets
* Bouchage de trous
* Etiquetage
* Paramètre de forme
* Aire
* Parametre d'allongement
## 3. Mise en correspondance
=> Utilisation des points caractéristiques (ou points remarquable)
* Détecter des caractéristiques (points remarquables / points d'intéret) dans deux images
* Mettre en correspondance ces caractéristiques - trouver des pairs de point
* Utiliser ces paires pour alignement d'images
* Problèmes : Détecter les mêmes points indépendament dans les deux images (différentes)

### A. Propriétés des points
* Répétabilité / précision
* La même caractéristique peut être retrouvée dans plusieurs images malgré les transformations géométriques et photométriques
* Saillance / possibilité
* Chaque caractéristique a une description distincte
* Compacité et efficacité
* Beaucoup moins de caractéristiques que de pixels d'image
* Localité
* Une caractéristique occupe une zone relativement petite de l'image + robuste à l'occlusion
# IV. Traitement de vidéo
## 1. Introduction
---
* Une vidéo est une succession d'images dans le temps
* Une fréquence est un nombre d'images par secondes (fps, Hz)
* Lien de causalité dans le dimension temporelle
---
* L'analyse de vidéos est une branche de l'analyse d'image
* Contrainte : temps réel
* Information supplémentaire : prise en compte de la dimension temporelle
* Analyser du mouvement
* Détecter / reconnaître ce qui apparaît ou disparaît dans la vidéo
---
* Détection d'objet en vidéo basée sur :
* La couleur ou la texture (fond / objet)
* La forme (objets)
* Le mouvement (fond / objet)
* Généralement : combinaison de différents critères
---
* Quelques algorithmes couramment utilisés en traitement de vidéo :
* Soustraction de fond (avant-plan / arrière-plan)
* Algorithme par différence pixel à pixel
* Algorithme par mélange de gaussiennes
* Détection d'objets
* Seuillage
* Détection des contours
* Détection des visages
* Suivi de couleur
* Detection de blobs
* Caractérisation d'objets : mesures
## 2. Soustraction de fond
### A. Rappels : chaine de traitement
Pré-traitement : opération sur histogramme, filtres, opération de morphologie mathémathique
* **Objectif** : différencier arrière plan et avant plan
* **Idée** : Apprendre le fond
* **Deux algorithmes** :
* Différence picel à pixel
* Mélange de gaussin
### B. Différence pixel à pixel
* **Idée** : les objets bougent, le fond reste inchangé.
* **Algorithme** : seuillage de la différence entre une image avec objet et une image sans objet (image de fond)
```
seuil = seuil de couleur
fond = image de fond
pour chaque pixel de l'image
récupérère couleur c
récupère c' dans image dond
si la dif entre c et c' < seuil:
devient pixel fond
sinon
devient qtpixel objet
```
* Nécessite de posséder ou enregistrer une image sans objets
* **Limites** :
* Couleur objet /fond proche
* Variation de luminosité
* Mouvement de fond
* Variation intrinsèque de la caméra
### C. Mélange de gaussiennes
* **Enjeu** : déterminer et mettre à jour l'image de fond régulièrement pour pallier les problèmes de luminosité
* **Idée** : un pixel de fond a peu de variation d'intensité, alors qu'un pixel objet a des variations importantes
* **Principe** : pour chaque pixel
* Calcul de l'histogramme au cours du temps
* Modéliser chaque histogramme par une mélange de gaussienne (algo d'espérance maximisation)
---
* **Classification** :
* Pixel de fond : mélange de gaussien avec un écart-type faible
* Pixel d'objet : mélange de gaussiennes avec au moins une gaussienne d'écart-type importante (forte variation)
---
* **Avantages** :
* S'adapte aux changements progressifs de luminosité
* L'image de fond est recalculée fréquemment : pas besoin d'enregistrer une image de fond
* **Limites** :
* Ne fonctionne pas avec les changements brusques de luminosité
* Ne fonctionne pas avec l'objet immobile dans l'image
## 3. Reconnaissance d'objets dans une vidéo
### A. Introduction
Pour reconnaitre un objet dans une image ou séquence d'images, il va falloir apprendre à la machine
#### a. Méthodes génériques : on a appris à la machine les caractéristiques de l'objet à reconnaitre
* Segmentation / Extraction de la plus grosse composante connexe / Extraction de contour
* Extraction de caractéristiques
* Comparaison de caractéristiques
#### b. Méthode dédiées (ou spécifique) : la détection est spécifique à un objet
* Apprentissage des caractéristiques de l'objet à reconnaitre
* Localisation du ou des objets dans des images ou dans des séquences d'images
* Suivi de couleur
* On enregistre la couleur à suivre (avec un clic de souris)
* On cherche dans l'image du flux vidéo la couleur la plus proche
* Détéction de visages
* Détection de blobs
* Deux phases :
* Apprentissage préalable des caractéristes des objets à reconnaitre
* Recherche dans l'image des pixels correspondants aux caractéristiques
#### c. Méthodes qui procèdent en plusieurs étapes :
* Extraction systématique
* Extraction de descripteurs
* Comparaison de ces descripteurs des objets que l'on cherche à identifier
* Elimination des zone qui ne correspondent pas
* Seules les zones qui persistent correspondent à l'objet d'intéret
### B. Détection de visages
* Algorithme implémenté dans OpenCV basé sur l'article de Viola et Jones
* Algorithme d'apprentissage : est entrainé sur des images classifiées (un grand nombre d'images avec et sans visage), puis utilisé pour détecter des visages sur des images non classés
---
* Idée : Dans une image, certaines zones du visages sont identifiables par leur couleur
* Caractéristiques calculées inspirées des ondelettes de Haar
* Filtres appliqués à différentes tailles
* Image d'entrainement : déterminent le seul adapté à chaque filtre pour la reconnaissance des visages
* Image de test => élimination rapide des images sans visage par une batterie de filtres appliqués en série (appelée **cascade**)
---
Cascade de Haar
* Fichiers, généralement en XML, qui contiennent les paramètres des tests à effectuer :
* Zones du visage à identifier
* Variable à tester
* Valeur de seuil permettant l'éliminiation rapide d'une zone teste
* De nombreuses cascades de Haar sont disponibles sur le web
* Remarque : OpenCV permet de créer soi-même des cascades à partir d'images contenant l'objet à détecter
