Algoritmo para projeção de franjas
status: concluído
Necessário ter um editor para trabalhar com o código em python como o PyCharm
- Clonar este repositório no PyCharm
Após a instalação, você obterá o ambiente de desenvolvimento. O código principal responsável pela saída do algoritmo é o arquivo 'main'. Os outros arquivos encontrados na pasta 'include' correspondem às bibliotecas montadas para o funcionamento da lógica de todo o código executado no 'main'. Dessa maneira, todos os parâmetros de entrada são passados neste mesmo arquivo.
Inicializando os parametros na main
O primeiro passo é inicializar as câmeras. Nesse passo, é preciso informar o número de série de ambas as câmeras. Para isso, na linha 23 do código, é chamada a biblioteca 'StereoCameraController', onde se deve configurar o número de série das câmeras, garantindo que o número de série informado corresponda, respectivamente, à câmera da esquerda e à da direita.
stereo_ctrl = StereoCameraController(left_serial=16378750, right_serial=16378734)
Finalizada essa etapa, o próximo parâmetro do código é o arquivo YAML que corresponde ao resultado das calibrações e pode ser alterado na linha 99 do código, modificando apenas o caminho do arquivo.
# read the yaml_file
yaml_file = '/home/daniel/PycharmProjects/fringe_projection/params/20241018_bouget.yaml'
O último parâmetro que pode ser alterado são os limites dos pontos x, y e z, que afetarão a quantidade de pontos, o tamanho e a região da imagem onde os pontos serão plotados. Você pode verificar isso na linha 109 do código.
# Inverse Triangulation for Fringe projection
zscan = InverseTriangulation(yaml_file)
zscan.points3d(x_lim=(-250, 500), y_lim=(-100, 400), z_lim=(-200, 200), xy_step=7, z_step=0.1, visualize=False)
Rodando a main
Com os passos anteriores verificados, você conseguirá rodar o código e, como resultado, deverá obter a nuvem de pontos do objeto projetado em um arquivo .csv, além do gráfico da nuvem de pontos
Para a criação do algoritmo de projeção de franjas, foram desenvolvidas algumas bibliotecas, nas quais cada uma é responsável por implementar funcionalidades no código principal. É necessária a compreensão de cada uma delas.
FringePattern: Biblioteca responsável por criar e obter as imagens de franjas senoidais.
GrayCode: Biblioteca responsável por criar e obter as imagens de código Gray. Outra funcionalidade desse código é converter uma lista de inteiros em suas representações binárias no código Gray e também ordenar os valores do código Gray de acordo com sua posição na imagem.
stereo_fringe_process: Biblioteca responsável por todo o processamento das imagens capturadas, realizando os devidos cálculos para a obtenção do mapa de fase absoluto.
InverseTriangulation: Biblioteca responsável por criar a nuvem de pontos. Todas as funções nesse módulo foram baseadas no método de triangulação inversa.
StereoCameraController: Biblioteca responsável por obter os parâmetros das câmeras, bem como pela captura e salvamento das imagens obtidas.