Post

[3차원 기하학] Epipolar Geometry

[3차원 기하학] Epipolar Geometry

Epipolar Geometry는 3차원 공간을 서로 다른 두 지점에서 촬영했을 때, 두 이미지 사이의 기하학적 관계를 다루는 이론이다.

구성 요소

아래 그림은 3차원 공간상의 한 점 $P$가 카메라 $A$의 이미지 센서에는 $p$에 투영되고, 카메라 $B$의 이미지 센서에는 $p’$에 투영된 경우이다.

fig1 [출처]

  • Baseline: 두 카메라 중심 $C$와 $C’$를 잇는 직선
  • Epipole ($e, e’$): 베이스라인과 각 이미지 평면이 만나는 점 (또는 상대 카메라의 중심이 내 이미지에 투영된 점으로 볼 수 있음)
  • Epipolar Plane: 3차원 공간의 점 $P$와 두 카메라 중심 $C, C’$가 이루는 평면 (초록색 점선이 둘러싼 평면)
  • Epipolar Line ($l, l’$): 에피폴라 평면과 이미지 평면이 만나서 생기는 직선

위의 그림에서 $R$과 $\mathbf{t}$는 카메라 $A$에서 $B$로의 회전 행렬과 이동 벡터를 나타낸다.

Epipolar Line

두 카메라 위치 사이의 기하학적 관계 $[R\mid\mathbf{t}]$와 카메라 $A$에서의 투영 좌표 $p$를 알고 있더라도, $P$의 깊이 정보가 없다면 3차원 좌표 $P$를 복원할 수 없다.

하지만 $P$가 $C_1$과 $p$를 잇는 직선 상에 존재하기 때문에, 이 직선이 카메라 $B$에 투영된 직선 $l’$은 유일하게 존재한다는 것을 알 수 있다.

fig2 [출처]

Epipolar Constraint

Essential Matrix

3차원 공간상의 점 $P$가 각 카메라의 normalized image plane에 $p$와 $p’$로 투영됐다고 하면, 두 정규화 이미지 좌표 $p_n$와 $p_n’$ 사이에는 아래의 관계를 만족하는 행렬이 항상 존재하며, 이 관계식을 epipolar constraint이라고 부른다.

\[p_n'^\top Ep_n=0\]

이때 행렬 $E$를 Essential Matrix라고 부르며, 아래와 같이 정의된다.

\[E=[\mathbf{t}]_\times R\]

즉, 카메라의 내부 파라미터 $K$를 알고 있을 때, 두 카메라 사이의 기하학적 관계 $R$과 $\mathbf{t}$를 나타낸다.

공식 유도
  1. 첫 번째 카메라 좌표계의 점 $p$와 두 번째 카메라 좌표계의 점 $p’$의 관계는 회전 행렬 $R$과 평행이동 벡터 $\mathbf{t}$를 이용하여 다음과 같이 나타낼 수 있다.

    \[p'=Rp+\mathbf{t}\]
  2. 양변에 $\mathbf{t}$를 외적한다. 이때 $\mathbf{t} \times \mathbf{t} = 0$이므로 식이 단순화된다.

    \[\mathbf{t}\times p'=\mathbf{t}\times(Rp+\mathbf{t})=\mathbf{t}\times Rp\]
  3. 벡터 $\mathbf{t}\times p’$는 $p’$와 수직이므로, $p’$와 내적하면 $0$이 된다.

    \[p'^\top(\mathbf{t}\times Rp)=0\]
  4. 외적 연산을 skew-symmetric matrix $[\mathbf{t}]_\times$로 치환한다.

    \[p'^\top[\mathbf{t}]_\times Rp=0\]
  5. $p=Zp_n$, $p’=Z’p_n’$ (여기서 $Z, Z’$는 깊이)를 대입하고 양변을 $ZZ’$로 나누면 최종 식을 얻는다.

    \[p_n'^\top \underbrace{[\mathbf{t}]_\times R}_{E} p_n = 0\]

Fundamental Matrix

Fundamental Matrix는 카메라 내부 파라미터 $K$를 모를 때, 2D 이미지상의 실제 픽셀 좌표 $p$와 $p’$의 관계를 나타낸 행렬이다.

\[p'^\top Fp=0\] \[F=(K'^\top)^{-1}EK^{-1}\]

이때 $Fp$는 첫 번째 이미지의 점 $p$에 대응하는 두 번째 이미지 상의 직선 $l’$의 방정식이 된다.

\[l' = Fp\]

두 view 사이의 변환 (Depth 정보가 없는 경우)

target view의 좌표를 source view의 좌표로 변환하고 싶을 때,

This post is licensed under CC BY 4.0 by the author.