Table des matières
Dépôt vers Moodle
Rendre votre projet avant le 13 décembre à 23h59! lien vers le cours moodle pour déposer le projet: https://moodle.iut-tlse3.fr/mod/assign/view.php?id=267430
Faire un dépôt par étudiant, donc chaque étudiant doit déposer le fichier zip du projet, qui doit contenir le nom des deux étudiants du binôme. Par exemple, pour les étudiants Pincemi et Pincemoi, rendre deux fois le fichier Pincemi_Pincemoi.zip
Installation des outils
Installation version portable à l'IUT
https://openscad.org/downloads.html
version 64bits zip: https://files.openscad.org/OpenSCAD-2021.01-x86-64.zip
notice openscad: https://files.openscad.org/documentation/manual/OpenSCAD_User_Manual.pdf
Openscad en ligne de commande: (lancer openscad avec l'option -h )
https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Using_OpenSCAD_in_a_command_line_environment
Ajout de Openscad au path pour vos PC personnels
lancer SystemPropertiesAdvanced.exe et cliquer sur variable d'environnement puis 'path' et ajouter le chemin complet du fichier openscad.exe
Présentation SAE Vision Industrielle BUT3
Attention 1 séance encadrée de SAE sera en fait un examen de TP de Vision Industrielle (probablement le mardi 3 décembre 2024)
Évaluation :
- rendre via Moodle 1 fichier zip contenant le code + le rapport
- en séance, validation du fonctionnement et réponse à des questions
Explication espaces projectifs et homographies (+inverse)
https://docs.opencv.org/4.x/da/d54/group__imgproc__transform.html
Rectification d'images (exemple stéréo épipolaire + génération d'une vue fronto-parallèle)
Estimation d'homographie à partir de 4 (minimum) points 2D mis en correspondance
Mire à 4 points dans le plans
Génération d'images synthétiques avec Openscad
Modèles 3D du but2 + nouveaux modèles (mire etc)
CLI openscad syntaxe (lien)
Programme python pour générer des commandes CLI paramétriques (faire varier pose etc…)
Traitement des images synthétiques associées à vérité terrain
1 bouchon posé sur un plan P1, la face du bouchon est plane et contenue dans un plan P2 parallèle à P1
Le projet
Deux méthodes utilisant la rectification d'image: La face supérieure du bouchon = 2 disques colorés concentriques Localisation par :
- mesure de corrélation avec un modèle synthétique (méthode 1)
- recherche de 2 cercles concentriques dans l'image de contours (méthode 2)
Une méthode utilisant l'image brute acquise par la caméra: (méthode 3) : face supérieure du bouchon = 2 ellipses obtenues par projection perspective de 2 disques colorés concentriques Localisation par :
- détection d'ellipses dans l'image
- application de l'homographie inverse à l'ellipse pour obtenir le centre du cercle dans le plan du
Développement et tests sur les images synthétiques
Validation avec des images réelles
Étapes pour la méthode 1
Vous devrez tous réaliser au moins la méthode 1, dont les différentes étapes sont indiquées ci dessous. Vous pourrez ensuite réaliser les méthodes 2 et/ou 3 après validation de la méthode 1 par l'enseignant.
Partie 1: Estimation de transformation rigide 2D
Cette tache consiste à estimer 3 paramètres (2 en translation + 1 en rotation) pour une transformation rigide 2D entre 2 repères.
Partie 2: Génération d'une image synthétique du bouchon
Cette tache consiste à synthétiser deux images du bouchon: une image de couleur et une image de masque.
Faire une fonction create_pattern_and_mask(width, height,d1,d2, bgr_color_center=(0, 0, 0),bgr_color_contour=(0, 0, 0)): du programme
- width représente la largeur de l'image à générer
- height représente la hauteur de l'image à générer
- d1 correspond au diamètre du contour du bouchon à colorier en bgr_color_contour dans l'image image
- d2 correspond au diamètre de la région centrale du bouchon à colorier en bgr_color_center dans l'image image
L'image mask doit contenir un disque de diamètre d1 blanc, entouré de noir.
Les valeurs de couleurs sont indiquées dans un fichier à mettre dans le même dossier que le programme python:
- listecolors.out
160.0000, 119.0000, 109.0000 58.0000, 58.0000, 249.0000
exemple d'images à générer pour les paramètres par défaut du programme:
Partie 3: Détection de la position du bouchon dans l'image rectifiée
Cette tache consiste à rechercher la position dans l'image la plus similaire à l'image de bouchon composée de:
différentes images à traiter:
Vous devez faire la fonction def processImage(image): pour rechercher la meilleure correlation entre l'image de référence du bouchon et l'image fournie dans image en utilisant la fonction matchTemplate d'openCV. La fonction def processImage(image): doit retourner l'image avec le bouchon détecté en surimpression, une variable indiquant si le bouchon est détecté dans l'image, et les position x et y du centre du bouchon détécté dans l'image.
L'image suivante montre un résultat de détection du bouchon
Partie 4: Rectification de l'image grâce à une homographie
Cette tache consiste à générer une image rectifiée à partir de l'image fournie par la caméra. Cette image rectifiée doit avoir une résolution de 1 pixel par millimètre et occuper une surface de 169×169 millimètres. Les quatre coins de cette image doivent correspondre aux quatre coins de la mire posée sur le plan de travail du robot.
Vous devez faire la fonction processImage(image,srcPoints): pour calculer la transformation homographique à partir des coordonnées de points 2D mis en correspondance (avec les 4 coins de l'image à générer). La fonction doit également génerer l'image dst rectifiée
Exemple de fichier contenant les correspondances, à mettre dans le même dossier que le programme python pour la fonction main:
- listepoints.out
991.2868, 565.0504 655.7476, 490.5274 592.5595, 833.6786 948.9872, 903.2888
Pour calculer l'homographie vous aurez besoin d'utiliser la fonction cv2.getPerspectiveTransform(…)
exemple d'image de la mire en entrée du programme:
image avec les contours en surimpression:
exemple d'image de la mire en sortie du programme:
En appliquant le même traitement à des images de bouchons sur la zone de la mire:
est rectifiée en: