Projetos de Visão Computacional

Repositório GitHub do Projeto

Sobre

Este repositório exibe todos os projetos de programação (laboratórios) que Mehmet e Jean desenvolveram enquanto estavam matriculados em CSCI437 durante o semestre de Outono de 2020 na Colorado School of Mines, cobrindo o período de 28 de agosto de 2020 a 14 de dezembro de 2020. Estes laboratórios proporcionaram uma plataforma abrangente para aprender Python, OpenCV e conceitos básicos de visão computacional.

Sobre a Disciplina

Eu fiz Introdução à Visão Computacional (CSCI437) durante o semestre de Outono de 2020. Durante esse período, o Dr. William Hoff e o Dr. Tom Williams ministraram a disciplina. CSCI437. Aqui está a descrição oficial da disciplina 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

Existem scripts Python e/ou trechos de código que foram fornecidos pela disciplina CSCI437 durante as aulas, em slides ou através do Canvas. A disciplina CSCI437 é oferecida na Colorado School of Mines. Estes laboratórios foram realizados com os seguintes parceiros:

  • Jean Duong
  • Mehmet Yilmaz

Descrições dos Laboratórios

Lab 1

O Lab 1 foca nos fundamentos do uso do OpenCV com Python. Espera-se que os participantes escrevam um programa em Python que leia um arquivo de vídeo, projete quatro pontos formando um quadrado em cada quadro do vídeo, e simule o quadrado recuando na distância ajustando incrementalmente a coordenada Z de cada ponto. Além disso, o número do quadro deve ser exibido em cada frame, e o vídeo final com sobreposições gráficas deve ser enviado para avaliação.

Lab 2

O Lab 2 trata de transformações de imagem, focando especificamente em rotações ao redor dos eixos X, Y e Z usando a convenção “XYZ fixed angles”. Os alunos devem calcular matrizes de rotação, computar matrizes de transformação homogênea para poses de câmera, criar uma matriz de calibração e projetar pontos em uma imagem para formar um objeto familiar usando a função line do OpenCV. O laboratório enfatiza a compreensão da geometria da câmera e das matrizes de transformação em visão computacional.

Lab 3

O Lab 3 trata de template matching, onde os alunos devem rastrear uma subimagem modelo através de cada quadro de um arquivo de vídeo usando correlação cruzada normalizada. A tarefa envolve permitir que o usuário escolha um template a partir da primeira imagem do vídeo, rastrear esse template nas imagens subsequentes, desenhar retângulos para indicar a localização do template em cada imagem e criar um arquivo de vídeo de saída para mostrar essas localizações. Os alunos são encorajados a experimentar diferentes templates para entender quais permitem o melhor rastreamento e por quê, e a discutir as pontuações de correlação observadas quando as correspondências são corretamente identificadas.

Lab 4

O Lab 4 foca em segmentação de cor usando o espaço de cores HSV, uma técnica discutida nas aulas por sua eficácia no tratamento de imagens coloridas. Os alunos devem aplicar operações de limiar (threshold) para segmentar os pixels de placas de pare a partir das imagens fornecidas, usando um programa em Python/OpenCV. A tarefa exige encontrar valores de limiar que detectem melhor os pixels da placa de pare, realizar operações morfológicas para limpar o resultado e submeter as imagens segmentadas juntamente com o programa Python e os parâmetros de limiar e operações morfológicas utilizados.

Lab 5

O Lab 5 envolve a tarefa de inserir uma nova textura de imagem em uma área específica de uma imagem existente de forma que a projeção pareça correta. Esse processo, conhecido como substituição de plano, requer que os alunos usem técnicas de transformação projetiva (homografia) para mapear uma nova imagem sobre uma área planar de uma imagem existente. O laboratório enfatiza a aplicação prática da homografia para modificar o conteúdo da imagem mantendo a correção de perspectiva. Espera-se que os alunos submetam a imagem original, a imagem com a textura substituída, a imagem combinada e seu programa Python como parte da entrega do laboratório.

Lab 6

O Lab 6 instrui os alunos a detectar e calcular a pose de um alvo composto por cinco círculos concêntricos contrastantes (CCCs) em uma imagem. A tarefa envolve usar o OpenCV para detectar alvos CCC, ordená-los corretamente, computar a pose com a função solvePnP() do OpenCV e desenhar os eixos coordenados e a pose na imagem. O laboratório enfatiza a aplicação de conceitos como detecção de alvos, estimativa de pose e formatação da saída visual em visão computacional.

Lab 7

O Lab 7 é centrado na detecção e correspondência de features SIFT entre imagens. O objetivo é identificar correspondências corretas de features SIFT de uma imagem para outra e analisar a acurácia dessas correspondências. O laboratório envolve usar código Python e imagens fornecidas de um conjunto de dados, ajustar parâmetros do algoritmo para otimizar a detecção de correspondências e calcular métricas de precisão e revocação para avaliar o desempenho do processo de correspondência de features. Os alunos devem submeter seu programa Python e os valores calculados de precisão e revocação para diferentes configurações de parâmetros.

Lab 8

O Lab 8 foca em detecção de objetos usando correspondência de features e ajuste de transformação afim para detectar e sobrepor objetos de uma imagem de treinamento em uma imagem de consulta. O laboratório envolve detectar o objeto em diferentes cenários, ajustar o limite do número de correspondências inliers para reduzir falsos positivos e calcular métricas de precisão, revocação e acurácia para avaliar o desempenho do sistema de detecção de objetos. Espera-se que os alunos modifiquem e executem o código Python fornecido, analisem o desempenho do sistema sob diferentes condições e submetam suas descobertas e o código modificado.

Lab 9

O Lab 9 envolve colocar pontos de anotação em um objeto dentro de uma imagem de treinamento e mostrar automaticamente esses pontos corretamente no objeto em imagens de consulta subsequentes. Este laboratório enfatiza extração de features, correspondência usando o teste de razão para eliminar correspondências ambíguas, ajuste de uma transformação afim 2D usando RANSAC para eliminar outliers e aplicação da transformação para mapear pontos de anotação da imagem de treinamento para as imagens de consulta. A tarefa crítica é ajustar o número limite de correspondências inliers para equilibrar entre falsos positivos e negativos, visando a maior acurácia na classificação correta das imagens.

Lab 10

O Lab 10 é dedicado ao uso da transformada de Hough para encontrar segmentos de linha e identificar conjuntos de linhas paralelas dentro de uma imagem. Utiliza a Transformada de Hough probabilística via a função cv2.HoughLinesP() do OpenCV para detectar segmentos de linha representados por seus pontos finais. O laboratório também envolve identificar pontos de fuga analisando os vetores de direção desses segmentos de linha, com o objetivo de entender a orientação de linhas paralelas no espaço 3D conforme aparecem no plano de imagem 2D. Os alunos devem processar imagens de teste para encontrar segmentos de linha paralelos, experimentar com parâmetros para otimizar a detecção e submeter seus resultados juntamente com um programa Python.

Notas

  • Você precisará dos seguintes pacotes Python de terceiros para executar esses scripts/laboratórios: cv2 & numpy.
  • Alguns desses laboratórios podem requerer que você use uma versão específica do cv2. Infelizmente, os requisitos não foram documentados, então você terá que descobrir isso por conta própria. Se você descobrir ou ficar preso, por favor reporte no formulário de issues.