Search
Duplicate

Computer Vision/ 3. Epipolar Geometry

1 Introduction

이전에 우리는 일반적인 카메라 calibration 절차 또는 single view metrology를 사용하여 하나 이상의 view에서 카메라의 intrinsic과 extrinsic 파라미터를 계산하는 방법을 보았다. 이 과정을 통해 하나의 이미지에서 3d 세계에 관한 속성을 유도할 수 있었다. 그러나 일반적으로 단일 이미지만으로 3d 세계의 전체 구조를 복구하는 것은 불가능하다. 이것을 3d를 2d로 매핑하는 것의 내재적 모호함 때문이다. 일부 정보는 단순히 손실된다.
예컨대 그림 1에서 처음에 그 사람이 Pisa의 Learning Tower를 들고 있는 것으로 오해할 수 있다. 하지만 주의 깊게 관찰하면 이것이 사실이 아니라 단지 서로다른 depth를 이미지 평면에 투영하여 생긴 착시일 뿐임을 알 수 있다. 그러나 이 장면을 완전히 다른 각도에서 볼 수 있다면 이 착시는 즉각 사라지고 즉시 올바른 장면 레이아웃을 계산할 수 있다.
이 강의 노드의 초점은 여러 카메라가 존재할 때 geometry의 지식이 매우 도움이 될 수 있음을 보이는 것이다. 구체적으로 우리는 먼저 2가지 viewpoint에 관여하는 geometry를 정의한 다음, 이 geometry가 우리를 둘러싼 세계를 더 잘 이해하는데 어떻게 도움이 될 수 있는지를 설명한다.

2 Epipolar Geometry

여러 view geometry에서 종종 여러 카메라, 3d 점과 각 카메라의 이미지 평면에서 그 점의 투영 사이에 흥미로운 관계가 존재한다. 카메라, 3d 점과 해당하는 관측치를 연결하는 geometry를 stereo 쌍의 epipolar geometry라고 부른다.
그림 2에 나온대로 표준 epipolar geometry 설정은 동일한 3d 점 PP를 관찰하는 2대의 카메라가 포함된다. 각 이미지 평면에서의 PP의 투영은 각각 pppp'에 위치한다. 카메라 중심은 O1O_1O2O_2에 있으며 이들 사이의 직선을 baseline이라 부른다. 두 카메라 중심과 PP에 의해 정의된 평면을 epipolar plane이라 부른다. baseline이 두 이미지 평면과 교차하는 지점을 epipole eeee'라 부른다. 마지막으로 epipolar 평면과 두 이미지 평면의 교차로 정의되는 선을 epipolar line이라 부른다. epipolar line은 이미지 평면에서 각각의 epipole에서 baseline을 교차하는 속성을 갖는다.
epipolar geometry의 흥미로운 경우는 그림 4에 보여진다. 이것은 이미지 평면이 서로 평행할 때 발생한다. 이미지 평면이 서로 평행하면 중심 O1,O2O_1, O_2를 결합하는 baseline이 이미지 평면과 평행하기 때문에 epipole eeee'는 무한대에 위치한다. 이 경우의 또 다른 중요한 byproduct(부산물)은 epipolar line이 각 이미지 평면의 축과 평행하다는 것이다. 이 경우는 특히 유용하며 이미지 rectification에 대한 후속 섹션에서 더 상세히 커버된다.
그러나 현실 상황에서 3d 위치 PP의 정확한 위치는 주어지지 않고, 한 이미지 평면에서 그것의 투영만 pp로 결정할 수 있다. 또한 카메라 location, orientation, camera matrix를 알 수 있다. 이 지식을 사용하여 무엇을 할 수 있는가? 카메라 위치 O1,O2O_1, O_2와 이미지 점 pp를 알면 epipolar plane을 정의할 수 있다. 그러면 이 epipolar plane을 사용하여 epipolar line을 결정할 수 있다. 정의에 따라 PP의 두 번째 이미지에 대한 투영 pp'은 반드시 두 번째 이미지의 epipolar line 상에 위치해야 한다. 따라서 epipolar geometry의 기본 이해를 통해 장면의 3d 구조를 모르더라도 이미지 쌍 사이의 강력한 제약조건을 만들 수 있다.
이제 점과 epipolar line을 view에 걸쳐 seamless 매핑하는 방법을 개발해 보겠다. 원래의 epipolar geometry framework(그림 5)에서 주어진 설명을 취하면, 추가로 MMMM'을 각각 3d 점을 해당 2d 이미지 평면 위치로 매핑하는 카메라 projection matrix로 정의할 수 있다.
world reference system이 첫 번째 카메라와 연관되어 있고, 두 번째 카메라는 먼저 rotation RR 한 다음 translation TT만큼 offset되어 있다고 가정하자. 이것은 카메라 projection 행렬을 다음과 같이 지정한다.
M=K[I0]M=K[RRT](1)\begin{aligned} M &= K\begin{bmatrix} I & 0 \end{bmatrix} \\ M' &= K'\begin{bmatrix} R^\top & -R^\top T \end{bmatrix} \end{aligned} \tag{1}

