이 게시글은 장형기님의 SLAM 기술면접 질문 100선에 대한 제 나름의 답을 정리한 것입니다.
Homography는 두 평면 사이의 Projection 변환 관계를 나타내는 용어입니다.
다시 말해, 한 평면을 다른 평면에 projection했을 때, 두 평면 상의 대응점들 사이에 성립하는 변환 관계를 의미합니다.
이렇게 두 사진 Projection 된 좌표 값 사이의 변환관계를 나타낼 수 있는 matrix H를 homography matrix라고 합니다.
❓ 그럼 어디에 쓰나요?
Homography matrix의 장점은 특정 조건에서 변환 관계를 3D에서 찾을 필요가 없다는 점입니다.
일반적으로 두 이미지의 대응 관계를 구하려면 Epipolar geometry를 사용합니다.
Epipolar geometry는 3D를 활용하는 것이기 때문에 계산 과정이 길고 복잡합니다.
하지만, 장면이 하나의 평면이거나 순수 회전이라면 이 3D 복원 과정을 거칠 필요 없이 바로 2D 2D 매핑이 가능합니다.
즉, 대응점 몇 개만으로 두 이미지의 변환 행렬 를 추정하고, 이를 사용해 전체 점 변환이 가능합니다.
❓ 왜 가능한가요?
Homography matrix는 강력한 Constraint를 통해서 계산하게 됩니다.
하나의 3D 평면을 보는경우
translation없이 순수 회전을 한다
둘 중의 한 constraint는 만족해야 사용할 수 있습니다.
한 벽면을 보고 있으면 우리가 보는 물체가 하나의 평면 위에 붙어 있다는 것을 알기 때문에 우리가 움직이더라도 저 물체 point 사이의 관계를 알고 있어서 계산하기가 편해집니다.
같은 이유로 내가 순수하게 회전만 한다면 모든 점들이 동일한 projection 변환을 가지기 때문에 우리는 이 constraint를 활용하여 homography matrix를 만들 수 있습니다.
❓ 어떻게 하나요?
일반적인 카메라 투영식
카메라는 3D점 (X,Y,Z)를 내부 파라미터 K와 외부 파라미터 를 이용해 2D 이미지 좌표 로 변환합니다.
(s는 스케일 인자입니다.)
두 시점의 카메라 포즈
같은 3D 점을 두 카메라가 본다면 이렇게 나타낼 수 있습니다.
첫 번째 카메라:
두 번째 카메라:
첫번째 카메라에서의 3D 점 표현
첫번째 카메라의 이미지 좌표 을 reprojection하여 3D 점을 만들면 이렇게 됩니다.
두번째 카메라 투영식에 대입
이렇게 구한 3D 점을 두번째 카메라에 투영하면 아래 식처럼 나옵니다.
이렇게 구한 식에는 Z값이 들어있기 때문에 각기 다른 Z값을 가지고 있다면 다른 변환 관계를 갖게 됩니다.
평면 제약 적용
만약 모든 점이 하나의 평면 위에 있다면, 깊이 를 평면 방정식으로 표현할 수 있습니다.
평면 방정식:
대입 후:
Homgraphy 유도
Z를 두번째 카메라 좌표 투영식에 대입을 한 후 분자만 정리하게 되면 (어차피 분모는 scale factor로 처리)
이런 식이 나오게 됩니다. 그러면 에 어떤 행렬을 곱하여 를 구하게 되고 이것을 Homography matrix라고 합니다.
최종 형태
❓ 순수 회전은요??
순수 회전은 이제 4번 식의 T가 사라집니다.
그렇다면 Z는 그냥 scale factor처럼 사용되게 되어 무시하고 계산하면 됩니다!
이러한 형태로 나오게 됩니다.