Proyectos de Visión por Computadora

Repositorio GitHub del Proyecto

Acerca de

Este repositorio muestra todos los proyectos de programación (laboratorios) en los que Mehmet y Jean trabajaron mientras estaban inscritos en CSCI437 durante el semestre de Otoño de 2020 en la Colorado School of Mines, cubriendo el periodo desde el 28 de agosto de 2020 hasta el 14 de diciembre de 2020. Estos laboratorios proporcionaron una plataforma integral para aprender Python, OpenCV y conceptos básicos de visión por computadora.

Acerca de la Clase

Tomé Introduction To Computer Vision (CSCI437) durante el semestre de Otoño de 2020. Durante este tiempo, la clase fue impartida por el Dr. William Hoff y el Dr. Tom Williams. CSCI437. Aquí está la descripción oficial de la clase para CSCI437:

(I) Computer vision is the process of using computers to acquire images, transform images, and extract symbolic descriptions from images. This course provides an introduction to this field, covering topics in image formation, feature extraction, location estimation, and object recognition. Design ability and hands-on projects will be emphasized, using popular software tools. The course will be of interest both to those who want to learn more about the subject and to those who just want to use computer imaging techniques. Must be Senior level standing. 3 hours lecture; 3 semester hours. Prerequisite: (MATH201 or MATH334 or EENG311),and,MATH332,and,(CSCI200 or CSCI261).

Créditos

Hay scripts en Python y/o segmentos de código que fueron proporcionados por la clase CSCI437 durante las conferencias, en diapositivas o a través de Canvas. La clase CSCI437 se imparte en la Colorado School of Mines. Estos laboratorios se realizaron con los siguientes compañeros:

  • Jean Duong
  • Mehmet Yilmaz

Descripciones de los Laboratorios

Laboratorio 1

El Laboratorio 1 se centra en los conceptos básicos de usar OpenCV con Python. Se espera que los participantes escriban un programa en Python que lea un archivo de video, proyecte cuatro puntos formando un cuadrado en cada fotograma del video, y simule que el cuadrado se aleja incrementando de forma incremental la coordenada Z de cada punto. Además, se debe mostrar el número de fotograma en cada cuadro y subir el video final con superposiciones gráficas para su evaluación.

Laboratorio 2

El Laboratorio 2 trata sobre transformaciones de imágenes, centrándose específicamente en rotaciones alrededor de los ejes X, Y y Z usando la convención de “ángulos fijos XYZ”. Se pide a los estudiantes calcular matrices de rotación, computar matrices de transformación homogénea para poses de cámara, crear una matriz de calibración y proyectar puntos en una imagen para formar un objeto conocido usando la función line de OpenCV. El laboratorio enfatiza la comprensión de la geometría de la cámara y las matrices de transformación en visión por computadora.

Laboratorio 3

El Laboratorio 3 trata sobre el emparejamiento por plantilla (template matching), donde los estudiantes deben rastrear una subimagen plantilla a través de cada fotograma de un archivo de película usando correlación cruzada normalizada. La tarea implica permitir que el usuario elija una plantilla de la primera imagen de la película, rastrear esta plantilla a través de las imágenes subsiguientes, dibujar rectángulos para indicar la ubicación de la plantilla en cada imagen y crear un archivo de película de salida para mostrar estas ubicaciones. Se anima a los estudiantes a experimentar con diferentes plantillas para entender cuál permite el mejor rastreo y por qué, y a discutir las puntuaciones de correlación observadas cuando las coincidencias se identifican correctamente.

Laboratorio 4

El Laboratorio 4 se centra en la segmentación por color usando el espacio de color HSV, una técnica discutida en las conferencias por su efectividad al manejar imágenes en color. Se pide a los estudiantes aplicar operaciones de umbral para segmentar los píxeles de señales de alto (stop sign) en las imágenes proporcionadas, usando un programa en Python/OpenCV. La tarea requiere encontrar valores de umbral que detecten mejor los píxeles de las señales de alto, realizar operaciones morfológicas para limpiar el resultado y enviar las imágenes segmentadas junto con el programa en Python y los parámetros de umbral y operaciones morfológicas utilizados.

Laboratorio 5

