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