Instalando o VisualSFM no Linux Mint 17

Encontrei dois sites interessantes sobre o uso do software VisualSFM para reconstrução de objetos em 3D (Scanner 3D) usando apenas fotos de vários ângulos do objeto desejado.

Neste site você encontra o passo-a-passo de como usar o software:
http://wedidstuff.heavyimage.com/index.php/2013/07/12/open-source-photogrammetry-workflow/

O detalhe é que este software não é muito simples de instalar, mas felizmente existe um tutorial bem explicativo:
http://www.10flow.com/2012/08/15/building-visualsfm-on-ubuntu-12-04-precise-pangolin-desktop-64-bit/

Durante a compilação tive que instalar várias dependências para finalizar corretamente.

O comando “history” ajuda na hora de documentar quais pacotes você deve instalar:

sudo apt-get install libjpeg62
sudo apt-get install libgtkgl2.0-dev
sudo apt-get install libglu1-mesa-dev
sudo apt-get install libc6-dev-i386 libhdf5-serial-dev libgtest-dev libgsl0-dev python-dev cmake imagemagick libmagick++-dev gfortran minpack-dev liblapack-dev libatlas-dev libatlas-base-dev libboost-dev libc6-dev-i386 libgsl0-dev
sudo apt-get install libglew-dev
sudo apt-get install libilmbase-dev
sudo apt-get install freeglut3 freeglut3-dev
sudo apt-get install libdevil1c2 libdevil-dev
sudo apt-get install linux-libc-dev
sudo apt-get install nvidia-cuda-dev
sudo apt-get install nvidia-cuda-toolkit

Esta foi a ordem de instalação dos pacotes, mas claro que você pode juntar todos os comandos acima num único comando.

Quando terminar a compilação e você adicionar os comandos no seu .bashrc (PATH e LD_LIBRARY_PATH para que o VisualSFM funcione de qualquer lugar que for chamado), basta seguir o tutorial do primeiro link e executar o comando:

$ VisualSFM 

Este é o log que o programa exibiu no terminal durante o processo de reconstrução 3D:

$ VisualSFM 
ERROR: CUDA is unlikely to be supported!
CPU single-precisoin solver; 4 cores.
CPU single-precisoin solver; 4 cores.
WARNING: 78 points are behind camras.
WARNING: 5 points are behind camras.
WARNING: 12 points are behind camras.
WARNING: 1 camera moved to avoid degeneracy.
WARNING: 103 points are behind camras.
WARNING: 1 camera moved to avoid degeneracy.
WARNING: 53 points are behind camras.
WARNING: 150 points are behind camras.
WARNING: 50 points are behind camras.
WARNING: 8 points are behind camras.
WARNING: 2 points are behind camras.
WARNING: 1 camera moved to avoid degeneracy.
WARNING: 4 points are behind camras.
WARNING: 50 points are behind camras.
WARNING: 105 points are behind camras.
WARNING: 1 camera moved to avoid degeneracy.
WARNING: 14 points are behind camras.
WARNING: 9 points are behind camras.
Reading bundle...23 cameras -- 11366 points in bundle file
***********
23 cameras -- 11366 points
Reading images: ***********************
Set widths/heights...done	0 secs
done	0 secs
slimNeighborsSetLinks...done	0 secs
mergeSFM...***********resetPoints...done
Rep counts: 11366 -> 1506  	1 secs
setScoreThresholds...done	0 secs
sRemoveImages... ************
Kept: 1 2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 19 20 