3 The Essential Matrix

가장 단순한 경우에서 K=K=IK = K' = I인 canonical camera를 갖는다고 가정한다. 이것은 방정식 1을 다음으로 축소한다.
M=K[I0]M=[RRT](2)\begin{aligned} M &= K\begin{bmatrix} I & 0 \end{bmatrix} \\ M' &= \begin{bmatrix} R^\top & -R^\top T \end{bmatrix} \end{aligned} \tag{2}
추가로 이것은 첫 번째 카메라의 reference system에서 pp'의 위치가 Rp+TRp' + T라는 것을 의미한다. 벡터 Rp+TRp' + TTT가 epipolar plane에 놓이기 때문에 T×(Rp+T)=T×(Rp)T \times (Rp' + T) = T \times (Rp')의 cross product를 취하면, epipolar plane에 normal인 vector를 얻을 수 있다. 이것은 또한 epipolar plane에 놓인 ppT×(Rp)T \times (Rp')에 대해 normal임을 의미하므로 그들의 dot product가 0이라는 제약조건을 얻는다.
p[T×(Rp)]=0(3)p^\top \cdot [T \times (Rp')] = 0 \tag{3}
선형대수에서 cross product에 대한 다양하고 간결한 표현을 유도할 수 있다. 우리는 임의의 두 벡터 a\bold{a}b\bold{b} 사이의 cross product를 행렬-벡터 곱으로 표현할 수 있다.
a×b=[0azayaz0axayax0][bxbybz]=[a×]b(4)\bold{a} \times \bold{b} = \begin{bmatrix}0 & -\bold{a}_z & \bold{a}_y \\ \bold{a}_z & 0 & -\bold{a}_x \\ -\bold{a}_y & \bold{a}_x & 0 \end{bmatrix} \begin{bmatrix} \bold{b}_x \\ \bold{b}_y \\ \bold{b}_z \end{bmatrix} = [\bold{a}_\times]\bold{b} \tag{4}
이 표현식을 방정식 3과 결합하여 cross product 항을 행렬 곱으로 변환할 수 있다.
p[T×](Rp)=0p[T×]Rp=0(5)\begin{aligned}p^\top \cdot[T_\times](Rp') &= 0 \\ p^\top[T_\times]Rp' &= 0\end{aligned} \tag{5}
행렬 E=[T×]RE = [T_\times] R은 Essential Matrix라고 하며, epipolar 제약조건에 대한 간결한 표현식을 생성한다.
pEp=0(6)p^\top Ep' = 0 \tag{6}
Essential 행렬은 5개 자유도를 갖는 3×33 \times 3 행렬이다. 이것은 rank 2이고 singular이다.
Essential 행렬은 pppp'와 연관된 epipolar line을 계산하는데 유용하다. 예컨대 =Ep\ell' = E^\top p는 카메라 2의 이미지 평면에서 epipolar line을 제공한다. 유사하게 =Ep\ell = Ep'는 카메라 1의 이미지 평면에서 epipolar line을 제공한다.
Essential matrix의 다른 흥미로운 속성은 epipole과 dot product하면 0이 된다는 것이다. Ee=Ee=0E^\top e = Ee' = 0. 카메라 1의 이미지에서 임의의 점 xx(ee 제외)에 대해, 카메라 2의 이미지에서 해당하는 epipolar line =Ex\ell' = E^\top x가 epipole ee'를 포함한다. 따라서 ee'는 모든 xx에 대해 e(Ex)=(eE)x=0e'^\top(E^\top x) = (e'^\top E^\top)x = 0를 만족하므로 Ee=0Ee' = 0이다. 유사하게 Ee=0E^\top e = 0이다.

4 The Fundamental Matrix

canonical 카메라를 가졌을 때 pppp' 사이의 관계를 유도했지만, 카메라가 canonical이 아닐 때 더 일반적인 표현식을 찾을 수 있어야 한다. projection matrix가 다음과 같이 주어짐을 떠올려라.
M=K[I0]M=K[RRT](7)\begin{aligned} M &= K\begin{bmatrix} I & 0 \end{bmatrix} \\ M' &= K'\begin{bmatrix} R^\top & -R^\top T \end{bmatrix} \end{aligned} \tag{7}
우선 카메라가 canonical일 때 카메라 이미지에 대한 PP의 투영이도록 pc=K1pp_c = K^{-1}ppc=K1pp_c' = K'^{-1}p'를 정의한다. canonical 경우에서는 다음을 떠올려라
pc[T×]Rpc=0(8)p_c^\top[T_\times]Rp_c' = 0 \tag{8}
pcp_cpcp_c'의 값을 교체하여 다음을 얻는다.
pK[T×]RK1p=0(9)p^\top K^{-\top}[T_\times]RK'^{-1}p' = 0 \tag{9}
행렬 F=KT[T×]RK1F = K'^{-T}[T_\times]RK^{-1}은 Fundamental Matrix라고 한다. 이것은 이전 섹션의 Essential Matrix와 유사하게 작동하지만 카메라 행렬 K,KK, K'와 카메라 사이의 상대적 translation TT와 rotation RR에 관한 정보도 인코딩한다. 따라서 카메라 행렬 K,KK, K'와 변환 R,TR, T가 알려지지 않은 경우에도 pppp'와 관련된 epipolar line을 계산하는데 유용하다. Essential matrix와 유사하게 Fundamental matrix와 해당하는 점만으로 epipolar line =Fp\ell' = F^\top p=Fp\ell = Fp'를 계산할 수 있다. Fundamental matrix와 Essential matrix 사이의 주요한 차이 중 하나는 Fundamental matrix가 7개 자유도를 포함하는데 반해 Essential matrix는 5개의 자유도를 포함한다는 것이다.
그러나 Fundamental matrix가 어떻게 유용한가? Essential matrix와 유사하게 Fundamental matrix를 알면 이미지에서 점만 알아도 다른 이미지에서 해당하는 점에 대한 쉬운 제약조건(epipolar line)을 얻을 수 있다. 따라서 3d 공간에서 PP의 실제 위치나 카메라의 extrinsic 또는 intrinsic 특성을 모르더라도 임의의 pppp' 사이의 관계를 설정할 수 있다.

4.1 The Eight-Point Algorithm

그렇지만 Fundamental matrix이 카메라 파라미터의 행렬 곱에 의해 정의된다는 가정은 다소 무리가 있어 보인다. 하지만 동일한 장면의 두 이미지가 주어지고 카메라의 extrinsic 또는 intrinsic 파라미터를 모르더라도 Fundamental matrix를 추정하는 것이 가능하다. 이를 위해 논의하는 방법을 Eight-Point Algorithm이라 부른다. 이것은 1981년 Longuet-Higgins에 의해 제안되었고 1995년 Hartley에 의해 확장되었다. 제목에서 알 수 있듯이 Eight-Point Algorithm은 두 이미지 사이에 최소 8쌍의 대응점 집합이 가능하다고 가정한다.
각 대응점 pi=(ui,vi,1)p_i = (u_i, v_i, 1)pi=(ui,vi,1)p_i' = (u_i', v_i', 1)은 epipolar 제약 piFpi=0p_i^\top F p_i' = 0을 제공한다. 이 제약조건을 다음처럼 재형식화할 수 있다.
[uiuiviuiuiuiviviviviuivi1][F11F12F13F21F22F23F31F32F33]=0(10)\begin{bmatrix} u_iu_i' & v_i'u_i & u_i & u_i'v_i & v_iv_i' & v_i & u_i' & v_i' & 1 \end{bmatrix} \begin{bmatrix} F_{11} \\ F_{12} \\ F_{13} \\ F_{21} \\ F_{22} \\ F_{23} \\ F_{31} \\ F_{32}\\F_{33} \end{bmatrix} = 0 \tag{10}
이 제약이 스칼라 방정식이기 때문에 1개의 자유도만 제약한다. Fundamental matrix은 scale까지만 알 수 있기 때문에 Fundamental matrix를 결정하기 위해 이러한 제약조건 8개가 필요하다.
[u1u1v1u1u1u1v1v1v1v1u1v11u2u2v2u2u2u2v2v2v2v2u2v21u3u3v3u3u3u3v3v3v3v3u3v31u4u4v4u4u4u4v4v4v4v4u4v41u5u5v5u5u5u5v5v5v5v5u5v51u6u6v6u6u6u6v6v6v6v6u6v61u7u7v7u7u7u7v7v7v7v7u7v71u8u8v8u8u8u8v8v8v8v8u8v81][F11F12F13F21F22F23F31F32F33]=0(10)\begin{bmatrix} u_1u_1' & v_1'u_1 & u_1' & u_1'v_1 & v_1v_1' & v_1 & u_1' & v_1' & 1 \\ u_2u_2' & v_2'u_2 & u_2' & u_2'v_2 & v_2v_2' & v_2 & u_2' & v_2' & 1 \\ u_3u_3' & v_3'u_3 & u_3' & u_3'v_3 & v_3v_3' & v_3 & u_3' & v_3' & 1\\u_4u_4' & v_4'u_4 & u_4' & u_4'v_4 & v_4v_4' & v_4 & u_4' & v_4' & 1\\u_5u_5' & v_5'u_5 & u_5' & u_5'v_5 & v_5v_5' & v_5 & u_5' & v_5' & 1\\u_6u_6' & v_6'u_6 & u_6' & u_6'v_6 & v_6v_6' & v_6 & u_6' & v_6' & 1\\u_7u_7' & v_7'u_7 & u_7' & u_7'v_7 & v_7v_7' & v_7 & u_7' & v_7' & 1\\u_8u_8' & v_8'u_8 & u_8' & u_8'v_8 & v_8v_8' & v_8 & u_8' & v_8' & 1 \end{bmatrix} \begin{bmatrix} F_{11} \\ F_{12} \\ F_{13} \\ F_{21} \\ F_{22} \\ F_{23} \\ F_{31} \\ F_{32}\\F_{33} \end{bmatrix} = 0 \tag{10}
이것을 다음처럼 간략히 작성할 수 있다.
Wf=0(12)W\bold{f} = 0 \tag{12}
여기서 WWN8N \ge 8개 대응점에서 유도된 N×9N \times 9 행렬이고 f\bold{f}는 우리가 원하는 Fundamental 행렬의 값이다.
실제로는 noisy 측정의 효과를 줄이기 위해 8개 이상의 대응점과 더 큰 WW 행렬을 사용하는 것이 좋다. 이 homogeneous 방정식 시스템의 해는 WW를 rank-deficient(부족한)이므로 Singular Value Decomposition(SVD)를 통해 least-squares의 의미에서 찾을 수 있다. SVD를 통해 Fundamental 행렬 추정치 F^\hat{F}를 얻게 되는데 이것은 full rank일 수 있다. 그러나 실제 Fundamental 행렬이 rank 2라는 사실을 알고 있다. 따라서 best rank-2 근사치를 찾아야 한다. 이를 위해 다음의 최적화 문제를 해결해야 한다.
minFFF^Fsubject to detF=0(13)\begin{aligned} \min_F \|F -\hat{F}\|_F \\ \text{subject to } \det F = 0 \end{aligned} \tag{13}
이 문제는 다시 SVD로 해결된다. 여기서 F^=UΣV\hat{F} = U\Sigma V^\top. 그러면 best rank-2 근사는 다음과 같이 찾을 수 있다.
F=U[Σ1000Σ20000]V(14)F = U \begin{bmatrix} \Sigma_1 & 0 & 0 \\ 0 & \Sigma_2 & 0 \\ 0 & 0 & 0 \end{bmatrix} V^\top \tag{14}

4.2 The Normalized Eight-Point Algorithm

실제로 Eight-Point Algorithm에 대한 표준 least-squares 접근은 정확하지 않다. 종종 점 pip_i와 그것에 해당하는 epipolar line i=Fp\ell_i = Fp' 사이의 거리는 매우 큰데, 일반적으로 10 픽셀 이상이다. 이 에러를 줄이기 위해 Eight-Point Algorithm의 수정된 버전인 Normalized Eight-Point Algorithm을 고려할 수 있다.
표준 Eight-Point Algorithm stem의 주요 문제는 WW가 SVD에 대해 ill-conditioned 라는 사실에 있다. SVD가 제대로 작동하려면 WW의 singular value 중 하나는 0 (또는 가까운)이어야 하고 다른 singular 값은 nonzero이어야 한다.
그러나 대응점 pi=(ui,vi,1)p_i = (u_i, v_i, 1)은 현대 카메라의 픽셀 범위 때문에(예: pi=(1832,1023,1)p_i = (1832, 1023, 1)) 첫 번째와 두 번째 좌표에서 종종 매우 큰 값을 가진다. WW를 구성하기 위해 사용된 이미지 점들이 이미지의 상대적으로 작은 영역에 존재하면, 일반적으로 pip_ipip_i'에 대한 벡터가 매우 유사할 것이다. 결과적으로 구성된 WW 행렬은 하나의 매우 큰 singular 값과 나머지는 상대적으로 작은 값을 갖게 된다.
이 문제를 해결하기 위해 WW를 구성하기 전에 이미지의 점들을 normalize 해야 한다. 이것은 이미지 좌표에 translation과 scaling을 모두 적용하여 WW를 pre-condition(전처리) 하는 것을 의미한다.
이렇게 하면 두 가지 요구사항이 충족된다. 첫째, 새로운 좌표 시스템의 원점은 이미지 점들의 centroid에 위치 해야한다(translation). 둘째, 변환된 이미지 점들의 원점에서의 평균 제곱 거리는 2 pixel 이어야 한다(scaling). 이 절차를 centroid로 translate하고 scaling factor로 scale하는 행렬 T,TT, T'를 간결하게 표현할 수 있다.
(2Ni=1Nxixˉ2)1/2\left({2N \over \sum_{i=1}^N \|x_i - \bar{x}\|^2} \right)^{1/2}
각 이미지 마다.
그 다음 좌표를 normalize 한다.
qi=Tpiqi=Tpi(15)\begin{aligned} q_i &= Tp_i \\ q_i' &= T'p_i' \end{aligned} \tag{15}
새로운 normalized 좌표를 사용하여 regular least-squares Eight Point Algorithm을 사용하여 새로운 FqF_q를 계산할 수 있다. 그러나 행렬 FqF_q는 normalized 좌표에 대한 fundamental matrix이다. regular 좌표 공간에서 사용할 수 있도록 de-normalize 해야 한다.
F=TFqT(16)F = T'^\top F_qT \tag{16}
궁극적으로 이 새로운 Fundamental matrix FF는 현실 세계 응용에서 좋은 결과를 제공한다.

5 Image Rectification

두 이미지가 서로 평행할 때 epipolar geometry에 흥미로운 경우가 나타난다는 사실을 떠올려라. 우선 평행 이미지 평면의 경우에서 Essential matrix EE를 계산한다. 두 카메라가 동일한 KK를 갖고 카메라 사이에 상대적 회전이 없다(R=IR = I)고 가정할 수 있다. 이 경우에 xx 축을 따라 translation만 존재한다고 가정하면 T=(Tx,0,0)T = (T_x, 0, 0)이 된다. 그러면 다음과 같이 된다.
E=[T×]R=[00000Tx0Tx0](17)E = [T_\times]R = \begin{bmatrix} 0 & 0 & 0 \\ 0 & 0 & -T_x \\ 0 & T_x & 0 \end{bmatrix} \tag{17}
EE가 알려지면, 이미지 평면의 점과 연관된 epipolar line의 방향을 찾을 수 있다. 점 pp'와 연관된 epipolar line \ell의 방향을 계산한다.
=Ep=[00000Tx0Tx0][uv1]=[0TxTxv](18)\ell = Ep' = \begin{bmatrix} 0 & 0 & 0 \\ 0 & 0 & -T_x \\ 0 & T_x & 0 \end{bmatrix} \begin{bmatrix} u' \\ v' \\ 1 \end{bmatrix} = \begin{bmatrix} 0 \\ -T_x \\ T_x v' \end{bmatrix} \tag{18}
유사한 방법으로 계산될 수 있는 \ell'의 방향과 유사하게 \ell의 방향이 horizontal 임을 알 수 있다.
epipolar 제약 조건 pEp=0p^\top Ep' = 0을 사용하면 v=vv=v'가 되어 pppp'가 동일한 vv-좌표를 공유한다는 사실을 알 수 있다. 결과적으로 대응점 사이에 매우 간단한 관계가 존재한다. 그러므로 주어진 두 이미지를 평행으로 만드는 과정인 rectification은 이미지에서 대응점 사이의 관계를 discerning(식별력 있는) 때 유용하다.
이미지의 쌍을 Rectifying 하는데 두 카메라 행렬 K,KK, K'이나 그들 사이의 상대적 변환 R,TR, T에 대한 지식이 필요하지 않다. 대신 Normalized Eight Point Algorithm에 의해 추정된 Fundamental matrix를 사용할 수 있다. Fundamental matrix를 얻으면 각 대응점 pip_ipip_i'에 대한 epipolar line i\ell_ii\ell_i'를 계산할 수 있다.
그러면 epipolar line의 집합에서 각 이미지의 epipole eeee'를 추정할 수 있다. 이것은 epipole이 모든 epipolar line의 교차에 놓인다는 것을 알기 때문이다. 실제로는 noisy 측정 때문에 모든 epipolar line이 단일 점에서 교차하지 않는다. 따라서 epipole 계산은 모든 epipolar line에 점을 맞추는 least squared error를 최소화하여 찾을 수 있다. 각 epipolar line은 벡터 \ell로 표현될 수 있으며, 직선 위의 모든 점(homogeneous 좌표로 표현됨)이 집합 {xx=0}\{x|\ell^\top x = 0\}에 존재한다. 각 epipolar line을 i=[i,1i,2i,3]\ell_i = [\ell_{i,1} \quad \ell_{i,2} \quad \ell_{i,3}]^\top로 정의하면 선형 시스템의 방정식을 세우고 SVD를 사용하여 epipole ee를 찾을 수 있다.
[1n]e=0(19)\begin{bmatrix} \ell_1^\top \\ \vdots \\ \ell_n^\top \end{bmatrix} e = 0 \tag{19}
epipole eeee'를 찾은 후에 아마도 그것들이 horizontal axis를 따라 무한대에 있는 점이 아니라는 것을 알게 될 것이다. 만약 그랬다면 정의에 의해 이미지가 이미 평행이어야 한다. 따라서 이미지를 평행하게 만드는 방법에 대한 통찰을 얻을 수 있다. 즉, epipole ee를 horizontal axis를 따라 무한대로 매핑하는 homography를 찾을 수 있는가?
구체적으로 이것은 epipole을 무한대로 매핑하기 위해 이미지에 적용할 수 있는 homographies의 쌍 H1,H2H_1, H_2를 찾고 싶다는 뜻이다. 먼저 두 번째 epipole ee'를 horizontal 축 상의 무한대 (f,0,0)(f, 0, 0) 점으로 매핑하는 homography H2H_2를 찾는 것에서 시작하자. 이러한 homography에 가능한 선택이 많기 때문에 합리적인 것을 선택 해야 한다. 실제로 좋은 결과를 이끄는 한 가지 조건은 homography가 이미지의 중심에 가까운 점에 대해 translation과 rotation을 적용하는 변환처럼 작용하도록 하는 것이다.
이런 변환을 달성하는 첫 번째 단계는 두 번째 이미지를 homogeneous 좌표에서 중심이 (0,0,1)(0, 0, 1)이 되도록 translate 하는 것이다. 이를 위해 다음과 같은 translation matrix를 적용할 수 있다.
T=[10width201height2001](20)T = \begin{bmatrix} 1 & 0 & -{\text{width} \over 2} \\ 0 & 1 & -{\text{height} \over 2} \\ 0 & 0 & 1 \end{bmatrix} \tag{20}
translation을 적용한 후에 epipole을 horizontal axis 상에 어떤 점 (f,0,1)(f, 0, 1)에서 배치하도록 rotation을 적용한다. 평행이동 된 epipole TeTe'가 homogeneous 좌표 (e1,e2,1)(e_1', e_2', 1)에 위치한다면 적용되는 rotation은 다음과 같다.
R=[αe1e12+e22αe2e12+e220αe2e12+e22αe1e12+e220001](21)R = \begin{bmatrix} \alpha{e_1' \over \sqrt{e_1'^2 + e_2'^2}} & \alpha{e_2' \over \sqrt{e_1'^2 + e_2'^2}} & 0 \\ -\alpha{e_2' \over \sqrt{e_1'^2 + e_2'^2}} & \alpha{e_1' \over \sqrt{e_1'^2 + e_2'^2}} & 0 \\ 0 & 0 & 1 \end{bmatrix} \tag{21}
여기서 e10e_1' \ge 0이면 α=1\alpha = 1이고 그렇지 않으면 α=1\alpha = -1이다. 이 rotation을 적용한 후에 (f,0,1)(f, 0, 1)의 임의의 점을 horizontal axis 상의 무한대 점 (f,0,0)(f, 0, 0)으로 가져오려면 다음과 같은 변환만 적용하면 된다.
G=[1000101f01](22)G = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ -{1\over f} & 0 & 1 \end{bmatrix} \tag{22}
이 변환을 적용한 후에 마침내 무한대에 있는 epipole을 갖게 되므로 regular 이미지 공간으로 다시 translate 할 수 있다. 따라서 두 번째 이미지를 rectify하기 위해 적용하는 homography H2H_2는 다음과 같다.
H2=T1GRT(23)H_2 = T^{-1}GRT \tag{23}
이제 유효한 H2H_2를 발견했으므로 첫 번째 이미지에 대해 일치하는 homography H1H_1을 찾아야 한다. 이미지의 대응점 사이의 제곱 거리의 합을 최소화하는 변환 H1H_1을 찾아 이를 수행한다.
arg minH1iH1piH2pi2(24)\argmin_{H_1} \sum_i \|H_1p_i - H_2p_i'\|^2 \tag{24}
유도가 이 수업의 범위를 벗어나지만 일치하는 H1H_1이 다음 형식을 갖는다는 것을 증명할 수 있다.
H1=HAH2M(25)H_1 = H_A H_2 M \tag{25}
여기서 F=[e]×MF = [e]_\times M이고
HA=[a1a2a3010001](26)H_A = \begin{bmatrix} a_1 & a_2 & a_3 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} \tag{26}
여기서 (a1,a2,a3)(a_1, a_2, a_3)은 나중에 계산될 특정한 벡터 a\bold{a}의 성분을 구성한다.
우선 MM에 대해 알아야 한다. 임의의 3×33 \times 3 skew-symmetric matrix AA의 흥미로운 속성은 A=A3A = A^3(scale까지)라는 것이다. 임의의 cross product matrix [e]×[e]_\times가 skew-symmetric이고 Fundamental matrix FF는 scale까지만 알 수 있으므로
F=[e]×M=[e]×[e]×[e]×M=[e]×[e]×F(27)F = [e]_\times M = [e]_\times [e]_\times [e]_\times M = [e]_\times [e]_\times F \tag{27}
우변을 그룹화하여 다음을 찾을 수 있다.
M=[e]×F(28)M = [e]_\times F \tag{28}
MM의 열에 ee의 임의의 스칼라 곱을 추가해도 F=[e]×MF = [e]_\times M은 여전히 scale까지 성립한다. 그러므로 MM을 정의하는 더 일반적인 경우는 다음과 같다.
M=[e]×F+ev(29)M = [e]_\times F + ev^\top \tag{29}
어떤 벡터 vv에 대해. 실제로 v=[111]v^\top = [1 \quad 1 \quad 1]로 설정하여 MM을 매우 잘 정의할 수 있다.
마지막으로 H1H_1에 대해 구하기 위해 HAH_Aa\bold{a} 값을 계산해야 한다. 방정식 24에서 제시된 문제를 최소화하는 H1,H2H_1, H_2를 찾기를 원한다. 이미 H2H_2MM의 값을 알고 있으므로 p^i=H2Mpi\hat{p}_i = H_2Mp_ip^i=H2pi\hat{p}_i' = H_2p_i'로 치환하면 최소화 문제는 다음이 된다.
argminHAiHAp^ip^i2(30)\arg \min_{H_A} \sum_i \|H_A\hat{p}_i - \hat{p}_i'\|^2 \tag{30}
특히 p^i=(x^i,y^i,1)\hat{p}_i = (\hat{x}_i, \hat{y}_i, 1)p^i=(x^i,y^i,1)\hat{p}_i' = (\hat{x}_i', \hat{y}_i', 1)라 하면 최소화 문제는 다음과 같이 바꿀 수 있다.
argminai(a1x^i+a2y^i+a3x^i)2+(y^iy^i)2(31)\arg \min_\bold{a} \sum_i (a_1 \hat{x}_i + a_2 \hat{y}_i + a_3 - \hat{x}_i')^2 + (\hat{y}_i - \hat{y}_i')^2 \tag{31}
y^iy^i\hat{y}_i - \hat{y}_i'이 상수 값이므로 최소화 문제는 추가로 다음으로 축소된다.
argminai(a1x^i+a2y^i+a3x^i)2(32)\arg \min_\bold{a} \sum_i (a_1 \hat{x}_i + a_2 \hat{y}_i + a_3 - \hat{x}_i')^2 \tag{32}
궁극적으로 이것은 a\bold{a}에 대한 least-square 문제 Wa=bW\bold{a} = b를 해결하는 것으로 분해될 수 있다.
W=[x^1y^11x^ny^n1],b=[x^1x^n](33)W = \begin{bmatrix} \hat{x}_1 & \hat{y}_1 & 1 \\ & \vdots \\ \hat{x}_n & \hat{y}_n & 1 \end{bmatrix}, b = \begin{bmatrix} \hat{x}_1' \\ \vdots \\ \hat{x}_n' \end{bmatrix} \tag{33}
a\bold{a}를 계산한 후에 HAH_A를 계산하고 마지막으로 H1H_1을 구할 수 있다. 따라서 몇 개의 대응점이 주어지면 이미지 쌍을 rectify 하기 위한 homographies H1,H2H_1, H_2를 생성할 수 있다.