Calibração da câmera
As propriedades padrão da biblioteca
ARToolKit encontram-se no arquivo de parâmetros da câmera,
camera_para.dat, localizado na pasta
ARToolKit/bin/Data. Este arquivo é carregado na inicialização da aplicação. Os parâmetros padrão abrangem um amplo conjunto de modelos e fabricantes de câmeras. Porém, sugiro a calibração da câmera conforme as instruções a seguir.
Em primeiro lugar, devemos imprimir os arquivos de calibração
calib_cpara.pdf e
calib_dist.pdf localizados na pasta
patterns. O arquivo calib_cpara.pdf é uma grade de linhas e deverá ser impresso em escala para que as linhas fiquem separadas de exatamente 40 mm.
Já o arquivo calib_dist.pdf contém um padrão de 6x4 pontos e deverá também ser impressos em escala para que os pontos fiquem separados de 40 mm. Ambos deverão ser impressos em papéis papelão ou colados em superfícies rígidas.
A calibração da câmera é calculada extraindo ponto central, distorções da lente e a distância focal da câmera. O programa
calib_dist é usado para calcular o ponto central da imagem e as distorções das lentes. Já o programa
calib_param calcula a distância focal da câmera. Todos os fontes estão disponíveis para estudos. Primeiramente devemos executar o programa calib_dist e depois o calib_cparam.
Execute o programa calib_dist, aponte a câmera para o arquivo calib_dist.pdf impresso de tal modo que todos os pontos estejam visíveis. Então clique com o botão esquerdo do mouse para congelar a imagem de vídeo.
Agora, pressione o botão esquerdo do mouse sobre a imagem e desenhe um retângulo em volta de cada ponto da imagem (segurando o botão do mouse pressionado). Inicie com o ponto mais próximo ao canto superior esquerdo da imagem e prossiga até que todos os pontos tenham sido desenhados. Repita este procedimento de 5 a 10 vezes em vários ângulos.
./calib_dist "v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink"
Using supplied video config string [videotestsrc v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink].
libARvideo: GStreamer 0.10.22
libARvideo: GStreamer pipeline is PAUSED!
libARvideo: GStreamer negotiated 960x720
libARvideo: GStreamer pipeline is PLAYING!
libARvideo: GStreamer pipeline is PAUSED!
Camera image size (x,y) = (960,720)
libARvideo: GStreamer pipeline is PLAYING!
-----------
Press mouse button to grab first image,
or press right mouse button or [esc] to quit.
Grabbed image 1.
-----------
Press mouse button and drag mouse to rubber-bound features (6 x 4),
or press right mouse button or [esc] to cancel rubber-bounding & retry grabbing.
Marked feature position 1 of 24
Marked feature position 2 of 24
Marked feature position 3 of 24
Marked feature position 4 of 24
Marked feature position 5 of 24
Marked feature position 6 of 24
Marked feature position 7 of 24
Marked feature position 8 of 24
Marked feature position 9 of 24
Marked feature position 10 of 24
Marked feature position 11 of 24
Marked feature position 12 of 24
Marked feature position 13 of 24
Marked feature position 14 of 24
Marked feature position 15 of 24
Marked feature position 16 of 24
Marked feature position 17 of 24
Marked feature position 18 of 24
Marked feature position 19 of 24
Marked feature position 20 of 24
Marked feature position 21 of 24
Marked feature position 22 of 24
Marked feature position 23 of 24
Marked feature position 24 of 24
Para finalizar a captura pressione o botão direito do mouse. O programa começará a calcular os valores de distorção da câmera.
-----------
Press mouse button to grab next image,
or press right mouse button or [esc] to calculate distortion parameter.
[480,0, 360,0, 9,4] 1294,330078
[430,0, 310,0, 9,3] 1284,283364
[430,0, 315,0, 9,4] 1283,999911
[430,0, 320,0, 9,5] 1283,841552
[430,0, 325,0, 9,6] 1283,816407
[430,0, 325,0, 9,6] 1283,816407
[425,0, 323,0, 9,5] 1283,484534
[425,0, 323,0, 9,5] 1283,484534
Olen = 425,000000, Ilen = 432,696135
Olen = 535,000000, Ilen = 550,881766
Olen = 323,000000, Ilen = 326,300477
Olen = 397,000000, Ilen = 403,228407
--------------
Center X: 425,000000
Y: 323,000000
Dist Factor: 9,500000
Size Adjust: 1,010218
--------------
-----------
Checking fit on image 1 of 5.
Press mouse button to check fit of next image.
Para verificar se estes parâmetros e/ou cálculos estão corretos, pressione o botão esquerdo do mouse para mostrar as imagens capturadas com as linhas vermelhas desenhadas passando pelos pontos de calibração. Estas linhas deverão se cruzar no centro de cada um destes pontos. Cada vez que o botão esquerdo do mouse é pressionado, a próxima imagem capturada é mostrada.
O calib_cparam, como mencionado anteriormente, é usado para encontrar a distância focal da câmera, além de outros parâmetros. Para continuarmos, execute o programa e informe as coordenadas do centro e o fator de distorção disponibilizado pelo aplicativo calib_dist.
Coloque o arquivo calib_cpara.pdf diante à câmera de tal modo que a imagem fique o mais perpendicular possível ao eixo óptico da câmera, e também todas as linhas devem ser visualizadas.
Agora pressione o botão esquerdo do mouse para capturar a imagem. Logo a seguir aparecerá uma linha branca horizontal na imagem. Movimente a linha branca até cobrir a linha preta no topo e pressione ENTER. A linha movimenta-se para cima ou para baixo usando-se as teclas de seta para cima e para baixo. A linha pode ainda ser rotacionada no sentido horário e anti-horário usando as teclas de setas para a direita e para a esquerda. Repetir este processo com todas as linhas verticais e horizontais por 5 vezes. Ao terminar, informe o nome do arquivo e pronto.
./calib_cparam
Input center coordinates: X = 425
: Y = 323
Input distortion ratio: F = 9.500000
Input size adjustment factor: S = 1.010218
Number of horizontal lines (7):
Number of vertical lines (9):
Number of iteration (5):
Distance among lines (40.000000):
Distance to move (100.000000):
Using supplied video config string [v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink].
libARvideo: GStreamer 0.10.22
libARvideo: GStreamer pipeline is PAUSED!
libARvideo: GStreamer negotiated 960x720
libARvideo: GStreamer pipeline is PLAYING!
libARvideo: GStreamer pipeline is PAUSED!
Camera image size (x,y) = (960,720)
Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
point_num = 315
--------------------------------------
SIZE = 960, 720
Distortion factor = 425,000000 323,000000 9,500000 1,010218
389,57470 -967,88703 -97,42965 0,00000
0,00000 594,43782 -644,58036 0,00000
0,00000 0,00000 1,00000 0,00000
--------------------------------------
Input filename: webcam3_para.dat
Para utilizar este arquivo de calibração, basta copiá-lo na pasta Data com o nome camera_para.dat.
Agora, para testar o funcionamento da realidade aumentada, execute o programa simpleTest e veja o resultado ao apresentar o arquivo
pattHiro.pdf impresso para a câmera.
./simpleTest
Using config string from environment [v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink].
libARvideo: GStreamer 0.10.22
libARvideo: GStreamer pipeline is PAUSED!
libARvideo: GStreamer negotiated 960x720
libARvideo: GStreamer pipeline is PLAYING!
libARvideo: GStreamer pipeline is PAUSED!
Image size (x,y) = (960,720)
*** Camera Parameter ***
--------------------------------------
SIZE = 960, 720
Distortion factor = 477,750000 395,250000 11,644444 1,012757
1051,42721 0,00000 474,75000 0,00000
0,00000 1089,14127 362,25000 0,00000
0,00000 0,00000 1,00000 0,00000
--------------------------------------
libARvideo: GStreamer pipeline is PLAYING!
Princípio de desenvolvimento
1. Inicialização: Inicializa o dispositivo de captura, carrega em memória o modelo impresso e carrega o parâmetros de calibração da câmera.
2. Captura um quadro.
3. Detecta as marcas do padrão na imagem.
4. Calcula a transformação relativa.
5. Desenha o objeto virtual sob o padrão detectado.
6. Finaliza o dispositivo de captura.
A aplicação
ExView exibe a visão externa da câmera, como se a câmera estivesse sendo rastreada. Para executar este aplicativo, digite o comando
./exview na pasta bin.
Vejam como é simples a funcionalidade do loop principal:
Captura o quadro.
arVideoCapNext();
Checa a visibilidade
k = -1;
for( j = 0; j < marker_num; j++ ) {
if( patt_id == marker_info[j].id ) {
if( k == -1 ) k = j;
else if( marker_info[k].cf < marker_info[j].cf ) k = j;
}
}
if( k == -1 ) {
contF = 0;
argSwapBuffers();
return;
}
Calcula a transformação relativa.
if( mode == 0 || contF == 0 ) {
arGetTransMat(&marker_info[k], patt_center, patt_width, patt_trans);
}
else {
arGetTransMatCont(&marker_info[k], patt_trans, patt_center, patt_width, patt_trans);
}
contF = 1;
Desenha o objeto:
draw( patt_trans );
Conclusão
ARToolKit é muito utilizado pelo fato de ser distribuído no modelo open source e para fins não comerciais, incentivando a liberdade para os usuários executarem, estudarem e modificarem os códigos-fontes da biblioteca conforme a sua necessidade.
Como sempre menciono: Colaborar atrai amigos, competir atrai inimigos...