Proyectos de Visión por Computadora
Repositorio GitHub del Proyecto
Acerca de
Este repositorio muestra todos los proyectos de codificación (laboratorios) Mehmet y Jean en los que trabajaron mientras estaban inscritos en CSCI437 durante el semestre de otoño 2020 en la Colorado School of Mines, cubriendo el período desde el 28 de agosto de 2020, hasta el 14 de diciembre de 2020. Estos laboratorios, que proporcionaron una plataforma integral para aprender Python, OpenCV y conceptos básicos de visión por computadora.
Acerca de la Clase
Tomé Introducción a la Visión por Computadora (CSCI437) durante el semestre de otoño 2020. Durante este tiempo, el Dr. William Hoff y el Dr. Tom Williams impartieron la clase. 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 de Python y/o fragmentos de código que fueron proporcionados por la clase CSCI437 durante la conferencia, 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 socios:
- Jean Duong
- Mehmet Yilmaz
Descripciones de 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 que forman un cuadrado en cada fotograma del video, y simule que el cuadrado se aleja en la distancia ajustando incrementalmente la coordenada Z de cada punto. Además, se debe mostrar el número de fotograma en cada fotograma, y el video final con superposiciones gráficas debe subirse para su evaluación.
Laboratorio 2
El Laboratorio 2 trata sobre transformaciones de imágenes, enfocándose específicamente en rotaciones alrededor de los ejes X, Y y Z usando la convención de “ángulos fijos XYZ”. A los estudiantes se les asigna 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 sobre una imagen para formar un objeto familiar 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 coincidencia de plantillas, donde a los estudiantes se les asigna rastrear una sub‑imagen de plantilla a través de cada fotograma de un archivo de video usando correlación cruzada normalizada. La tarea implica permitir al usuario seleccionar una plantilla de la primera imagen del video, rastrear esta plantilla en imágenes subsecuentes, dibujar rectángulos para indicar la ubicación de la plantilla en cada imagen, y crear un archivo de video 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 los puntajes de correlación observados cuando las coincidencias se identifican correctamente.
Laboratorio 4
El Laboratorio 4 se centra en la segmentación de color usando el espacio de color HSV, una técnica discutida en las clases por su efectividad al manejar imágenes a color. A los estudiantes se les asigna aplicar operaciones de umbral para segmentar los píxeles de señal de stop de las imágenes proporcionadas, usando un programa Python/OpenCV. La tarea requiere encontrar valores de umbral que detecten mejor los píxeles de señal de stop, realizar operaciones morfológicas para limpiar el resultado, y entregar las imágenes segmentadas junto con el programa 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 se vea correcta. Este proceso, conocido como reemplazo de plano, requiere que los estudiantes usen técnicas de transformación proyectiva (homografía) para mapear una nueva imagen sobre 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 la perspectiva. Se espera que los estudiantes entreguen la imagen original, la imagen con la textura de reemplazo, la imagen combinada y su programa Python como parte de la entrega del 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 (CCC) 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 sobre 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 coincidencia 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 esas 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 exhaustividad para evaluar el rendimiento del proceso de coincidencia de características. Se requiere que los estudiantes entreguen su programa Python y los valores calculados de precisión y exhaustividad para diferentes configuraciones de parámetros.
Laboratorio 8
El Laboratorio 8 se centra en la detección de objetos usando coincidencia de características y ajuste de transformación afín para detectar y superponer objetos de una imagen de entrenamiento sobre una imagen de consulta. El laboratorio implica detectar el objeto en diferentes escenarios, ajustar el umbral del número de coincidencias inliers para reducir falsos positivos, y calcular métricas de precisión, exhaustividad 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 subsecuentes. Este laboratorio enfatiza la extracción de características, la coincidencia usando la prueba de razón para eliminar coincidencias ambiguas, el ajuste de una transformación afín 2D usando RANSAC para eliminar valores atípicos, y la aplicación de la transformación para mapear los puntos de anotación de la imagen de entrenamiento a las imágenes de consulta. La tarea crítica es ajustar el número umbral de coincidencias inliers para equilibrar entre falsos positivos y negativos, buscando la mayor exactitud al clasificar correctamente las imágenes.
Laboratorio 10
El Laboratorio 10 está dedicado al uso de 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 comprender la orientación de las líneas paralelas en el espacio 3D tal como aparecen en el plano de la imagen 2D. A los estudiantes se les asigna procesar imágenes de prueba para encontrar segmentos de línea paralelos, experimentar con parámetros para optimizar la detección, y entregar sus resultados junto con un programa Python.
Notas
- Necesitará los siguientes paquetes python de terceros para ejecutar estos scripts/labs: cv2 y numpy.
- Algunos de estos laboratorios podrían requerir que use una versión específica de cv2. Lamentablemente, los requisitos no fueron documentados, así que tendrá que averiguarlo por su cuenta. Si lo descubre o está atascado, por favor repórtelo al formulario de problemas.