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 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
lancer SystemPropertiesAdvanced.exe et cliquer sur variable d'environnement puis 'path' et ajouter le chemin complet du fichier openscad.exe
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 :
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 :
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éveloppement et tests sur les images synthétiques
Validation avec des images réelles
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.
Cette tache consiste à estimer 3 paramètres (2 en translation + 1 en rotation) pour une transformation rigide 2D entre 2 repères.
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
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:
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:
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
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:
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: