Projective geometry
- euclidean
- similarity
- affine
- projective
- 사영을 진행하면: 3d -> 2d --> N+1차원 -> N차원
Homogeneous coordinates
Euclidean & Homogeneous coordinate
- 2차원 공간을 의미하는, euclidean space (x,y)는,
{x,y,scale} 정보를 가지는 3차원 공간에서 scale이 1인 떠있는 평면을 의미
- euclidean space ⊂ projective space
Projective & Homogeneous coordinate
- euclidean space (x,y)에 대해 한 차원 높은(N+1) 2차원을 가지면서 한 점에 대한 scale에 따른 직선을 표시
- 한 라인에 포함되는 모든 점(wx, wy, w)은 (x,y,1)과 동일함
Epipolar geometry
- epipolar geometry
- epipolar line: 2D 이미지에 투영된 각각 다른 점을 가지고 3D 위치를 찾으려 할 때 2D 이미지 기준으로 물체에 대한 가상의 선(ray), ray reprojection
- stereo camera인 경우, epipolar line이 평행하다..?
- epipole: epipolar line이 모두 만나는 점: 반대편 카메라의 optical center(지난 카메라의 위치)
- epipolar plane: 두 카메라의 optical center 각각과 물체의 3D 위치 간에 세 점을 이었을 때 나타나는 삼각형의 평면
- baseline: 두 카메라의 optical center를 연결한 선, baseline의 크기가 클수록 삼각측량의 정확도가 높아짐
Epipolar Geometry constraint
1) 3D point x는 epipolar plane 위에 있어야 한다
2) 모든 baseline, epipolar line들은 epipole과 교차해야 한다
3) 모든 epipolar plane은 baseline을 포함하고 있어야 한다
Essential matrix
- translation x Rotation matrix = [t×]R, SVD를 통해 구함
- minimal solver: 5-point algorithm
- opencv:
recoverPose()
Fundamental matrix
-
Essential matrix에 intrinsic matrix를 곱해서 3D좌표를 픽셀 좌표로 변환한 것
-
minimal solver: 7-point algorithm, 보통 8-point algorithm
-
opencv: findFundamentalMat()
-
구하는 목적: 두개의 이미지 간의 상대적인 이동치를 구함, 위치추정, 두 이미지 프레임 중 첫번째 프레임의 3D에서 투영된 한 점을 다른 이미지 프레임으로 투영시킬 때 xFx 값을 넣어서 이 xFx가 epilolar line과 내적 시 0이 되면(평행한 점과 직선간의 관계) 이 xFx가 두번째 이미지 프레임에서 위치하는 값이 됨
-
coplanarity constraint
Triangulation
-
랜드마크의 위치를 복원해주는 과정, 두 개 이미지 간의 상대적인 회전값, feature들 간의 correspondence를 알고있을 때, feature들이 의미하는 3D point (x,y,z) 좌표를 복원하는 과정, 2D 이미지로부터 3D 공간 매핑
-
컨셉: 두 카메라에서 각각 ray를 쏘면, 교점이 있어야 하는데 실제로는 3차원에서 높낮이가 달라 교점이 안생김, 대신에 두 ray가 가장 가까운 지점, 즉 위아래 차이가 가장 작은 수직인 직선이 생기는 지점의 중간값을 구해야 하는데, 그 지점을 구하기 위해 식을 세움
-
직선의 방정식 2개:
첫번째 카메라 ray: f=p+λr, 여기서 p,r(시작점, 방향벡터)은 아는 값, λ 가 얼만큼 갔는지 궁금한 값
두번째 카메라 ray: g=q+μs, 여기서 q,s(시작점, 방향벡터)은 아는 값, μ 가 얼만큼 갔는지 궁금한 값
식: (f−g)∗r=0, (f−g)∗s=0
Stereo normal case
- 스테레오 카메라의 경우 카메라가 평행하고, baseline도 알고있으며 상이 맺힌 두 점의 차이(disparity, parallax)도 알고 있음
- 스테레오 카메라에서 물체까지 V자 형태로 관계가 되어있는데, V자 중 왼쪽 직선을 오른쪽으로 옮겨서 삼각형을 만들어 주면, 닮음비를 활용해 물체까지의 거리를 구할 수 있음
- 카메라 초점거리: 물체까지의 거리 = 상이 맺힌 두 점의 차이(disparity) : baseline
- x는 Z를 구함으로써 도출 가능
- y를 구할때는 ray 위치가 안맞아서 반땡한다고 하는데.. 왜 y,z가 서로 헷갈리지? 둘이 바뀌어야 되는 것 같은데.. 나중에 알아보기