© Copyright Franck CHEVRIER 2019-2021 https://www.python-lycee.com.
Les activités partagées sur Capytale sont sous licence Creative Commons.
Pour exécuter une saisie Python, sélectionner la cellule et valider avec SHIFT+Entrée.
Avertissement :
Les formules des filtres de détection de contours données dans cette activité sont des versions simplifiées par rapport aux formules rigoureuses.
0. Introduction
1. Filtre de Prewitt
2. Filtre de Roberts
3. Filtre de Sobel
4. Complément
On s'intéresse ici au traitement d'image en niveaux de gris, dont la luminosité d'un pixel est codée sur 1 bit (valeur allant de $\;\;$0$\;\;$ à 255 ).
Le principe de la détection de contours consiste, à transformer une image pour que ses contours apparaissent en blanc sur fond noir (avec niveaux de gris).
Pour déterminer la luminosité d'un pixel de détection des contours, on utilise un filtre qui permet de calculer cette luminosité à partir des 9 pixels qui entourent le pixel d'origine, comme l'indique le schéma ci-dessous :
On fournit la fonction Python Prewitt_v ci-dessous, qui correspond au calcul mathématique de la partie entière de :
$$ \frac { \lvert \;NW+W+SW-NE-E-SE \; \rvert }{3}$$
#Exécuter cette cellule pour stocker la fonction en mémoire
def Prewitt_v(NW,N,NE,W,C,E,SW,S,SE):
'''
Filtre v partiel de Prewitt
'''
return abs( NW + W + SW - NE - E - SE )//3
1.1. Calculer la valeur du pixel de détection dans chacun des cas suivants pour ce filtre Prewitt_v.
$\quad\;\;$(On pourra effectuer les calculs à l'aide d'appels à la fonction Python Prewitt_v)
# Utiliser ces zones Python pour les calculs
1.2. Exécuter la fonction Python Visualisation_Filtre qui, appliquée à Prewitt_v, permet :
# Exécuter cette cellule
from Detection_contours import *
Visualisation_Filtre(Prewitt_v)
1.3.a. Écrire une fonction Python Prewitt_h qui correspond au calcul mathématique de la partie entière de :
$$ \frac { \lvert \;NW+N+NE-SW-S-SE \; \rvert }{3}$$
# Écrire ici la fonction Prewitt_h
Visualisation_Filtre(Prewitt_h)
1.4. On souhaite maintenant appliquer un filtre Prewitt qui est la moyenne des deux filtres Prewitt_v et Prewitt_h.
$\quad\;\;$a. Écrire cette fonction Python Prewitt.
# Écrire ici la fonction Prewitt
Visualisation_Filtre(Prewitt)
Le filtre de Roberts correspond au calcul mathématique de la partie entière de :
$$ \frac { \lvert \; C-SE \; \rvert + \lvert \; S-E \; \rvert }{2}$$
# Écrire ici la fonction Roberts
# Exécuter cette cellule pour tester le filtre de Roberts
Visualisation_Filtre(Roberts)
3.1. Les 4 fonctions de filtre Sobel_1, Sobel_2, Sobel_3 et Sobel_4 données ci-dessous ont pour but de détecter des contours horizontaux, verticaux et obliques.
À l'aide d'appels à la fonction Visualisation_Filtre, associer à chacun de ces filtres la direction qui correspond.
Aide :
On pourra observer les effets des filtres sur le jeu de tests suivant :
def Sobel_1(NW,N,NE,W,C,E,SW,S,SE):
'''
Filtre partiel 1 de Sobel
'''
return abs(NW+2*W+SW-NE-2*E-SW) //4
def Sobel_2(NW,N,NE,W,C,E,SW,S,SE):
'''
Filtre partiel 2 de Sobel
'''
return abs(NW+2*N+NE-SW-2*S-SE) //4
def Sobel_3(NW,N,NE,W,C,E,SW,S,SE):
'''
Filtre partiel 3 de Sobel
'''
return abs(W+2*SW+S-N-2*NE-E) //4
def Sobel_4(NW,N,NE,W,C,E,SW,S,SE):
'''
Filtre partiel 4 de Sobel
'''
return abs(W+2*NW+N-E-2*SE-S) //4
# Effectuer ici des appels à la fonction Visualisation_filtre
3.2. La fonction de filtre Sobel est la moyenne des 4 filtres précédents.
$\quad\;\;$ Écrire et tester cette fonction.
# Écrire ici la fonction Sobel
# Effectuer ici un appel à la fonction Visualisation_filtre
Le programme qui contient la fonction Python Visualisation_Filtre utilisée dans cette activité est accessible ici.
© Copyright Franck CHEVRIER 2019-2021 https://www.python-lycee.com.
Les activités partagées sur Capytale sont sous licence Creative Commons.