You are on page 1of 8

TUTORIAL KINECT + MATLAB 1 INTRODUO Tutorial referente integrao entre o sensor Kinect do videogame Xbox 360 e o software Matlab.

b. O sensor composto por 1 cmera RGB convencional e um sensor infra-vermelho que capaz de capturar a profundidade do ambiente com resoluo de at 640x480 pontos com 11 bits de resoluo, ou seja, com at 2048 nveis de intensidade e freqncia de atualizao de 30 Hz. A distncia mensurada pode ser de at 3.5 metros. 2 2.1 INSTALAO DO KINECT OPENNI A instalao do Kinect pode ser feita no Windows, Linux e Mac. Para o presente tutorial ser utilizado o Windows tendo compatibilidade com verso XP, Vista e 7. O primeiro arquivo a ser instalado o OpenNI, recomenda-se a utilizao da verso 1.0.0.25 disponvel em:

(http://kinect.dashhacks.com/sites/kinect-hacks.com/files/1.openni-bin-win32v1.0.0.25.exe). Foram realizados testes com verses posteriores sem sucesso de compatibilidade com o driver a ser instalado posteriormente. O processo de instalao bastante simples, sendo necessrio apenas confirmar o passo-a-passo. 2.2 SENSOR KINECT

O segundo arquivo o driver para o Kinect, recomenda-se o uso da verso 5.0.0, pode ser obtida em: (http://www.kinect-hacks.com/sites/kinecthacks.com/files/3.sensorkinect-win32-5.0.0.exe). Da mesma forma que o item anterior, basta confirmar cada uma das etapas para concluir a instalao. 2.3 NITE MIDDLEWARE

Middleware responsvel pela integrao dos mdulos anteriores, recomenda-se a verso 1.3.0.18 a ser obtida em: (http://kinect.dashhacks.com/sites/kinect-hacks.com/files/nite-bin-win32v1.3.0.18.exe). Para a instalao deve-se usar o serial: (0KOIk2JeIBYClPWVnMoRKn5cdY4=). Concluda a instalao necessrio sobrescrever alguns arquivos para o correto funcionamento do sistema.
ARTHUR SCHULER DA IGREJA Pgina 1

2.4

SUBSTITUIO DOS ARQUIVOS XML

Deve-se copiar todos os arquivos da pasta (C:\Arquivos de Programas\Prime Sense\Sensor\SampleXMLs\NITE\Data) e colar e substituir em (C:\Arquivos de Programas\ Prime Sense\NITE\Data). Tambm devem ser copiados os arquivos dispostos em (C:\Arquivos de Programas\Prime Sense\Sensor\SampleXMLs\OPENNI\Data) e colar e substituir na pasta (C:\Arquivos de Programas\OpenNI\Data). Neste momento conecta-se o Kinect na tomada e na USB do computador, aps o processo de instalao dos drives, ao acessar o Gerenciados de Dispositivos do computador o dispositivo deve estar identificado conforma a Figura 1.

Figura 1 Kinect instalado no Windows.

Recomenda-se testar o funcionamento do sistema com um dos exemplos disponveis em (C:\Arquivos de Programas\Prime Sense

OpenNI\Samples\Bin\Release). Na Figura 2 visto um exemplo de imagem obtida atravs do exemplo SimpleViewer.net.exe. Vale citar que para que as imagens sejam capturadas, os objetos devem estar a no mnimo 1.2 metros. As regies em preto so reas onde os objetos esto prximos demais e no podem ser detectados.

Figura 2 Exemplo de imagem do sensor infravermelho.

ARTHUR SCHULER DA IGREJA

Pgina 2

ARQUIVOS NECESSRIOS PARA O MATLAB

No Matlab ser utilizada a biblioteca desenvolvida por Tim Zaman, devese obter a ltima verso em (http://sourceforge.net/projects/kinect-mex/files/) e descompactar no diretrio padro do Matlab, normalmente Meus Documentos\MATLAB. 4 LEITURA E RECONSTRUO DE UM OBJETO 3D

No presente exemplo ser scaneado um objeto e o mesmo ser reconstrudo em uma superfcie no Matlab, inclusive com sua aparncia mantida. 4.1 AQUISIO DA IMAGEM Para a aquisio da imagem deve-se digitar no workspace:
>> context = mxNiCreateContext('C:\Users\ARTHUR\Documents\MATLAB\KINECT\Config\SamplesConfig.x ml'); >> width = 640; >> height = 480; >> option.adjust_view_point = true;

Vale observar que todo o caminho para o arquivo SamplesConfig.xml deve estar especificado corretamente. Em seguida deve-se executar:
>> [rgb, depth] = mxNiImage(context, option);

Com isso obtm-se 2 matrizes, a matriz depth contm os valores obtidos do sensor infravermezdlho e a matriz rgb contm a imagem da cmera convencional. Para visualizar a imagem que est sendo reconstruda basta digitar:
>> image(rgb);

Figura 3 Cena a ser reconstruda.

ARTHUR SCHULER DA IGREJA

Pgina 3

O prximo passo a converso da matriz depth para o padro Double de varivel:


>> profundidade=double(depth);

Como o objeto a ser reconstrudo est no centro da imagem, sero eliminados 160 pixels da imagem original. A matriz resultante ser quadrada com dimenses 480 x 480:
>> profundidade=profundidade(1:480,81:560);

O mesmo deve ser feito com a imagem da cmera convencional, vale lembrar que essa matriz tem 3 dimenses, sendo que cada dimenso contm uma das componentes RGB (Vermelho, Verde e Azul).
>> cor(1:480,1:480,1:3)=rgb(1:480,81:560,1:3);

Deve-se gerar os vetores X e Y que serviro para compor a superfcie a ser plotada, tais vetores devem ter os valores repetidos nas colunas para o vetor X e nas linhas para o vetor Y, segue algoritmo para gerao de tais vetores:
i=1; while i<481 Y(i,(1:480))=i; X((1:480),i)=i; i=i+1; end

Pode-se gerar neste momento uma visualizao da superfcie obtida at o momento.


>> mesh(X,Y,profundidade);

Figura 4 Superfcie gerada.

ARTHUR SCHULER DA IGREJA

Pgina 4

A matriz de profundidade contm neste momento valores com a distncia da cmera at o fundo da imagem. Como o objetivo a reconstruo da cena do ponto de vista da cmera, uma inverso dos valores necessria, ou seja, obter a distncia da parede at o sensor, para isso basta:
>> profundidade=max(profundidade(1:480))-profundidade;

Plotando-se a nova matriz pode-se notar a diferena na Figura 5.


>> mesh(X,Y,profundidade);

Figura 5 Superfcie gerada.

Nota-se que a imagem tem regies com rudo, para melhorar o modelo sero identificados com a ferramenta Data cursor os ponto que realmente compe a imagem. Essa ferramenta indica as coordenadas onde o usurio clicar na imagem, para acessar basta acessar o menu Tools, opo Data cursor.

Figura 6 Superfcie com pontos demarcados.

ARTHUR SCHULER DA IGREJA

Pgina 5

Ao utilizar o comandomesh a escala de cores indica os valores no eixo Z, quando mais fria a cor (mais prxima do azul), menor o valor indicado, ao passo que quanto mais quente a cor (mais prxima do vermelho), maio o valor indicado. Foram selecionados 2 pontos conforme visto na Figura 6 para identificar a faixa de valores que representam de fato a cena, o primeiro ponto tem a coordenada em Z com valor 1323 e o segundo ponto 981. Em seguida feita a seleo de valores na faixa determinada em uma matriz auxiliar:
>> profundidade2= profundidade<1350;

A Matriz resultante tem o valor 1 nas coordenadas onde o valor da matriz profundidade est na faixa selecionada e 0 caso contrrio. Essa uma forma prtica de selecionar valores visto que basta multiplicar esta matriz pela matriz original para selecionar os valores vlidos e atribuir 0 onde foi detectado rudo ou valores indesejados.
>> profundidade=profundidade2.*profundidade;

Pode-se plotar o resultado para verificar as alteraes:


>> mesh(X,Y,profundidade);

Figura 7 Superfcie aps seleo de valores.

O ltimo passo consiste em unir a matriz de profundidade aps a seleo com a foto RGB. A foto ser aplicada ao longo da superfcie, para isso ser usado o comando warp:
>> warp(X,Y,profundidade,cor); >> grid on;

Por fim deve-se deletar o objeto que faz a aquisio da imagem.


>> mxNiDeleteContext(context);

ARTHUR SCHULER DA IGREJA

Pgina 6

Figura 8 Imagem reconstruda em 3D.

Segue outro exemplo de reconstruo:

Figura 9 Imagem reconstruda em 3D.

ARTHUR SCHULER DA IGREJA

Pgina 7

ARTHUR SCHULER DA IGREJA

Pgina 8

You might also like