quinta-feira, 9 de julho de 2015

Visão Computacional: Color Tracking, Line Detection & Shapes

Os programas que resultam nas imagens apresentadas abaixo foram desenvolvidos na linguagem C++, utilizando a IDE Eclipse Luna e o framework OpenCV, já citado anteriormente. Houveram várias tentativas de desenvolvimento em outras IDEs, tais como Visual Studio, NetBeans, Eclipse (Java) e DevC++ (que por fim é o menos recomendado), e também utilizando a linguagem Python. Porém, a que se sobressaiu e apresentou melhores resultados foi o C++ com Eclipse Luna, tanto pela estabilidade quanto pelo material de apoio que pode ser encontrado em fóruns e demais sites.

As bibliotecas mais usadas nos programas são a highgui e a imgproc. A highGUI é responsável por ações como a manipulação de janelas e seus componentes, sendo que estes podem interagir diretamente com o tratamento da imagem, pela leitura e gravação de arquivo em disco e em memória e pela leitura de frames da câmera. a imgProc é responsável pelo processamento de imagens, possuindo definições e funções que auxiliam o desenho em imagens e algumas formas de detecção por padrões.

Sobre os algoritmos desenvolvidos, existem trechos comuns à maioria dos programas de tratamento de imagens. Um deles é a conversão da imagem capturada de RGB para HSV (hue, saturation, value - ou - matriz, saturação e valor), pois este controle é mais eficiente e direto para se manipular o filtro (com iluminação e contraste, por exemplo) do que alterar valores RGB na matriz da imagem. Para se fazer a diferenciação das cores, por exemplo, o valor a ser alterado é relacionado à matriz, quando os demais servem para dar mais precisão na filtragem.

Esquema de sistema de cores HSV

Os algoritmos foram aplicados sobre a exibição da câmera do meu computador, em tempo real. Em todos os programas, o processamento foi mostrado em três janelas: uma com a imagem original da webcam, outra com o filtro aplicado (apenas tratamento, preto e branco, exibindo área ignorada e detectada respectivamente) e outra somando a imagem original com o desenho programado a partir da detecção (na detecção de cores, por exemplo, é apontado localização e nome da cor e, na detecção de formas, é desenhado a forma em torno do objeto).

Veja algumas imagens do resultado dos algoritmos:

Rastreamento de Cores

Detecção de Formas

Detecção de Linha

Neste projeto, alguns algoritmos foram utilizados no intuito de auxiliar atividades envolvendo robótica, através de monitoramento em tempo real, interpretação de informações e as possíveis interações com o robô. Uma adaptação interessante seria embarcar esta aplicação em um celular, por exemplo, possibilitando seu funcionamento portátil e uma transmissão online.

Nota: caso tenha interesse em estudar/utilizar os códigos-fonte, entre em contato por e-mail.

Nenhum comentário:

Postar um comentário