인공지능 공부

MC-Calib 적용해보기. 준비단계

DualQuaternion 2023. 7. 20. 18:28

https://github.com/rameau-fr/MC-Calib

 

GitHub - rameau-fr/MC-Calib: A generic and robust calibration toolbox for multi-camera systems

A generic and robust calibration toolbox for multi-camera systems - GitHub - rameau-fr/MC-Calib: A generic and robust calibration toolbox for multi-camera systems

github.com

 

위 깃헙 프로젝트를 빌드하는건 바로 전시간에 완료했다.

 

이제 이걸 적용해보자.

 

깃허브에 있는걸 그대로 따라해볼거다.

 

I. Calibration 단계

 

1. Charuco board를 준비하자.

나는 그냥 보드 샘플을 가져다 썼다.

 

2. 출력하자

 

3. 출력한 보드의 크기를 측정하자.

 -> 이거 마커 하나의 크기를 측정하라는건지, 전체 보드를 측정하라는건지 살짝 애매하네?

 만약 보드들이 같은 길이의 정사각형꼴이면, 그 크기를 square_size 에 기입하고, square_size_per_board는 비워두자. 결과적으로 마커 하나의 길이를 기입하면 된다. 단위는 내가 원하는 걸로 하면 된다. 일단 나는 익숙한 cm 단위로 해봐야겠다.

 

4. 이미지를 획득하자.

 MC-Calib는 멀티카메라를 위해 디자인이 되었기 때문에, 사용자는 모든 카메라 리그가 같은 시간에 이미지를 촬영하도록 세팅해야 한다. 추가로 이 툴은 global shutter camera 상에서 디자인되고 테스트 되었기 때문에, 사용자가 rolling shutter sensor를 쓴다면 정확도가 낮을 수 있다. 고퀄리티의 칼리브레이션을 위해 모션 블러를 최대한 낮추어주자.

 global shutter camera와 rolling shutter camera의 차이는 따로 알아보도록 해야겠다.

 

5. 비디오 시퀀스를 준비하자

 각각의 카메라에서 촬영된 이미지들은 Cam_001, Cam002와 같은 세자리 인덱스로 구분된 폴더에 넣어야 한다.

 

6. 설정 파일을 셋업하자

 -카메라의 수와 타잎을 세팅한다.

   카메라의 수는 number_camera 필드에 넣으면 된다. 만약 모든 카메라가 perspective이면 distortion_model을 0으로 하고, 피쉬 모델인 경우에는 1로 한다. 만약 카메라 타입이 섞여 있으면 벡터 형태로 기입하면 된다.

 

 - 이미지 패스 설정

   root_path를 알려주면 된다.

 

 - output 세팅

   기본적으로 MC-Calib는 리프로젝션 에러로그, 3차원 객체 구조, 객체의 자세를 매 프레임 당 기록한 카메라 칼리브레이션 결과를 생성한다. 추가로 detection and reprojection image를 저장하도록 설정할 수 있다.

 

 - 하나의 특정보드를 사용할 것인지 세팅

  만약 여러 칼리브레이션 객체를 준비했지만 일부 시퀀스에서만 확인이 되는 경우, 보드 인덱스의 리스트를 기입할 수 있다. 그러면 모든 보드를 탐지하는대신 기록된 것만 확인해서 속도를 높일 수 있다.

 

 - 고급 셋업

  일반적인 경우 min_perc_pts를 0.4로 세팅하는 것을 권고하지만, 하나의 보드에 대한 제한적 fov가 확보된 경우에 대해서는 이 값을 낮춰야 한다. 우리의 자동 colinear 포인트 체크 모듈은 대부분의 degenerated configuration을 피해야 한다. 제공된 기본 configuration 파일은 몇가지 파라미터만 수정되면 된다. 문제가 있으면 그 값을 수정해라.

 

7. 칼리브레이션 실행

./apps/calibrate/calibrate ../configs/calib_param.yml

 

 

 어라 그런데 이거 적용하려면 어떤 데이터를 내가 마련을 해야 하는거지?

 

보드를 움직이는 동안 비디오를 쭉 찍어서 그걸 가지고 만들면 되는건가?

 

아니면 보드를 한 위치에 고정시키고 동시에 카메라 촬영을 해서 이미지를 하나씩만 가지면 되는건가?

 

이 내용들을 알려면 논문을 한번은 읽어봐야겠다.

 

논문 읽고 다시올게요.