Mudanças entre as edições de "Visão Estéreo (Bumblebee2)"
(New page: '''Documentação de Visão Estéreo do Robot Tropidurus.''' Lauro J. Lyrio Júnior. '''Instalação do Software da Bumbebee2''' Foi provido com a Câmera Bumblebee2 um cd com o softwar...) |
|||
Linha 1: | Linha 1: | ||
+ | [[category:Carmen]] | ||
'''Documentação de Visão Estéreo do Robot Tropidurus.''' | '''Documentação de Visão Estéreo do Robot Tropidurus.''' | ||
Edição atual tal como às 17h31min de 14 de setembro de 2012
Documentação de Visão Estéreo do Robot Tropidurus.
Lauro J. Lyrio Júnior.
Instalação do Software da Bumbebee2
Foi provido com a Câmera Bumblebee2 um cd com o software para aquisição de imagens e processamento estéreo, no entanto este software se encontra desatualizado e com vários problemas de compatibilidade. Portanto foi necessário a atualização dos mesmos perante a Point Grey, eles se encontram em http://www.lcad.inf.ufes.br/svn/roboticaprobabilistica sob o diretório /Visão Estéreo/ ou podem ser baixados do site da Point Grey (www.ptgrey.com). A instalação do software é bem simplista, sendo que pode ser feita totalmente através dos assistentes de instalação. Somente se atente para o fato de que ele instala as SDK’s em C:/Arquivos de Programas/ e as referências dos exemplos estão para Program Files. Depois de feitas essas correções nos exemplos tudo deverá estar funcionando perfeitamente. Para conferir se tudo ocorreu como esperado, ligue a câmera na fonte com voltagem de 12v e encaixa a conexão FireWire no PC. Inicie o software triclopsDemo.exe que se encontra em C:\Program Files\Point Grey Research\Triclops Stereo Vision SDK\bin\
Aquisição das Imagens
Em nosso projeto é necessário a utilização de duas imagens estéreo retificadas, providas pela câmera Bumblebee2 da Point Grey (veja www.ptgrey.com). Para a obtenção de tais imagens utilizamos a própria API da câmera, que pode ser encontrada na documentação da SDK Triclops (veja Triclops Stereo Vision SDK Manual.pdf), também provido pela Point Grey. A SDK Triclops provê um ferramental amplo para soluções em Visão Estéreo, como retificação de imagens, mapa de disparidades, mapa de profundidade e projeção de nuvem de pontos. Utilizamos a SDK FlyCapture, para capturar o par de imagens da Bumblebee2, e realizamos a retificação das imagens utilizamos a SDK Triclops, o código foi implementado em C++ e posteriormente portado para C# utilizando-se da técnica de PInvoke (veja http://msdn.microsoft.com/en-us/magazine/cc164123.aspx) para utilizar as funções da câmera no código administrado. Foram implementadas 5 funções principais que foram expostas ao usuário por meio de uma DLL, para que o mesmo conseguisse utilizá-las em C# através de PInvoke. (veja http://scriptbrasil.com.br/forum/index.php?showtopic=100232 para saber como criar uma DLL).
O código de exemplo para captura e retificação das imagens pode ser encontrado em http://www.lcad.inf.ufes.br/svn/roboticaprobabilistica sob o diretório /Visão Estéreo/BumblebeeLibraryC++.
Vale ressaltar que a camera Bumblebee2 faz a captura das 2 imagens ao mesmo tempo e retorna para a API um array com as duas imagens (veja TriclopsBuildPackedTriclopsInput em Triclops Stereo Vision SDK Manual.pdf para maiores detalhes), sendo assim se faz necessário o uso de um deslocamento para que seja feita a aquisiçãoda imagem correta. O qual é feito pela parâmetro which_camera da função GetImageDLL(unsigned int which_camera) . Veja o esquema abaixo:
Deslocamento necessário para separar uma imagem da outra.
Visão Estéreo com OpenCV
Para computação do mapa de disparidades e de profundidade, foi utilizada a biblioteca OpenCV, para ser mais exato um wrapper dela para .NET a EmguCV. O processo, pode ser observado em http://www.lcad.inf.ufes.br/svn/roboticaprobabilistica sob o diretório /Visão Estéreo/BumblebeeLibrary (Mais informações em: http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html ).
Utilizando o Código Final
O código se encontra em http://www.lcad.inf.ufes.br/svn/roboticaprobabilistica sob o diretório /Visão Estéreo/BumblebeeLibrary.
Para fins de utilização, o código necessário está implementado em C#, onde são expostas as mesmas funções implementadas na DLL, porém com algumas modificações para adaptá-las ao código administrado:
[DllImport("BumblebeeCamDLL")]
public extern static bool InitBumblebeeCameraDLL(int image_width, int image_height);
[DllImport("BumblebeeCamDLL")]
public extern static bool CaptureImagePairDLL();
[DllImport("BumblebeeCamDLL")]
public extern static TriclopsPackedColorImage GetImageDLL(WhichCamera cam);
[DllImport("BumblebeeCamDLL")]
public extern static void CloseCameraDLL();
[DllImport("BumblebeeCamDLL")]
public extern static tCameraCalibrationInfo GetCameraCalibrationInfo();
E as funções para aquisição do mapa de disparidades:
public Image<Gray, short> GetDisparityMap(Image<Bgr, Byte> image_Left, Image<Bgr, Byte> image_Right) ;
public void DisparityMap(Image<Gray, byte> image_left, Image<Gray, byte> image_right, Image<Gray, short> dispLeft, Image<Gray, short> dispRight);
Para rodar o código basta conferir as dependências do mesmo, no Visual Studio, na aba References e nas Propriedades do Projeto (Lembrando que é necessário a isntalação da EmguCV antes de mais nada: http://www.emgu.com/wiki/index.php/Main_Page). Depois pressione F5, uma tela como abaixo deve aparecer:
Para realizar armazenar as imagens retificadas pressione o botão ImageCapture, as mesmas serão salvas e o caminho onde elas foram salvas deverá ser exibido.