El Laboratorio 5 implica la tarea de insertar una nueva textura de imagen en un área específica de una imagen existente de manera que la proyección parezca correcta. Este proceso, conocido como sustitución de plano (plane replacement), requiere que los estudiantes utilicen técnicas de transformación proyectiva (homografía) para mapear una nueva imagen en un área plana de una imagen existente. El laboratorio enfatiza la aplicación práctica de la homografía para modificar el contenido de la imagen manteniendo la corrección de perspectiva. Se espera que los estudiantes envíen la imagen original, la imagen con la textura reemplazada, la imagen combinada y su programa en Python como parte de su entrega de laboratorio.

Laboratorio 6

El Laboratorio 6 instruye a los estudiantes a detectar y calcular la pose de un objetivo compuesto por cinco círculos concéntricos contrastantes (CCCs) en una imagen. La tarea implica usar OpenCV para detectar objetivos CCC, ordenarlos correctamente, calcular la pose con la función solvePnP() de OpenCV y dibujar los ejes de coordenadas y la pose en la imagen. El laboratorio enfatiza la aplicación de conceptos como detección de objetivos, estimación de pose y formato de salida visual en visión por computadora.

Laboratorio 7

El Laboratorio 7 se centra en la detección y emparejamiento de características SIFT entre imágenes. El objetivo es identificar coincidencias correctas de características SIFT de una imagen a otra y analizar la precisión de estas coincidencias. El laboratorio implica usar código Python proporcionado e imágenes de un conjunto de datos, ajustar los parámetros del algoritmo para optimizar la detección de coincidencias y calcular métricas de precisión y recuperación para evaluar el rendimiento del proceso de emparejamiento de características. Se requiere que los estudiantes envíen su programa en Python y los valores calculados de precisión y recuperación para diferentes configuraciones de parámetros.

Laboratorio 8

El Laboratorio 8 se centra en la detección de objetos usando emparejamiento de características y ajuste de transformaciones afines para detectar y superponer objetos de una imagen de entrenamiento en una imagen de consulta. El laboratorio implica detectar el objeto en diferentes escenarios, ajustar el umbral del número de coincidencias inliers para reducir los falsos positivos y calcular métricas de precisión, recuperación y exactitud para evaluar el rendimiento del sistema de detección de objetos. Se espera que los estudiantes modifiquen y ejecuten el código Python proporcionado, analicen el rendimiento del sistema bajo diferentes condiciones y entreguen sus hallazgos y el código modificado.

Laboratorio 9

El Laboratorio 9 implica colocar puntos de anotación en un objeto dentro de una imagen de entrenamiento y mostrar automáticamente esos puntos correctamente en el objeto en imágenes de consulta posteriores. Este laboratorio enfatiza la extracción de características, el emparejamiento usando la prueba de razón (ratio test) para eliminar coincidencias ambiguas, el ajuste de una transformación afín 2D usando RANSAC para eliminar outliers, y la aplicación de la transformación para mapear puntos de anotación desde las imágenes de entrenamiento a las de consulta. La tarea crítica es ajustar el umbral del número de coincidencias inliers para equilibrar entre falsos positivos y negativos, buscando la mayor exactitud en la clasificación correcta de las imágenes.

Laboratorio 10

El Laboratorio 10 está dedicado a usar la transformada de Hough para encontrar segmentos de línea e identificar conjuntos de líneas paralelas dentro de una imagen. Utiliza la Transformada de Hough probabilística mediante la función cv2.HoughLinesP() de OpenCV para detectar segmentos de línea representados por sus puntos finales. El laboratorio también implica identificar puntos de fuga analizando los vectores de dirección de estos segmentos de línea, con el objetivo de entender la orientación de líneas paralelas en el espacio 3D tal como aparecen en el plano de la imagen 2D. Se pide a los estudiantes procesar imágenes de prueba para encontrar segmentos de línea paralelos, experimentar con parámetros para optimizar la detección y enviar sus resultados junto con un programa en Python.

Notas

  • Necesitarás los siguientes paquetes de Python de terceros para ejecutar estos scripts/laboratorios: cv2 y numpy.
  • Algunos de estos laboratorios pueden requerir que uses una versión específica de cv2. Lamentablemente, los requisitos no fueron documentados, por lo que tendrás que averiguarlo por tu cuenta. Si lo descubres o te quedas atascado, por favor repórtalo en el formulario de incidencias.