Tutorial passo-a-passo: Escaneamento 3D por fotografia com software livre

Resultado final do escaneamento, importado no Blender. No lado esquerdo a visualização com as cores dos vértices ativa, do lado direito apenas o solid.

For who speaks English, please see this link: http://arc-team-open-research.blogspot.com.br/2012/12/how-to-make-3d-scan-with-pictures-and.html

Per quelli che parlano in italiano, si prega di leggere qui: http://exporttocanoma.blogspot.com.br/2012/12/sfm-structure-from-motion-terza-parte.html

Nesse artigo descrevo passo-a-passo a técnica utilizada para escaneamento por fotografias com software livre.

Antes de tudo devo agradecer ao Bob Max do blog ExporttoCanoma, o qual me pediu algumas dicas de importação de nuvem de pontos no Blender e acabou fazendo uma citação ao meu nome no seu blog: http://exporttocanoma.blogspot.com.br/2012/12/sfm-rilievo-porta-immacolata-gaeta.html

Graças a esse post e a outra solicitação, escrevi um documento em inglês que agora foi traduzido para o português e se tornou esse tutorial.

Exemplo de escaneameto de um velho tanque de combustível

Também agradeço ao Pierre Moulon, expert em SfM que desenolveu o Python Photogrammetry Toolbox, peça base dessa tecnologia de escaneamento.

E por último e não menos importante aos irmãos Alessandro e Luca Bezzi desenvolvedores do Linhx ArcheOS e do PPT GUI, que será abordado nesse documento.

Escaneamento 3D com software livre

Para que esse tutorial seja acompanhado, você vai precisar antes de tudo de um conjunto de fotografias.

Se desejar usar as mesmas que foram utilizadas aqui, você pode baixá-las no seguinte link:

http://www.hypr3d.com/models/50c070b7979a5c000200006b

Para salvá-las basta criar um diretório, ir com o mouse sobre a imagem desejada, clicar no botão direito e escolher a opção “Salvar link como…”.

Com as imagens em “mãos”, precisamos agora dos programas que serão utilizados.

Primeiramente baixe o Python Photogrammetry Toolbox compatível com o seu sistema nesse link:

http://www.arc-team.homelinux.com/arcteam/ppt.php

Junto ao link do programa,estão as informações acerca das bibliotecas necessárias para o seu funcionamento.

Caso esteja no Ubuntu, a instalação via terminado seria essa:

$ sudo apt-get install python-qt4, python-imaging, libblas3gf, libblas-dev, liblapack3gf, liblapack-dev, libjpeg62

Para que o programa funciona corretamente é necessário corrigir o caminho de onde ele foi baixado, como aparece na linha alaranjada.

Basta agora rodar o script (no Linux) com o seguinte comando:

$ ./ppt_gui_start

Antes de enviar as fotos que serão calculadas, é essencial que configuremos os dados da câmera utilizada nas fotografias, assim o cálculo será o mais preciso possível.

Pressione no marcador “Check camera Database”.

Os dados aparecerão e eventualmente podem ser preenchidos no terminal, por conta disso feixe ele posicionado em um ponto de boa visão no desktop.

Clique em “Select Photos Path”.

Vá até o diretório onde você salvou as fotografias ( apenas elas) e depois clique em abrir.

Em seguida clique em “Run” e aguarde poucos segundos.

Se tudo correr bem, aparecerá a seguinte mensagem no terminal:

Camera is already inserted into the database

Se não aparece isso, basta você segui os passos descritos nesse tutorial:

http://vai.uibk.ac.at/dadp/doku.php?id=ppt_check_database_en

Como tudo correu bem, copie o caminho do diretório com as fotografias.

1) Clique no campo “Run Bundler”.

2) Cole o caminho em “Select Photos Path”.

1) Selecione a opção “Scale Photos with a Scaling Factor”. Isso fará com que o programa use a fotografia em todas as suas dimensões. Nesse caso é uma boa pedida, mas pode travar aqueles computadores com processador mais modesto.

2) Clique em “Run”.

Dependendo do poder de processamento de seu computador, espere alguns minutos para que o programa calcule a nuvem de pontos.

O cálculo estará finalizado quando você ver a seguinte mensagem no terminal:

Finished! See the results in the ‘/tmp/”DIRETÓRIO”‘ directory

Nesse caso a mensagem foi a seguinte:

Finished! See the results in the ‘/tmp/osm-bundler-ibBZV9’ directory

O Nautilus será aberto mostrando o diretório em questão.

OBS.: Se você estiver com muita curiosidade, pode ver o resultado prévio dos cálculos abrindo o arquivo .PLY de maior numeração dentro do diretório Bundle.

Para visualizar os arquivos .PLY você precisará do software Meshlab, ele pode ser encontrado aqui: http://meshlab.sourceforge.net/

Agora precisamos mandar o programa calcular o refinamento da nuvem de pontos. Aproveite e copie o caminho de onde ele enviou os cálculos preliminares.

Volte a interface do PPT GUI:

1) Clique em “or run PMVS without CMVS”

2) Cllique em “Use directly PMVS2 (withour CMVS):

1) Cole o caminho copiado em “Select Bundler Output Path”

2) Clique em “Run” e aguarde alguns minutos até o cálculo ser finalizado.

Ao terminar o cálculo, novamente o Nautilus será aberto, mostrando um novo diretório, trata-se do PMVS.

