Projets de Vision par Ordinateur

Repo GitHub du projet

À Propos

Ce dépôt présente tous les projets de codage (laboratoires) sur lesquels Mehmet et Jean ont travaillé pendant leur inscription à CSCI437 durant le semestre d’automne 2020 à l’École des Mines du Colorado, couvrant la période du 28 août 2020 au 14 décembre 2020. Ces laboratoires ont fourni une plateforme complète pour apprendre Python, OpenCV et les concepts de base de la vision par ordinateur.

À Propos du Cours

J’ai suivi Introduction à la Vision par Ordinateur (CSCI437) pendant le semestre d’automne 2020. Pendant cette période, le Dr. William Hoff et le Dr. Tom Williams ont enseigné le cours CSCI437. Voici la description officielle du cours pour CSCI437 :

(I) La vision par ordinateur est le processus d'utilisation des ordinateurs pour acquérir des images, transformer des images et extraire des descriptions symboliques à partir d'images. Ce cours fournit une introduction à ce domaine, couvrant des sujets tels que la formation d'images, l'extraction de caractéristiques, l'estimation de localisation et la reconnaissance d'objets. La capacité de conception et les projets pratiques seront mis en avant, en utilisant des outils logiciels populaires. Le cours intéressera à la fois ceux qui souhaitent en savoir plus sur le sujet et ceux qui souhaitent simplement utiliser des techniques d'imagerie par ordinateur. Doit être de niveau senior. 3 heures de cours ; 3 heures de semestre. Prérequis : (MATH201 ou MATH334 ou EENG311), et, MATH332, et, (CSCI200 ou CSCI261).

Crédits

Il y a des scripts Python et/ou des segments de code qui ont été fournis par le cours CSCI437 pendant les cours, dans les diapositives, ou via Canvas. Le cours CSCI437 est dispensé à l’École des Mines du Colorado. Ces laboratoires ont été réalisés avec les partenaires suivants :

  • Jean Duong
  • Mehmet Yilmaz

Descriptions des Laboratoires

Laboratoire 1

Le laboratoire 1 se concentre sur les bases de l’utilisation d’OpenCV avec Python. Les participants doivent écrire un programme Python qui lit un fichier vidéo, projette quatre points formant un carré sur chaque image de la vidéo, et simule le carré s’éloignant dans la distance en ajustant progressivement la coordonnée Z de chaque point. De plus, le numéro de l’image doit être affiché sur chaque image, et la vidéo finale avec des superpositions graphiques doit être téléchargée pour évaluation.

Laboratoire 2

Le laboratoire 2 traite des transformations d’images, se concentrant spécifiquement sur les rotations autour des axes X, Y et Z en utilisant la convention des “angles fixes XYZ”. Les étudiants doivent calculer des matrices de rotation, calculer des matrices de transformation homogène pour les poses de caméra, créer une matrice de calibration, et projeter des points sur une image pour former un objet familier en utilisant la fonction de ligne d’OpenCV. Le laboratoire met l’accent sur la compréhension de la géométrie de la caméra et des matrices de transformation en vision par ordinateur.

Laboratoire 3

Le laboratoire 3 concerne le matching de modèles, où les étudiants doivent suivre un sous-image modèle à travers chaque image d’un fichier vidéo en utilisant la corrélation croisée normalisée. L’affectation implique de permettre à l’utilisateur de choisir un modèle à partir de la première image du film, de suivre ce modèle à travers les images suivantes, de dessiner des rectangles pour indiquer l’emplacement du modèle sur chaque image, et de créer un fichier vidéo de sortie pour montrer ces emplacements. Les étudiants sont encouragés à expérimenter avec différents modèles pour comprendre lequel permet le meilleur suivi et pourquoi, et à discuter des scores de corrélation observés lorsque les correspondances sont correctement identifiées.

Laboratoire 4

Le laboratoire 4 se concentre sur la segmentation des couleurs en utilisant l’espace colorimétrique HSV, une technique discutée dans les cours pour son efficacité dans le traitement des images couleur. Les étudiants doivent appliquer des opérations de seuil pour segmenter les pixels de panneau d’arrêt à partir des images fournies, en utilisant un programme Python/OpenCV. L’affectation nécessite de trouver des valeurs de seuil qui détectent le mieux les pixels de panneau d’arrêt, d’effectuer des opérations morphologiques pour nettoyer le résultat, et de soumettre les images segmentées avec le programme Python et les paramètres de seuil et d’opération morphologique utilisés.

Laboratoire 5

