Apresentação 2
Transcrição
Apresentação 2
Retificação de imagens e detecção de movimentos planares Roberto Ferraz de Campos Filho Descrição do projeto Implementar um sensor de posição que será utilizado em testes do submarino O objeto de interesse efetuará movimentos planares O sensor deve informar as coordenadas do objeto e sua rotação Descrição do projeto O sensor é composto por: – – – – Câmera fixa em uma posição genérica Computador externo ao submarino Programa em C++ que gera os dados de interesse utilizando as imagens Está sendo utilizada a biblioteca OpenCV da Intel para implementação do programa Detecção do objeto Utiliza-se a técnica camshift para acompanhar o objeto nas imagens e informar a sua posição O objeto é encontrado pela sua cor O acompanhamento do objeto foi feito usando um exemplo da biblioteca OpenCV CamShift Baseado na técnica Mean Shift Modificado para ser usado em seqüência de imagens O algoritmo reduziu a taxa de quadros de 30fps para aproximadamente 10fps HSV – Hue Saturation Value Deve-se eliminar a saturação e o brilho A cor é alterada da base RGB (red, green and blue) para HSV As componentes S (saturação) e V (brilho) são eliminadas e somente H (hue) é utilizado cvCvtColor( image_camshift, hsv, CV_BGR2HSV ); cvSplit( hsv, hue, 0, 0, 0 ); Histograma Indica quais cores estão sendo utilizadas no CamShift para achar um objeto Também é utilizado uma máscara para limitar os valores das cores e ter uma precisão maior cvSetImageROI( hue, selection ); cvSetImageROI( mask, selection ); cvCalcHist( &hue, hist, 0, mask ); Color Probability Distributions Construido utilizando o histograma e uma imagem com a saturação e o brilho removidos (hue) Cada pixel possui a probabilidade da região apresentar as cores do histograma cvCalcBackProject( &hue, backproject, hist ); cvAnd( backproject, mask, backproject, 0 ); CamShift Utiliza uma janela que tem o tamanho e a posição variáveis para achar a região Zeroth moment: M = ∑∑ I (x, y ) M = ∑∑ xI ( x, y ) ; M = ∑∑ yI (x, y ) First moment: M M x = ;y = Centroid: M M Tamanho da janela é função do zeroth moment 00 x 10 01 x y x 10 c 01 c 00 y 00 y Janela de busca Deve-se transformar o zeroth moment em unidades que façam sentido para o tamanho da janela Se o valor máximo dos pixels é 255 e a figura é 2D, o tamanho da janela deve ser: s = 2⋅ M 00 256 A equação é multiplicada por 2 para a janela se expandir Cálculo do CamShift Escolher o local inicial da janela MeanShift e cálculo do zeroth moment Ajustar o tamanho da janela utilizando o zeroth moment Repetir os dois últimos passos até convergir Cálculo da rotação e dimensões do objeto Second moments: M 20 = ∑∑ x 2 I ( x, y ) ; M 0 2 = ∑∑ y 2 I ( x, y ) x Rotação: a= y x M 11 2 − xc yc M 00 arctan M M 2 2 20 02 M − xc − M − yc 00 00 θ= 2 M b = 2 11 − xc yc M 00 M 20 − xc2 M 00 c= Dimensões do objeto: l= (a + c ) + 2 b 2 + (a − c ) 2 w= (a + c ) − 2 b 2 + (a − c ) 2 M 02 − yc2 M 00 y Exemplo Valor máximo: 206 1D Tamanho da janela: s = 2⋅ M 00 206 Conclusão O objeto de interesse deve possuir uma cor diferente do meio Se há um objeto da mesma cor não muito próximo, não há interferência devido à janela de busca Devido à decomposição das cores para HSV, a iluminação não afeta os resultados