Structure from Motion

Multiview geometry 문제에는 세 종류가 있다.

  1. Scene geometry (Structure) : 2D 좌표가 주어질 때, 3D 좌표는 어디에 있는가?
  2. Correspondence (stereo matching) : 한 이미지에서의 한 점이 다른 이미지에서는 어디에 존재할 가능성이 있는가?
  3. Camera geometry (motion) : 한 대상에 대해 여러 관점의 이미지 좌표가 주어질 때, 카메라 파라미터 행렬은 무엇인가?

이번 단원에서는 1번에 대해 다룰 것이다. (2, 3번은 각각 2번, 3번에서 다루었다.)

Structure from Motion Ambiguity

Scene geometry는 m개의 이미지와 n개의 3D 좌표가 주어졌을 때, m개의 projection matrix $P_i$와 n개의 3D 좌표 $X_j$를 $m\times n$개의 $x_{ij}$로부터 찾는 문제이다.

만약 scale factor $k$가 존재하고, 카메라 파라미터들을 모두 $k$로 나눈다면, 그렇지 않았을 때와 같은 식이 나오게 되므로 정확한 scale 측정이 불가능하다.

또는, transformation matrix $Q$를 이용해도 똑같은 결과가 나온다.

Affine Camera

Orthographic projection은 이미지 좌표에서 world좌표로 변환 시 $z$축의 변화가 없는 변환이었다. affine 카메라는 3D 공간상에서의 affine 변환, orthographic projection, 이미지상의 affine 변환 효과가 결합된 것이다. 따라서 다음 식으로 나타낼 수 있다.

결국 affine 카메라는 linear mapping에 translation을 더한 것이다.

이 해는 유일하지 않고, 임의의 affine transformation $Q$에 의해 , 가 해가 될 수도 있다.

Affine Structure from Motion

우리는 $2mn$개의 변수를 알고 있고, $8m+3n$개를 모르고 $Q$가 12의 degree of freedom을 가지므로 $2mn \geq (8m+3n)-12$여야 이 문제를 풀수 있다?

먼저, 이미지 좌표의 중심을 빼므로써 centering을 한다.

계산을 쉽게 하기 위해 world좌표계의 원점이 3D좌표계의 center라고 하자.

그리고 $2m\times n$개의 데이터 행렬을 만든다.

이 행렬은 rank가 3이다. ($A$행렬이 열 3개이고 $D$는 $A$와 $X$들의 조합으로 만들어지므로)이제 Singular Value Decomposition (SVD)를 이용해 D를 세 개의 행렬로 나눌 수 있다.

rank가 3이기 때문에 W의 대각성분 3개 빼고는 다 0이다. 우리는 $U, W, V$행렬에서 좌측 3개만 가져와서 차원을 3으로 압축할 수 있다.

라고 한다면, 원하는 차원의 $M$과 $S$를 얻을 수 있다.

이 decomposition도 유일하지 않아서, 임의의 $3\times3$ 행렬 $C$를 이용하여 $M\rightarrow MC$, $S\rightarrow C^{-1}S$의 해를 만들 수도 있다.

Eliminating the Affine Ambiguity

서로 직교하고 scale이 1인 축을 기준으로 하게 한다. 이 축은 다음 두 식을 만족한다.

이미지 한장당 $a_1, a_2$가 각각 존재할 것이다. 이들은 각각

을 만족한다.

라고 하면 $3m$개의 방정식

,

을 얻을 수 있다. 이 방정식을 풀고, cholesky decomposition을 이용해 $L=CC^T$로 분해한 뒤 $M\rightarrow MC$, $S\rightarrow C^{-1}S$로 바꿔주면 ambigudity를 없앨 수 있다?

Missing Data

실제로 어떤 3D 좌표는 어떤 view의 이미지에서는 보이지 않을 수도 있기 때문에 $M$행렬이 원하는 모양으로 나오지 않을 수도 있다. 이 때는 이 행렬을 dense sub-block으로 나누고, 그 sub-block들을 factorize한 뒤 사용하는 방법이 있다. incremental bilinear refinement를 사용한다는데.. 어떻게 하는거지

Projective Structure from Motion

m개의 이미지와 n개의 3D 좌표가 주어졌을 때, m개의 projection matrix $P_i$와 n개의 3D 좌표 $X_j$를 $m\times n$개의 $x_{ij}$로부터 찾는 문제이다. 아까와 똑같지만, $z_{ij}$라는 depth가 추가로 존재한다.

calibration 정보가 없으면 카메라와 좌표들은 $4\times4$ projective transformation 행렬 $Q$를 통해서만 발견할 수 있다?

우리는 $2mn$개의 변수를 알고 있고, $11m+3n$개를 모르고 $Q$가 15의 degree of freedom을 가지므로 $2mn \geq (11m+3n)-15$여야 이 문제를 풀수 있다? 따라서 2개의 카메라에 대해서는 최소 7개 점에 대한 정보가 필요하다.

우선 두 뷰 사이의 fundamental matrix $F$를 계산한다. 기준이 될 카메라의 행렬을 , 다른 카메라의 행렬을 라고 하자. 그러면

($\mathbf{x}’\times b$와 $\mathbf{x}’$는 서로 수직이므로 내적하면 0이 된다.)

이므로, $F=[b_{\times}]A$이다.

$z$를 알고 있다면 factorize를 통해 $M, S$를 구할 수 있고, $M, S$를 알고 있다면 $z$를 구할 수 있다.

Self-Calibration

Self-Calibration (auto-calibration)은 카메라의 intrinsic 파라미터를 바로 알아내는 것이다. intrinsic 파라미터는 모든 이미지에 대해 상관없이 일정하다는 조건을 가지고 찾아낼 수 있다.


Terms

tangency : 접합
fuse : 사용하다