Le laboratoire 5 implique la tâche d’insérer une nouvelle texture d’image dans une zone spécifique d’une image existante de manière à ce que la projection semble correcte. Ce processus, connu sous le nom de remplacement de plan, nécessite que les étudiants utilisent des techniques de transformation projective (homographie) pour mapper une nouvelle image sur une zone plane d’une image existante. Le laboratoire met l’accent sur l’application pratique de l’homographie pour modifier le contenu de l’image tout en maintenant la correction de perspective. Les étudiants doivent soumettre l’image originale, l’image avec la texture de remplacement, l’image combinée, et leur programme Python dans le cadre de leur soumission de laboratoire.

Laboratoire 6

Le laboratoire 6 instructe les étudiants à détecter et à calculer la pose d’une cible composée de cinq cercles concentriques contrastés (CCC) dans une image. La tâche consiste à utiliser OpenCV pour détecter les cibles CCC, les ordonner correctement, calculer la pose avec la fonction solvePnP() d’OpenCV, et dessiner les axes de coordonnées et la pose sur l’image. Le laboratoire met l’accent sur l’application de concepts tels que la détection de cibles, l’estimation de pose, et le formatage de sortie visuelle en vision par ordinateur.

Laboratoire 7

Le laboratoire 7 est centré sur la détection et le matching des caractéristiques SIFT entre les images. L’objectif est d’identifier les correspondances correctes des caractéristiques SIFT d’une image à une autre et d’analyser la précision de ces correspondances. Le laboratoire implique l’utilisation de code Python donné et d’images d’un ensemble de données, l’ajustement des paramètres de l’algorithme pour optimiser la détection des correspondances, et le calcul des métriques de précision et de rappel pour évaluer la performance du processus de matching des caractéristiques. Les étudiants doivent soumettre leur programme Python et les valeurs de précision et de rappel calculées pour différents réglages de paramètres.

Laboratoire 8

Le laboratoire 8 se concentre sur la détection d’objets en utilisant le matching de caractéristiques et l’ajustement de transformation affine pour détecter et superposer des objets d’une image d’entraînement sur une image de requête. Le laboratoire implique la détection de l’objet dans différents scénarios, l’ajustement du seuil du nombre de correspondances inliers pour réduire les faux positifs, et le calcul des métriques de précision, de rappel et d’exactitude pour évaluer la performance du système de détection d’objets. Les étudiants doivent modifier et exécuter le code Python fourni, analyser la performance du système dans différentes conditions, et soumettre leurs résultats et le code modifié.

Laboratoire 9

Le laboratoire 9 implique de placer des points d’annotation sur un objet dans une image d’entraînement et de montrer automatiquement ces points correctement sur l’objet dans les images de requête suivantes. Ce laboratoire met l’accent sur l’extraction de caractéristiques, le matching utilisant le test de ratio pour éliminer les correspondances ambiguës, l’ajustement d’une transformation affine 2D en utilisant RANSAC pour éliminer les valeurs aberrantes, et l’application de la transformation pour mapper les points d’annotation des images d’entraînement aux images de requête. La tâche critique est d’ajuster le seuil du nombre de correspondances inliers pour équilibrer entre faux positifs et faux négatifs, visant la plus haute précision dans la classification correcte des images.

Laboratoire 10

Le laboratoire 10 est dédié à l’utilisation de la transformation de Hough pour trouver des segments de ligne et identifier des ensembles de lignes parallèles dans une image. Il utilise la transformation de Hough probabiliste via la fonction cv2.HoughLinesP() d’OpenCV pour détecter des segments de ligne représentés par leurs points d’extrémité. Le laboratoire implique également l’identification de points de fuite en analysant les vecteurs de direction de ces segments de ligne, visant à comprendre l’orientation des lignes parallèles dans l’espace 3D telles qu’elles apparaissent dans le plan d’image 2D. Les étudiants doivent traiter des images de test pour trouver des segments de ligne parallèles, expérimenter avec des paramètres pour optimiser la détection, et soumettre leurs résultats avec un programme Python.

Remarques

  • Vous aurez besoin des packages Python tiers suivants pour exécuter ces scripts/laboratoires : cv2 & numpy.
  • Certains de ces laboratoires pourraient nécessiter que vous utilisiez une version spécifique de cv2. Malheureusement, les exigences n’ont pas été documentées, donc vous devrez le découvrir par vous-même. Si vous le découvrez ou si vous êtes bloqué, veuillez le signaler sur le formulaire des problèmes.