Vous êtes sur la page 1sur 3

Institut Galilée - Université Paris 13 Algorithmes et Images

Ingénieur INFO/INFOA 3° année 2023  2024

TP1 : Erosion et Dilatation

1 Prise en main de Python, Numpy et OpenCV


Suivez les instructions du chier disponible sur Moodle pour installer votre environnement
de développement Python et vous familiariser avec les commandes de base d'OpenCV et de Numpy.
Guide.pdf

2 Coder une érosion (et une dilatation) tout seul comme un grand
1. Vous devez écrire la fonction my_rst_erode qui prend en paramètre une image I , et renvoie
l'érosion I ⊖ Γ . An de simplier votre travail, vous pourrez ignorer les pixels x de I qui sont au
bord de l'image. Testez votre fonction sur l'image jointe avec ce TP.
8
chien.png

2. De la même façon que pour la question précédente, proposez une fonction my_rst_dilate qui
prend en paramètre une image I , et renvoie la dilatation I ⊕ Γ .
8

3 Caméra, moteur... action !


Vous allez maintenant coder un gradient morphologique et utiliser le ux vidéo de votre webcam
comme entrée de l'algorithme. Créez un chier appelé webcam.py.
1. Ecrivez une fonction my_rst_gradient, qui prend en entrée une image et retourne son gradient
morphologique calculé à l'aide de Γ (on ignore à nouveau les bords de l'image). Testez votre
fonction sur l'image du chien.
8

2. Voici un code qui vous permettra, dans une boucle, de récupérer l'image de la webcam et l'acher.
Utilisez la touche "q" an de quitter la boucle et mettre n au programme. Si vous n'avez pas
de webcam, ce n'est pas grave : il vous sut de commenter et décommenter deux lignes de code
(regardez bien les commentaires) an que le ux vidéo provienne d'un chier vidéo.
# Create a videocapture object

#IF YOU DONT HAVE A WEBCAM - Comment the next line and uncomment the one after
camera =cv2.VideoCapture(0)
#camera = cv2.VideoCapture('Images/SG1.m4v')

#Forever loop
while (True):
# get the current video frame
return_code, image =camera.read()

# Display the image


cv2.imshow('Image', image)

#Short pause to display the image, if the user presses the q button, exit
r=cv2.waitKey(1)
if r==ord('q'):
break

# After the loop release the camera object


camera.release()
3. Avant de pouvoir acher l'image, vous devez faire deux choses dans la boucle principale :
 Convertissez l'image en niveaux de gris : regardez du côté de la fonction cv2.cvtColor.
 Réduisez la taille de l'image à 1024 pixels de large, tout en conservant le même ratio de
longueur/largeur : regardez du côté de la fonction cv2.resize.
4. Au lieu d'acher l'image en sortie de votre programme, achez son gradient morphologique. Votre
algorithme est-il temps réel?
4 Utiliser OpenCV pour réaliser des érosions et des dilatations
1. En lisant la documentation d'OpenCV (cherchez la fonction erode), écrivez une fonction mye-
rode permettant de faire une érosion d'une image I par un élément structurant E . En érodant
l'image par un disque de rayon 3, vous devriez trouver le même résultat que l'image
?
chien.png
test_erode_chien.png

2. Ecrivez une fonction mydilate à l'aide d'OpenCV, et testez-la.


3. Codez une fonction de gradient morphologique mygrad, qui calcule le gradient morphologique
d'une image I par rapport à un élément structurant E, et testez-la sur l'image .
voiture.jpg

4. Utilisez maintenant cette fonction à la place du premier gradient dans le programme utilisant la
webcam. Etes-vous maintenant temps réel?
5 Organiser vos chiers
Vous devez maintenant créer une librairie Python qui contiendra les dernières opérations morpholo-
giques que vous avez codées an de pouvoir les réutiliser lors des prochains TPs et éviter le copier/coller.
Vous devez :
1. Créer, à la racine de votre projet, un nouveau Python package appelé Commun.
2. Copier et coller le chier strel.build dans ce package.
3. Créer, dans ce package, un chier Python appelé morpho.py, et qui contiendra les fonctions mye-
rode, mydilate and mygrad codées dans la partie précédente.

4. Dans vos chiers futurs, si vous souhaitez réutiliser le code d'un de ces deux chiers, vous devez
écrire en début de chier
from Common import morpho, strel

A chaque fois que vous voudrez utiliser une fonction d'un de ces chiers, vous devrez l'appeler avec
le nom de son chier écrite avant. Par exemple, pour utiliser la fonction de dilatation, vous écrirez
morpho.mydilate(image, ...)

6 Eectuer le rendu de votre travail


Voici les instructions qu'il faudra suivre pour faire le rendu de votre travail. Vous devrez renvoyer un
seul chier zip (par de rar, pas de tgz, etc), dont le nom sera constitué ainsi :
VotreNom_VotrePrenom_VotreNumeroEtudiant.zip

Respectez bien les underscores entre les trois éléments. Si vous avez un binôme, ne mettez pas ici
son nom et ne rendez qu'un seul chier en tout. Vous ne devez mettre aucun caractère accentué, ou signe
de ponctuation dans le nom de chier. Si votre nom ou votre prénom comportent un espace ou un tirer,
ne les faîtes pas gurer.
Si vous avez un binôme, rajoutez à la racine du chier zip un chier texte nommé où vous
spécierez votre nom ainsi que celui de votre binome, en suivant ce format (ne rajoutez rien d'autre que
binome.txt

ce qui est demandé) :


Nom1 Prenom1 Numero_etudiant1
Nom2 Prenom2 Numero_etudiant2

Votre chier zip devra contenir, à sa racine (pas dans un sous dossier) votre programme. Il est indis-
pensable de respecter cette nomenclature des chiers.

Vous aimerez peut-être aussi