Visual-SLAM developer roadmap [1] - 컴퓨터 비전 입문
원본 Github 링크: Visual-SLAM roadmap repository
컴퓨터 비전 입문
기초적인 프로그래밍, 수학, 영상처리 개념을 익히는 단계입니다.
프로그래밍과 수학 공부를 우선 하신 후, 그 다음 영상처리를 공부하시는 것을 추천합니다.
프로그래밍
Visual-SLAM을 하기 위해서는 C++ 언어를 익혀야합니다.
C++에서 간단한 pointer 사용과 class 설계 및 이해를 할 수 있으면 충분하다고 생각합니다.
C++이 처음이시라면 다음 링크를 참조하셔서 공부하시면 좋습니다.
- 홍정모의 따배씨
- Modern C++ for Computer Vision
- Cherno C++
- freecodecamp C++
수학
고등학교 수학에서 요구하는 것 보다 아주 살짝 더 필요합니다.
- 확률과 통계 기초
- 우선 가우시안 분포까지만 이해하셔도 됩니다. SLAM에서는 가우시안 형태의 센서 데이터를 많이 사용합니다.
- 로그와 지수
- 추후 Lie algebra를 이해하기 위해 필요합니다.
- 선형대수 기초
- 공간에 대한 계산을 하기 위해 전반적인 이해가 필요합니다.
- 깊게 알수록 더 좋습니다.
- 국문 강의는 이상엽의 선형대수 강의를 추천합니다.
- 영문 강의는 Gilbert Strang 선형대수 강의 를 추천합니다.
- 또는 여기에도 정리가 되어있습니다.
- 공간에 대한 계산을 하기 위해 전반적인 이해가 필요합니다.
- 미적분 기초
- 최적화 계산과 근사치 계산에서 필요합니다. 편미분, Jacobian 등은 지금 알면 좋습니다. Taylor expansion은 꼭 알고 가셔야합니다.
영상처리
이미지를 통해 정보를 추출하는 방법들을 공부합니다.
Projective geometry
아마 입문 단계에서 제일 어려운 부분일 겁니다.
- Image projection에 대해 이해해야합니다.
- 3D scene이 2D 이미지로 투영되는 과정에 대해 이해합니다.
- Stachniss 교수님의 렉처를 추천합니다.
- 이를 통해 Visual-SLAM에서 다루는 데이터에 대해 이해할 수 있습니다.
- 3D 공간에서의 강체 운동 (rigid body motion) 및 공간 변환 관계를 이해합니다.
- Homogeneous coordinates, homogeneous transformation (i.e. 4x4 매트릭스)에 대해 익숙해져야합니다.
- Stachniss 교수님의 렉처를 추천합니다.
- 이를 통해 카메라의 움직임, 물체의 움직임을 수식적으로 표현할 수 있게 됩니다.
카메라 이해하기
Visual-SLAM에서 사용되는 카메라의 특성에 대해 이해합니다.
- 렌즈의 특성에 대해 이해합니다.
- Mathworks 페이지에 설명이 잘 되어있습니다.
- 카메라 센서에 대해 이해합니다.
- 다양한 조명에서 기본적인 카메라 셋팅을 할 수 있어야합니다.
- 사진 튜토리얼 - 1,2,3편을 보시면 좋습니다.
- 다양한 카메라 셋팅 (stereo / RGB-D)등을 이해합니다.
- SLAM, KR 스터디 발표를 추천합니다.
- 두개의 2D 이미지로부터 3D 공간을 이해하는 epipolar geometry 방법을 이해합니다.
- Stachniss 교수님의 렉처를 추천합니다.
- 다양한 조명에서 기본적인 카메라 셋팅을 할 수 있어야합니다.
이미지 데이터 이해하기
- 이미지 데이터의 특성에 대해 이해합니다.
- SLAM에서 왜 grayscale 이미지를 사용하는지 이해합니다.
- Grayscale 이미지에서 유용한 정보를 뽑아내는 다양한 방법을 이해합니다.