Dentro do PMVS existe ainda outro, chamado models.  É lá que está o arquivo pmvs_options.txt.ply. Esse arquivo é o resultado final dos cálculos.

Ao abrir o arquivo no Meshlab, o que vemos é quase uma fotografia formada pela nuvem de pontos. Perceba que é uma nuvem muito mais densa do que aquela aberta prematuramente há alguns parágrafos atrás.

No entando, apenas parece uma imagem. Se olharmos logo acima, o tipo de visualização que está ativada é a “Points”.

Se selecionarmos o tipo de visualização “Flat Lines” por exemplo, a “imagem” irá desaparecer, isso porque é uma nuvem de pontos e não um objeto formado por faces/polígonos.

Clique novamente no tipo de visualização “Points”. Clique no ícone “Layers” (A) e veja que uma janela se a direita (B) com a inscrição “0 pmvs_options.txt.ply”.

Chegou a hora de criarmos uma malha (mesh) usando como base a nuvem de pontos.

Para isso vamos inicialmente em:

“Filters” -> “Remeshing, simplification and reconstruction” -> “Surface Reconstruction: Poisson”

Uma janela se abrirá com os valores por default.

Para que a reconstrução tenha uma boa qualidade, é necessário que alteremos as duas primeiras propriedades aumentando seus valores para 11 e 9 respectivamente. Clique em “Apply” assim que terminar.

É possível que, dependendo da potência do processador o arquivo feche sem fazer o cálculo. Se isso acontecer, abra novamente e use valores mais baixos.

Ao terminar o cálculo você notará duas coisas:

1) Que surgiram novos pontos brancos na cena.

2) Que foi criado outro layer chamado “1 Poisson mesh *”

Isso significa que uma nova malha foi criada.

No entanto, quando clicamos no ícone “Flat lines” vemos que a malha criada circundou a parte da frente do portal ocultando-o.

Mesmo quando damos menos zoom e orbitamos o objeto o que nos é mostrado é apenas a “parte de trás” da porta. Precisaremos apagar as faces da frente para que apareça a porta a partir de quem a visualiza pela frente.

1) Clique novamente no ícone “Points” (A)

2) Orbite a cena até que a visualização da porta seja pela lateral.

3) Clique no ícone “Select faces in a rectangular region” (B).

1) Faça uma janela de seleção abrangendo as faces frontais (1A-2A)

2) Clique em “Delete the current set of selected faces”. (B)

Ao clicar novamente no tipo de visualização “Flat Lines” o que vemos é uma malha bastante escura com elementos poucos distinguíveis em virtude da subdivisão promovida pelo algoritmo Poisson.

Mude o tipo de visualização para “Smooth”, assim o que veremos são apenas as faces, sem as linhas que as envolvem.

No entanto, atestamos que as cores dos pontos, que dão aquele efeito de fotografia não foram transferidos para a malha criada, deixando-a apenas na cor branca.

Para pintar a malha com as cores da nuvem de pontos, vamos em:

Filters -> Sampling -> Vertex Attribute Transfer

Uma janela se abrirá. Mas teremos que fazer algumas poucas alterações para que o comando funcione da forma desejada.

Precisaremos inverter os objetos de Source Mesh para “pmvs_options.txt.ply e no Target Mesh para “Poisson mesh”.

Assim, as cores da nuvem de pontos será projetada na malha.

OBS.: Parte substancial desse passo foi possível graças a um PDF baseado nesse vídeotutorial: Photogrammetry Guide de Josh Harle: http://vimeo.com/14783202

Assim que você clicar em “Apply”, prontamente as cores serão projetadas na malha e ela se parecerá mais com a nuvem de pontos.

Para salvar essas alterações em um arquivo a parte, vá em “File -> Save Mesh As…“.

E salve o arquivo .PLY.

OBS.: Fique atento ao fato do sistema apagar tudo o que ficar dentro da pasta /tmp assim que ele reiniciar. Se você quiser conservar os dados gerados pelo PPT GUI, não se esqueça de mover o diretório para outro lugar.

Uma vez que o arquivo foi salvo, ele pode ser importado em uma série de programas que trabalham com 3D, como o Blender, por exemplo.

Os fins para esse tipo de escaneamento são muitos, que vão desde a área científica até o campo das artes.

Outros exemplos de escaneamento:

Bola de futebol

Espero que esse tutorial tenha trazido a luz o funcionamento dessa tecnologia no mundo do software livre de uma forma acessível a você.

Um grande abraço, nos vemos no próximo!


5 thoughts on “Tutorial passo-a-passo: Escaneamento 3D por fotografia com software livre

  1. Rover

    Cara muito loco estes programas, da qualidade em, para usinar deve ficar show !, no artcam ele nao consegue esta definicao.

  2. Jafé Ribeiro

    Acredito que sim, mas confirmando: seria possível fazer a construção de uma cabeça baseado em fotos? Belo tutorial, Cícero.

  3. admin Post author

    Olá Jafé! É possível sim. E fica melhor quando a pessoa fecha os olhos.

    Grande abraço e grato pela visita!

  4. isaias

    bah mto bom esse programa, estou querendo mto mexer nele, só que estou com dificuldades de instalar no windows 64bit, nao poderia mostrar um passo a passo da instalaçao do programa?? desde ja agreadeço.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Spam Protection by WP-SpamFree