4-1/컴퓨터비전개론

11주차-Structure from Motion

Donghun Kang 2025. 6. 10. 19:22
  • Uncontrolled (Casual) Video

하나의 카메라로 움직이면서 찍은 여러 장의 image / 카메라를 움직이면서 찍는다.

=> intrinsic 변화 X / Extrinsic 만 변화

 

  • Structure from Motion
- 여러 이미지로부터 **3D 구조(geometry)**와 **카메라의 움직임(poses)**을 추정하는 기술
- 하나의 카메라로 움직이면서 여러 장의 이미지를 촬영한 경우, intrinsic은 고정되고 extrinsic만 변화한다고 가정

 

  • Orthographic Projection (From 3D to 2D)

- 물체를 카메라 축에 수직으로 투영하는 모델
=> Scene이 카메라에 대해서 멀리 떨어져 있을때
=> Scene이 가지고 있는 제일 가까운 곳과 먼쪽과의 차이가 카메라가 떨어진 distance에 비해 작으면
==> Orthographic camera로 가정할 수 있다!

- 3D 점 Xc를 Image plane 상의 2D 좌표 (u,v)로 변환

 

  • Orthographic SFM

- frame f에서 point p의 2D 좌표가 주어진다.

- u,v는 주어져 있고, 이를 기반으로 P (3D point)를 구하고자 한다.

- (카메라마다) f마다 c가 존재한다. f마다 i와 j가 다르다. 

=> Cf는 구하지 않아도 된다. (이로부터 i, j를 구할 수 있다.)

 

  • Centering Trick
Q) C를 어떻게 없애지?
A) point의 평균에다가 중심을 두자!

이미지마다 평균점에다가 원점을 위치시킨다.
3D 평균을 원점을 둔 경우
카메라 원점을 이미지 중심으로 옮긴다.

=> 다음과 같이 진행하면 Cf가 사라진다.
(centering만 바꿔주면 구해야 하는 Unknown 중 각 카메라의 center를 구할 필요가 없다.)

 

  • Observation Matrix W

Q) W로부터 M과 S를 어떻게 나누지?
A) Matrix의 크기를 이용한다. (W가 가지고 있는 rank가 3 또는 그 이하이어야 한다.)

 

# Linear Independence of Vetors

어떻게든 만들어지지 않는다 => linear independent

 

# Rank of Matrix

 

 

위의 성질들을 보고서 다시 Observation Matrix W로 돌아가보자

 

Rank의 성질에 따르면 W에 대해서 다음이 성립한다.

이제 이것을 가지고 SVD를 진행한다.

σ는 제일 큰 값부터 차례대로 정렬한다. (σ1이 가장 크다)

=> Rank(W) 와 Rank(Σ)가 모두 3보다 작거나 같으므로 U2와 V2는 W를 구성하는데 영향을 주지 못한다.

 

  • Factorization (Finding M, S)
Q) σ1,2,3에 루트 씌워서 2개로 나누면 각각 M과 S일까?
A) 맞긴한데 답은 하나이지만 4개의 solution이 나온다. => Q를 찾자!

 

  • Orthonormality of M
- Q를 구하기 위한 constraint를 구해보자 (Q : 3x3)

- Q : 3x3 matrix / 9 variable알아야 한다.
- frame 3장 이상이면 Q를 구할 수 있다.


  • Orthographic SFM Summary
- feature point를 Detect하고 Tracking한다.
- 각 이미지에서 중심점을 기준으로 2D 좌표를 정규화하여 matrix W를 만든다. (Centering Trick)
- W에 대해 SVD를 수행하고 rank constraint를 적용한다. (W의 rank는 최대 3)
- M과 S를 set 한다.

- Q는 orthonormality constraint M을이용하여 계산한다.
=> SFM 해의 유일성을 보장하게 한다. 

 

 


 

Q) multi view로 찍어서 Reconstruction 할때의 문제는?

A) 한 point가 보이는 이미지의 개수가 적어진다. / 전체 point는 많아진다. 

=> Bundle Adjustment를 이용한다.

 

  • Bundle (Block) Adjustment
- 최종적으로 구해지는 3D point들의 위치를 좀 더 정확하게 하기 위한 최적화 방식
=> 초기값이 필요하다! 
- 여러 이미지를 한 block단위로 처리한다.
- camera pose와 3D point를 추정하기 위해 Error를 설계하고 이를 최소화 하는 방식
[Key idea]
1.  초기 추정값(initial guess)에서 시작한다.
2. 추정된 3D point를 camera image에 투영한다.
3. 투영된 2D 위치와 실제 위치를 비교
4. 이 차이(reprojection error)를 최소화하는 방향으로 조절
  • Reprojection Error
[Unknown Parameters]
1. 3D point (Xi)
2. Scale factor (λij)
3. 6D camera pose (R + T) (이미지마다)
4. 5D projection parameters (intrinsic : 보통 한 set만-하나의 카메라)
5. Distortion (q)

 

# Scale Factors 제거

 

# Normal Equations

 

- Linear Syetem을 바로 풀기 힘들다.

 


 

EX)

3D point 49개
3번 찍는다.
한 줄 갈때 마다 7장 찍는다.
21장을 찍었다.
Reconstructure하고 싶은 point 49개
1,7,43,49번 값을 안다.
Unkown 3d point 45개
한 장를 찍을 때마다 동일한 간격 (그림 상 네모)
총 21장의 이미지 중 6장은 6point, 15장은 9point
6x6 + 15x9 = 171
총 point 171개 x 2 (x,y) = 342 observation
3D point 45 x 3 = 135 Unknown
Camera parameter 21 x 6 = 126 Unknown
Unknown = 135 + 126 = 261Unknown

 

  • Coeffcient Matrix

=> 2줄씩 짜른다. / Cij, Bij 말고는 0을 가진다.

 

# C Matrix (2x3)

=> point와 observation의 관계를 나타낸 matrix

=> 2줄 당 한칸씩 2x3이 있어야 한다.

 

# B Matrix (2x6)

=> Camera parameter와 observation의 관계를 나타낸 matrix

=> 2줄 당 non-zero block이 한 줄씩

 

  • Sparse Coefficient Matrix

 

  • Normal Matrix
  • Orientation Parameters Only
- Orientation parameters만 계산하고 싶다면?

 

  • Reduced Normal System

 


 

  • BA(Bundle Adjustment) Summary
- BA는 least squares solution으로 initial solution이 있어야 한다.
- large system을 풀 수 있다.
- BA는 sparse matrix를 유도한다.
=> 한 이미지에 보이는 point의 개수가 전체 point에 비해 많지 않기 때문에
- sparse solvers를 사용하는 것이 key이다.