본문 바로가기

3D 스캔

texrecon 돌려보기

https://github.com/nmoehrle/mvs-texturing

 

GitHub - nmoehrle/mvs-texturing: Algorithm to texture 3D reconstructions from multi-view stereo images

Algorithm to texture 3D reconstructions from multi-view stereo images - GitHub - nmoehrle/mvs-texturing: Algorithm to texture 3D reconstructions from multi-view stereo images

github.com

 

texrecon은 여러장의 컬러 이미지를 가지고 3D 객체의 텍스쳐를 만들어주는 역할을 하는 프로그램이다.

 

보통의 사용 방식은 다음과 같다.

 1. 여러 이미지로 SFM을 계산하고

 2. 깊이맵을 생성한 후

 3. 포인트 클라우드를 추출한 다음

 4. 메시를 만든다.

 5. 해당 메시와 SFM 정보를 이용하여 texrecon을 수행한다.

 

 4번까지만 하면

 

 이런 결과물이 나오는데

5번 즉 texrecon 까지 해주면

요런 형태의 결과물이 나온다. 

 

자 그럼 이걸 어떻게 쓰는지 좀 살펴보자.

 

아래 내용들은 texrecon을 인자 없이 실행시키면 나오는 메세지다. 

 

texrecon (built on Jul 22 2021, 18:29:50)

Textures a mesh given images in form of a 3D scene.

Usage: texrecon [options] IN_SCENE IN_MESH OUT_PREFIX

IN_SCENE := (SCENE_FOLDER | BUNDLE_FILE | MVE_SCENE::EMBEDDING)

SCENE_FOLDER:
Within a scene folder a .cam file has to be given for each image.
A .cam file is structured as follows:
    tx ty tz R00 R01 R02 R10 R11 R12 R20 R21 R22
    f d0 d1 paspect ppx ppy
First line: Extrinsics - translation vector and rotation matrix
Second line: Intrinsics - focal length, distortion coefficients, pixel aspect ratio and principal point
The focal length is the distance between camera center and image plane normalized by dividing with the larger image dimension.
For non zero distortion coefficients the image will be undistorted prior to the texturing process. If only d0 is non zero the Noah Snavely's distortion model is assumed otherwise the distortion model of VSFM is assumed.
The pixel aspect ratio is usually 1 or close to 1. If your SfM system doesn't output it, but outputs a different focal length in x and y direction, you have to encode this here.
The principal point has to be given in unit dimensions (e.g. 0.5 0.5).

BUNDLE_FILE:
Currently only NVM bundle files (from VisualSFM, http://ccwu.me/vsfm/) are supported.
Since the bundle file contains relative paths to the images please make sure you did not move them (relative to the bundle) or rename them after the bundling process.

MVE_SCENE::EMBEDDING:
This is the scene representation we use in our research group: http://www.gris.tu-darmstadt.de/projects/multiview-environment/.

IN_MESH:
The mesh that you want to texture and which needs to be in the same coordinate frame as the camera parameters. You can reconstruct one, e.g. with CMVS: http://www.di.ens.fr/cmvs/

OUT_PREFIX:
A path and name for the output files, e.g. <path>/<to>/my_textured_mesh
Don't append an obj extension. The application does that itself because it outputs multiple files (mesh, material file, texture files).

Available options:
  -D, --data_cost_file=ARG          Skip calculation of data costs and use the ones provided in the given file
  -L, --labeling_file=ARG           Skip view selection and use the labeling provided in the given file
  -d, --data_term=ARG               Data term: {area, gmi} [gmi]
  -s, --smoothness_term=ARG         Smoothness term: {potts} [potts]
  -o, --outlier_removal=ARG         Photometric outlier (pedestrians etc.) removal method: {none, gauss_damping, gauss_clamping} [none]
  -t, --tone_mapping=ARG            Tone mapping method: {none, gamma} [none]
  -v, --view_selection_model        Write out view selection model [false]
  --skip_geometric_visibility_test  Skip geometric visibility test based on ray intersection [false]
  --skip_global_seam_leveling       Skip global seam leveling [false]
  --skip_local_seam_leveling        Skip local seam leveling (Poisson editing) [false]
  --skip_hole_filling               Skip hole filling [false]
  --keep_unseen_faces               Keep unseen faces [false]
  --write_timings                   Write out timings for each algorithm step (OUT_PREFIX + _timings.csv)
  --no_intermediate_results         Do not write out intermediate results

Error: Too few non-option arguments

하나하나 분석해봅시다. 

 

  • Usage: texrecon [options] IN_SCENE IN_MESH OUT_PREFIX

 

option을 뒤로 미루고 나면 IN_SCENE 이라는 값을 넣어줘야 하는걸 알 수 있다.

 

IN_SCENE = 씬폴더 혹은 번들파일 혹은 MVE_SCENE::EMBEDDING 이라고 써있다.

 

씬폴더: scene folder 안에는 하나의 .cam 파일이 매 이미지마다 제공되어야 한다.

.cam 파일은 아래와 같이 구성되어있다.

  

    tx ty tz R00 R01 R02 R10 R11 R12 R20 R21 R22
    f d0 d1 paspect ppx ppy

 

첫줄은 Extrinsic들이다. translation vector와 회전 행렬값이다.

둘째줄은 Intrinsic들이다. focal length, distortion coefficients, pixel aspect ratio와 principal point가 포함된다.

 

focal length는 카메라의 중심과 더 큰 이미지 차원을 통해 나누어져서 노멀라이즈 된 이미지 평면 사이의 거리이다. 

 

0이 아닌 distortion coefficient들을 위해서 이미지는 undistiorted 시킨 후 텍스쳐링 프로세스에 제공된다.  만약 d0만 0이 아니면 Noah Snavely의 distortion model을 가정하여 작업하고, d0와 d1 모두 제공되는 경우 VSFM의 distortion model을 사용한다.

 

pixel aspect ratio는 대게 1이거나 1에 가깝다. 만약 네가 사용하는 SfM 시스템이 이값을 출력해주지 않고 대신 x와 y축에 대해 각각 다른 focal length를 제공해주면 여기에 이 값을 기입(? -> encode)할 수 있다. 

 

principal point는 단위 차원상에서 제공되어야 한다. ex) 0.5 0.5

 

번들파일:  현재는 NVM 번들파일만 지원된다. 이 파일은 VisualSFM 모듈을 통해서 생성된다. 

 

MVE_SCENE::EMBEDDING : http://www.gris.tu-darmstadt.de/projects/multiview-environment/. 에서 사용하는 포맷이다. 

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

MVE API 분석 1편. MakeScene  (0) 2022.06.17
kinfu with azure kinect  (0) 2022.06.14
OpenCV contrib와 함께 빌드하기  (0) 2022.06.10