Traitement Images¶
Introduction¶
Ce document explique le fonctionnement de l'algorithme de traitement des caméras virtuelles dans la simulation PyBullet et également en conditions réelles, utilisées pour la détection d'obstacles et de marqueurs ArUco. L'objectif est de traiter la capture d'images, la détection d'objets par couleur, la localisation 3D et la calibration des caméras.
On traitera ici les deux parties, simulation (mainCameraSimu.py
) et réalité (mainCameraReel.py
), car elles sont très similaires et partagent une grande partie du code.
Algorithme de traitement caméra¶
L'algorithme de traitement des caméras se décompose en plusieurs étapes clés :
- Capture d'images : Acquisition des images depuis la caméra (virtuelle ou réelle).
- Prétraitement : Conversion des images en niveaux de gris, application de filtres pour réduire le bruit et améliorer la qualité de l'image.
- Calibration : Utilisation de la calibration de la caméra pour corriger les distorsions et obtenir des mesures précises.
- Détection d'objets :
- Détection par couleur : Segmentation des objets basés sur des plages de couleurs définies (HSV) pour identifier les obstacles.
- Détection ArUco : Utilisation de la bibliothèque OpenCV pour détecter les marqueurs ArUco dans l'image.
- Localisation 3D : Calcul des positions 3D des objets détectés en utilisant les informations de profondeur (dans le cas de la caméra réelle) ou les paramètres de la caméra virtuelle.
- Affichage et visualisation : Superposition des résultats de la détection sur l'image originale pour visualiser les objets détectés et leurs positions.
Structure du code¶
Le code est organisé en plusieurs modules pour faciliter la maintenance et la compréhension :
config.py
: Contient les paramètres de configuration pour la caméra, les plages de couleurs, et les paramètres de calibration.utils/virtualCamera.py
: Crée et paramètre les caméra virtuelle dans PyBullet.utils/segmentation.py
: Contient les fonctions pour la segmentation des images basées sur la couleur.utils/perspectiveCorrection.py
: Gère la correction de perspective des positions capturées.utils/arucoDetection.py
: Implémente la détection des marqueurs ArUco.utils/imageTransform.py
: Contient des fonctions utilitaires pour la transformation de perspective de la table.
Initialisation et configuration des caméras¶
Les caméras doivent respecter certaines contraintes de position (fixée par le règlement de la Coupe de France de Robotique), de plus nous avons des exigences supplémentaires : voir la table en entier, avoir une bonne résolution, et minimiser les occlusions. Pour cela nous avons choisi 2 caméras placées en hauteur aux coins opposés de la table, inclinées vers le centre.
Les caméras virtuelles sont paramétrées pour correspondre aux caractéristiques des caméras réelles utilisées (FOV, position, orientation).
Correction de perspective¶
Pour obtenir une vue "de dessus" de la table, nous appliquons une transformation de perspective aux images capturées. Cela permet de compenser l'angle d'inclinaison des caméras et de faciliter la détection des objets sur la table. La transformation s'appuie sur les 4 codes ArUco placés aux coins de la table. La transformation suit les étapes suivantes :
- Utilisation de la matrice de transformation stockée dans
perspectiveMatrix.txt<camNumber>
. - Si absente, calcul de la matrice de transformation en détectant les marqueurs ArUco aux coins de la table.
- Si manquant, utilisation des positions définies par l'utilisateur via des clics souris (ordre à respecter : coin haut gauche puis sens horaire).
- Application de la transformation pour obtenir une vue corrigée de la table.
Le fichier perspectiveMatrix.txt<camNumber>
est sauvegardé pour éviter de recalculer la matrice à chaque exécution. Il contient le ratio de pixels par mètre pour les axes X et Y, ainsi que la matrice de transformation homographique 3x3.
Détection de codes ArUco (robot, PAMI)¶
En permanence, l'algorithme tente de détecter les codes ArUco dans l'image capturée, en cherchant la présence des codes robot et PAMI. Si détectés, leurs positions sont utilisées pour localiser précisément le robot et le PAMI sur la table. La détection suit les étapes suivantes :
- Conversion de l'image en niveaux de gris.
- Détection des marqueurs ArUco en utilisant les fonctions d'OpenCV.
- Mise en évidence des marqueurs détectés sur l'image.
- Calcul des positions 3D réelles des marqueurs en utilisant les paramètres de la caméra.
Détection d'obstacles par couleur¶
L'algorithme segmente l'image pour détecter les obstacles basés sur des plages de couleurs définies (HSV). Chaque type d'obstacle (rouge, vert, bleu, jaune) est détecté séparément. La détection suit les étapes suivantes :
- Conversion de l'image en espace de couleur HSV.
- Application de masques pour chaque plage de couleur définie dans
config.py
. - Extraction des contours des objets détectés.
- Mise en évidence des marqueurs détectés sur l'image.
- Calcul des positions 3D réelles des marqueurs en utilisant les paramètres de la caméra.