• Aucun résultat trouvé

TD – Traitement d’images

N/A
N/A
Protected

Academic year: 2022

Partager "TD – Traitement d’images"

Copied!
3
0
0

Texte intégral

(1)

Fénelon Sainte-Marie 2014-2015

PC/PSI [ 1 - 3 ] Marc Lichtenberg

TD – Traitement d’images

2

ème

partie

Introduction et objectifs

Dans cette deuxième partie du TD consacré au traitement d’images, on va se concentrer sur un thème classique : la détection des contours.

On travaillera classiquement avec des images en nuances de gris, en environnement Scilab (avec SIVP) ou en environnement Python (avec les bibliothèques matplotlib (module pyplot), numpy et scipy (module ndimage).

Seuillage global simple

On se donne une image I en nuances de gris et on se fixe un seuil (threshold) s. (

0.0 < <

s

1.0

sous Scilab ou sous Python). Si on suppose que l’intensité I est normalisée (elle prend ses valeurs dans l’intervalle

[ ]

0 ; 1 ), on souhaite obtenir une image J en noir et blanc telle que :

( ) ( )

( )

1.0 si ,

,

0.0 si ,

I x y s J x y

I x y s

⎧⎪ ≥

= ⎨⎪⎩ <

En environnement Scilab (SIVP), on utilisera la fonction im2bw et en environnement Python, on utilisera la fonction where (TRES pratique !) de la bibliothèque numpy.

Mise en œuvre des filtres

Mettre en œuvre les filtres de Prewitt, Sobel et Laplace en utilisant la console ou en écrivant des scripts simples.

Filtres de Prewitt et de Sobel

Sous Scilab (SIVP), on utilisera la fonction fspecial qui renvoie respectivement les filtres :

1 1 1

0 0 0

1 1 1

− − −

⎛ ⎞

⎜ ⎟

⎜ ⎟

⎜ ⎟

⎝ ⎠

et

1 2 1

0 0 0

1 2 1

− − −

⎛ ⎞

⎜ ⎟

⎜ ⎟

⎜ ⎟

⎝ ⎠

(2)

Fénelon Sainte-Marie 2014-2015

PC/PSI [ 2 - 3 ] Marc Lichtenberg

Ils visent donc à détecter les contours horizontaux. Pour la détection des contours verticaux, on utilisera leurs transposés.

Sous Python, les fonctions prewitt et sobel peuvent recevoir comme argument la direction de la dérivation :

prewitt(matrice,0) correspond à la mise en œuvre du filtre

1 1 1

0 0 0

1 1 1

⎛ ⎞

⎜ ⎟

⎜ ⎟

⎜ − − − ⎟

⎝ ⎠

.

prewitt(matrice,1) correspond à la mise en œuvre du filtre

1 0 1 1 0 1 1 0 1

⎛ − ⎞

⎜ − ⎟

⎜ ⎟

⎜ − ⎟

⎝ ⎠

.

sobel(matrice,0) correspond à la mise en œuvre du filtre

1 2 1

0 0 0

1 2 1

⎛ ⎞

⎜ ⎟

⎜ ⎟

⎜ − − − ⎟

⎝ ⎠

.

sobel(matrice,1) correspond à la mise en œuvre du filtre

1 0 1 2 0 2 1 0 1

⎛ − ⎞

⎜ − ⎟

⎜ ⎟

⎜ − ⎟

⎝ ⎠

.

Filtre de Laplace

Sous Scilab (SIVP), le masque mis en œuvre via la fonction fspecial est :

1 1

1 4 1

1 1

α α α

α α

α α α α

⎛ − ⎞

⎜ − − − ⎟

⎜ ⎟

+ ⎜ ⎝ − ⎟ ⎠

Le filtre vu en cours (cf. ci-dessous) correspond donc au cas

α = 0

. On pourra tester différentes valeurs du paramètre

α

.

Sous Python, le filtre mis en œuvre via la fonction laplace est le filtre vu en cours :

0 1 0

1 4 1

0 1 0

⎛ ⎞

⎜ − ⎟

⎜ ⎟

⎜ ⎟

⎝ ⎠

 

(3)

Fénelon Sainte-Marie 2014-2015

PC/PSI [ 3 - 3 ] Marc Lichtenberg

Extraction des contours

On travaillera dans cette partie avec le filtre de Sobel.

On écrira un script qui effectuera les opérations suivantes :

• Lecture d’une image couleur.

• Obtention de l’image en nuances de gris correspondante.

• Lissage à l’aide d’un filtre gaussien.

• Application de deux filtres de Sobel (obtention des composantes GX et GY) puis calcul du tableau des modules normalisés des gradients.

• Seuillage simple pour obtention d’une image noir et blanc des contours.

• [Facultatif] combinaison des images en nuances de gris et noir et blanc pour l’obtention d’une image en nuances de gris avec contours blancs.

• Affichage final.

Quelques pistes pour aller plus loin

1. Le seuillage présenté dans ce TD est le plus simple que l’on puisse imaginer ! Il en existe d’autres !

2. Afin d’améliorer les scripts de détection des contours, notamment en se souciant de la présence ou de l’absence de la première étape de lissage de l’image initiale, on pourra ajouter à celle-ci un bruit artificiel.

Sous Scilab (SIVP), on utilisera la fonction imnoise.

3. Au-delà des approches relevant du domaine du traitement du signal (par exemple les filtrages dont nous avons parlé), on pourra s’intéresser à une approche plus ensembliste (et plus récente puisqu’elle date de la fin des années 70) du traitement d’image appelée

« Morphologie mathématique ».

Sous Python, on utilisera le module morphology de scipy.ndimage.

4. On pourra s’essayer à la filtration non linéaire : a. Filtre de Nagao.

b. Filtre médian (revoilà le tri …).

5. Plus généralement, les environnements de traitement d’image permettent l’application de filtres personnalisés. N’hésitez pas à en chercher/inventer !

Références

Documents relatifs

(d) Modifier le code afin que l’image soit un dégradé vertical de bleu, avec la première ligne noire pur et la dernière ligne bleue pur.. (e) Modifier le code afin que l’image soit

Avec la version de Idlex installée dans l’environnement virtuel minfo, ouvrir le programme test_opencv.py et lancer son exécution : le programme doit s’exécuter

Ecrire une fonction energieMin() qui renvoie un tableau 2D de même taille que img et dont chaque case contient l'énergie minimale d'une colonne tordue qui serait partie de n'importe

 Élimine les « pics » (bruit formé par de petits groupes de pixels près du blanc) dans l’image..  L’érosion « gruge » les

Sur le même principe, nous allons construire un diagramme de bifurcations 2D pour étudier l’évolution des états stationnaires en fonction de r. Le phénomène chaotique en biologie

Si on souhaite générer un nuage de points, qui apparaîtront comme des petits cercles bleus, avec la légende associée « un nuage », on utilisera

L'intérêt de n'utiliser qu'une caméra est que les paramètres de la caméra sont les mêmes entre les images gauche et droite1. En d'autres termes, la phase de calibrage est nettement

On peut ajouter à la commande plot des indications supplémentaires pour préciser le style du tracé sous forme d’une chaîne de caractères : &#34;ro&#34; pour un tracé avec des