Projetos de Visão Computacional

Repositório GitHub do Projeto

Sobre

Este repositório apresenta todos os projetos de codificação (laboratórios) Mehmet e Jean realizados 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. Esses laboratórios forneceram uma plataforma abrangente para aprender Python, OpenCV e conceitos básicos de visão computacional.

Sobre a Classe

Eu fiz o curso Introdução à Visão Computacional (CSCI437) durante o semestre de outono de 2020. Nesse período, o Dr. William Hoff e o Dr. Tom Williams ministraram a aula. CSCI437. Aqui está a descrição oficial da aula 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 aula CSCI437 durante as aulas, nos slides ou no Canvas. A aula CSCI437 é oferecida na Colorado School of Mines. Esses laboratórios foram realizados com os seguintes parceiros:

  • Jean Duong
  • Mehmet Yilmaz

Descrições dos Laboratórios

Laboratório 1

O Laboratório 1 foca nos fundamentos do uso do OpenCV com Python. Espera‑se que os participantes escrevam um programa 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 no espaço ao ajustar incrementalmente a coordenada Z de cada ponto. Além disso, o número do quadro deve ser exibido em cada quadro, e o vídeo final com sobreposições gráficas deve ser enviado para avaliação.

Laboratório 2

O Laboratório 2 trata de transformações de imagem, especificamente focando em rotações ao redor dos eixos X, Y e Z usando a convenção de “ângulos fixos XYZ”. Os estudantes 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.

Laboratório 3

O Laboratório 3 trata de correspondência de templates, onde os estudantes devem rastrear um sub‑imagem de template através de cada quadro de um arquivo de filme usando correlação cruzada normalizada. A tarefa envolve permitir que o usuário escolha um template a partir da primeira imagem do filme, rastrear esse template nas imagens subsequentes, desenhar retângulos para indicar a localização do template em cada imagem e criar um arquivo de filme de saída para mostrar essas localizações. Os estudantes são incentivados a experimentar diferentes templates para entender qual permite o melhor rastreamento e por quê, e a discutir as pontuações de correlação observadas quando as correspondências são identificadas corretamente.

Laboratório 4

O Laboratório 4 foca na segmentação de cor usando o espaço de cor HSV, uma técnica discutida nas aulas por sua eficácia no tratamento de imagens coloridas. Os estudantes devem aplicar operações de limiar para segmentar os pixels de sinal de pare de imagens fornecidas, usando um programa Python/OpenCV. A tarefa requer encontrar valores de limiar que melhor detectem os pixels de sinal de pare, executar 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ção morfológica utilizados.

Laboratório 5

O Laboratório 5 envolve a tarefa de inserir uma nova textura de imagem em uma área específica de uma imagem existente de modo que a projeção pareça correta. Esse processo, conhecido como substituição de plano, requer que os estudantes 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 enquanto mantém a correção da perspectiva. Os estudantes devem submeter a imagem original, a imagem com a textura substituída, a imagem combinada e seu programa Python como parte da entrega do laboratório.

Laboratório 6

O Laboratório 6 instrui os estudantes a detectar e computar 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 de coordenadas e a pose na imagem. O laboratório enfatiza a aplicação de conceitos como detecção de alvo, estimativa de pose e formatação de saída visual em visão computacional.

Laboratório 7

O Laboratório 7 está centrado na detecção e correspondência de recursos SIFT entre imagens. O objetivo é identificar correspondências corretas de recursos SIFT de uma imagem para outra e analisar a precisão dessas correspondências. O laboratório envolve usar código Python fornecido e imagens 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 recall para avaliar o desempenho do processo de correspondência de recursos. Os estudantes devem submeter seu programa Python e os valores calculados de precisão e recall para diferentes configurações de parâmetros.

Laboratório 8

O Laboratório 8 foca na detecção de objetos usando correspondência de recursos 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 limiar de número de correspondências inliers para reduzir falsos positivos e calcular métricas de precisão, recall e acurácia para avaliar o desempenho do sistema de detecção de objetos. Os estudantes devem modificar e executar o código Python fornecido, analisar o desempenho do sistema sob diferentes condições e submeter suas descobertas e o código modificado.

Laboratório 9

O Laboratório 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 recursos, 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 de correspondências inliers para equilibrar entre falsos positivos e negativos, visando a maior acurácia na classificação correta das imagens.

Laboratório 10

O Laboratório 10 é dedicado ao uso da transformada de Hough para encontrar segmentos de linha e identificar conjuntos de linhas paralelas dentro de uma imagem. Ele 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, visando entender a orientação de linhas paralelas no espaço 3D conforme aparecem no plano de imagem 2D. Os estudantes 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/labs: cv2 & numpy.
  • Alguns desses laboratórios podem exigir 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 ao formulário de issues.