본문 바로가기

3D 스캔

MVE API 분석 1편. MakeScene

https://github.com/simonfuhrmann/mve/wiki/MVE-Users-Guide

 

GitHub - simonfuhrmann/mve: Multi-View Environment

Multi-View Environment. Contribute to simonfuhrmann/mve development by creating an account on GitHub.

github.com

 

MVE는 여러 이미지로부터 3차원 모델을 생성해주는 기능을 하는 라이브러리이다. 이걸 차례차례 분석해볼건데 오늘은 MVE 첫단계에 사용되는 makescene 이라는 함수에 대해 알아보자. 

 

자 그럼 make scene이 어떤 순서로 작동하고, 어떤 기능을 하는지도 함께 이해해보자. 

 

우선 커맨드 라인을 읽어온다. (makescene.cc 1180번째 줄부터)

 

다음으로 view path와 bundle path를 찾아온다.

 

출력 폴더가 있는지 확인한다.

 

이미지만 있으면 이미지를 임포트 하고

 

이미지만 있는게 아니면 bundle을 임포트 한다.

 

여기서 bundle이 무슨 뜻일까?

 

위키를 보고 정리해보자. https://en.wikipedia.org/wiki/Bundle_adjustment

 

Bundle adjustment - Wikipedia

A sparse matrix obtained when solving a modestly sized bundle adjustment problem. This is the arrowhead sparsity pattern of a 992×992 normal-equation (i.e. approximate Hessian) matrix. Black regions correspond to nonzero blocks. In photogrammetry and comp

en.wikipedia.org

 

bundle adjustment(BA)는 씬 지오메트리를 기술하는 3차원 좌표와 상대적인 움직임의 파라미터, 카메라의 광학적 특징을 동시에 최적화 하는 기술로 다양한 뷰포인트로부터 제공되는 3차원 정점들 몇가지를 포함하는 이미지 셋을 입력으로 활용한다. BA 라는 이름은 각각의 3차원 특징점으로 부터의 발생한 광선의 기하적 묶음(번들)과 각 카메라의 광학적 중심을 수렴하게 하는, 즉 모든 이미지의 포인트의 대응하는 이미지 프로젝션을 포함하는 광학적 기준을 따라서 최적화하여 조정된다는 의미를 담고 있다. (무슨 말인지 이해됨?ㅋㅋㅋㅋㅋ) 

위 그림을 보면 조금더 이해가 되려나?.. 사실 나도 클리어하게 뭔지는 모르겠다.

 

다만 확실한건 makescene 함수에 이미지 외의 추가정보를 넣을 수 있다는 것.

 

이후로 일단 이미지를 가지고 무슨일을 하는지 더 살펴보도록 하겠다. 즉 import_images(conf); 요 함수가 뭘하는지 보겠다는 의미.

 

각 이미지들마다 id를 부여한다.

썸네일 이미지도 만들어둔다.

EXIF 데이터도 가능하면 넣어준다.

초기 intrinsic도 세팅해준다.

view를 disc에 저장한다.

그럼 아래와 같은 meta.ini 파일이 각 이미지에 해당하는 폴더마다 생성된다.

 

그러면 bundle이 주어지면 무슨짓을 할까?

 

import_bundle 요 함수를 보자.

 

내부에서 visualSFM이나 photosynther, Noah bundler, colmap bundler 의 출력물이 있나 없나 확인한다. 다 없으면 에러가 난다. 

 

그럼 visualSFM의 bundle이 뭘 의미하는건지 좀 알아볼까?

 

http://ccwu.me/vsfm//doc.html#nvm

 

VisualSFM : A Visual Structure from Motion System - Documentation

VisualSFM : A Visual Structure from Motion System - Documentation VisualSFM : A Visual Structure from Motion System Changchang Wu   Content Basic Usage     Using the VisualSFM GUI     Using VisualSFM through command-line     Dependency on Sif

ccwu.me

위 링크에 들어가면 아래 문서를 볼 수 있다. 

NVM 파일에는 입력 이미지 경로와 복수개의 3D 모델이 들어있다고 한다. 

 

내용을 살펴보면, 모델 내에는 카메라와 3D points의 수 및 정보가 들어있다고 한다.

 

 import_bundle_nvm_or_colmap 함수를 살펴보면

  mve view까지 생성해내는 것을 알 수 있다. 

 

그런데 image 베이스로 작업하는 것인 mve view를 만들어내는 부분이 없었다. 결과적으로 makescene을 이미지만 가지고 실행하는 것은  최적화하기 되기 위한 초기 값을 설정해서 파일구조를 만들어둔다고 이해하면 될 것 같다. 추가로 makescene을 bundle 데이터와 함께 이용한다면, 다른 프로그램에서 최적화해둔 값만 읽어다가 쓴다고 이해할 수 있을 것 같다. 

 

즉 bundle 제공 시, makescene을 이미지만 가지고 실행하는 경우 추가로 해줘야 하는 sfmrecon을 안해도 된다. 

 

부디 잘못 해석한 내용이 없기를..ㅋㅋㅋ

'3D 스캔' 카테고리의 다른 글

texrecon 돌려보기  (0) 2022.06.22
kinfu with azure kinect  (0) 2022.06.14
OpenCV contrib와 함께 빌드하기  (0) 2022.06.10