Removed: 0 3 18 21 22 
sRemoveImages: 23 -> 18	0 secs
slimNeighborsSetLinks...done	0 secs
Cluster sizes: 
18 
Adding images: 
0 
Image nums: 23 -> 18 -> 18
Divide: 
done	0 secs
17 images in vis on the average
--------------------------------------------------
--- Summary of specified options ---
# of timages: 18 (enumeration)
# of oimages: 0 (enumeration)
level: 1  csize: 2
threshold: 0  wsize: 7
minImageNum: 3  CPU: 4
useVisData: 1  sequence: -1
--------------------------------------------------
Reading images: ******************
1 2 4 5 Harris running ...Harris running ...Harris running ...Harris running ...7867 harris done
DoG running...7524 harris done
DoG running...7780 harris done
DoG running...7660 harris done
DoG running...11841 dog done
11453 dog done
6 Harris running ...7 Harris running ...11371 dog done
8 Harris running ...11590 dog done
9 Harris running ...7937 harris done
7873 harris done
DoG running...DoG running...7859 harris done
DoG running...7888 harris done
DoG running...11831 dog done
10 Harris running ...11814 dog done
11 Harris running ...11796 dog done
12 Harris running ...11569 dog done
13 Harris running ...7810 harris done
DoG running...7867 harris done
DoG running...7885 harris done
DoG running...7976 harris done
DoG running...11664 dog done
14 Harris running ...11555 dog done
15 Harris running ...11503 dog done
16 Harris running ...11492 dog done
17 Harris running ...7889 harris done
DoG running...7937 harris done
DoG running...8039 harris done
DoG running...7674 harris done
DoG running...11815 dog done
19 Harris running ...11658 dog done
20 Harris running ...11534 dog done
11786 dog done
7956 harris done
DoG running...7812 harris done
DoG running...11619 dog done
11648 dog done
done
adding seeds 
(4,14112)(15,14826)(11,11580)(10,17663)(16,6016)(14,8447)(6,1015)(3,0)(7,0)(8,0)(2,5)(9,303)(12,302)(0,1446)(5,234)(13,7)(17,3265)(1,4141)done
---- Initial: 0 secs ----
Total pass fail0 fail1 refinepatch: 420784 160226 234044 26514 186740
Total pass fail0 fail1 refinepatch: 100 38.078 55.6209 6.3011 44.3791
Expanding patches...
---- EXPANSION: 3623 secs ----
Total pass fail0 fail1 refinepatch: 1870144 1707366 90931 71847 1779213
Total pass fail0 fail1 refinepatch: 100 91.296 4.86225 3.84179 95.1377
FilterOutside
mainbody: 
Gain (ave/var): 3.43597 4.34296
1790691 -> 1400840 (78.229%)	0 secs
Filter Exact: ******************
1400840 -> 1069251 (76.3293%)	0 secs
FilterNeighbor:	1069251 -> 861199 (80.5423%)	0 secs
FilterGroups:	86
861199 -> 731982 (84.9957%)	0 secs
STATUS: 63493 0 1902422 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 
Expanding patches...
---- EXPANSION: 6473 secs ----
Total pass fail0 fail1 refinepatch: 1614281 809529 225725 579027 1388556
Total pass fail0 fail1 refinepatch: 100 50.148 13.983 35.869 86.017
FilterOutside
mainbody: 
Gain (ave/var): 4.72691 4.08953
1541511 -> 1495754 (97.0317%)	0 secs
Filter Exact: ******************
1495754 -> 1089231 (72.8215%)	0 secs
FilterNeighbor:	1089231 -> 1005671 (92.3285%)	0 secs
FilterGroups:	100
1005671 -> 910438 (90.5304%)	0 secs
STATUS: 107343 0 3247058 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 
Expanding patches...
---- EXPANSION: 7093 secs ----
Total pass fail0 fail1 refinepatch: 1477285 717982 219394 539909 1257891
Total pass fail0 fail1 refinepatch: 100 48.6015 14.8512 36.5474 85.1488
FilterOutside
mainbody: 
Gain (ave/var): 4.80507 4.23908
1628420 -> 1578352 (96.9254%)	0 secs
Filter Exact: ******************
1578352 -> 1134779 (71.8964%)	0 secs
FilterNeighbor:	1134779 -> 1058326 (93.2627%)	0 secs
FilterGroups:	105
1058326 -> 962984 (90.9912%)	0 secs
STATUS: 148417 0 4463834 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 

Observe no log acima que a primeira “EXPANSION” demorou quase 1 hora e as duas seguintes demoraram quase 2 horas cada.

Eu comecei os testes no início da tarde de ontem e deixei o computador ligado a noite terminando a conversão. A última vez que olhei há quanto tempo o programa VisualSFM estava rodando (usando o etime do comando ps) já havia se passado 10 horas.

É importante lembrar que usei um notebook modesto: Intel® Core™ i3-3227U (1.9GHz, 4 Threads, 3Mb Cache, Placa de vídeo Intel HD Graphics) sem suporte a CUDA. Vou refazer o teste usando o outro notebook que tem uma configuração um pouco melhor (Core i7 com placa de vídeo NVIDIA e com suporte CUDA) para ver se o tempo de processamento diminuirá muito.

Seguem abaixo alguns screenshots e alguns comentários:

Fotos Carregas no VisualSFM

Neste primeiro teste eu não preocupei com alguns detalhes: número reduzido de fotos para processamento (23 fotos); nem todos os lados do objeto foram fotografados suficientemente, note nas fotos acima que o lado esquerdo do Mario foi fotografado aprox. 10 fotos, enquando o lado direito e traseiro foram muito pouco fotografados; não preocupei em corrigir os avisos de advertência do software sobre a posição da camera, etc.

Após rodar o comando para computar os pontos que estão faltando e computar a reconstrução 3D o programa gera um nuvem de pontos com as informações colhidas das fotos:

Nuvem de Pontos

E finalmente o resultado de aproximadamente 15 horas de processamento após executar o “Dense Reconstruction” (botão CMVS) :

Mario Semi Reconstruido

Para alternar entre o modo visualização 3D e nuvem de pontos basta pressionar a tecla TAB.

Apesar do resultado inicial não ser o eu esperava, fiquei surpreso com o nível de detalhes da parte reconstruída, já que o boneco Mario usado neste teste era muito pequeno, aprox. 4cm de altura.

Para um resultado melhor seria interessante usar uma plataforma giratória onde o objeto seria fixado e as fotos seriam tiradas em ângulos bem definidos. Nesta plataforma a altura da camera seria reajustada após obter as fotos de 360º do objeto.

Advertisements

5 thoughts on “Instalando o VisualSFM no Linux Mint 17

  1. Pessoal, estou tendo problema na visualização da nuvem densa, pois depois de salvar e ser processada, aplico o comando peço para visualizar e não aparece nada. Alguém tem alguma dica? Obrigado!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s