본문 바로가기
DataScience/컴퓨터비전

컴퓨터 비전 :: Stereo Vision

by 올커 2023. 6. 20.

본 포스팅은 성균관대학교 최재영 교수님의 '컴퓨터 비전(Computer Vision)' 강의 내용을 참고하여 작성되었습니다.

컴퓨터 비전 :: Stereo Vision

  - 2대의 카메라 이용 → 각 카메라에서 영상을 얻어서 처리 → 객체의 깊이(원근) 파악

Two-view Geometry

 · Epipolar Geometry(음극선 기하학)

  : 2대의 카메라를 이용해서 각각의 Camera에서 영상을 얻어서 처리하여 객체의 깊이(원근)을 파악하는 방식이며 이를 통하여 두 이미지 사이의 관계를 구할 수 있습니다.

  - Baseline : 두 Camera centers(O-O')를 연결한 직선

  - Epiploe(e, e') : Baseline이 각 이미지에 Image에 맞닿는 점

  - Epipolar line : 줄여서 epline이라고도 하며 위의 이미지에서 'ι'과 'ι''에 해당합니다. Image plane과 Camera centers(O, O')에서 초점 p와 연결한 직선이 맞닿는 점과, Epipole을 연결한 직선

  - Epipolar plane : Baseline과 World point, 그리고 epipolar line을 포함하는 평면

   *위 그림에서 또 다른 World point(p')에서 생성된 l_2, l_2'도 동일한 epipole(e, e')을 지난다.

   *epipole은 항상 이미지 내부에 있지 않을 수도 있으며, 무한한 공간에 존재할 수도 있다.

  (1) Epipolar Constraint
   : Epipolar line을 구하기 위해서는 두 영상간의 관계가 필요하다.

    ① Essential Matrix : Camera에 대한 내부적 perameter를 제거한 기본적인 내용을 가진 Matrix (*Camera는 Calibrate되었다고 가정한다)

      · x가 주어졌을 때, E를 이용해서 Epipolar line을 구하는 것

        · 위의 정의에 따라 Essential Matrix E를 아래의 식을 통해 구한다고 가정하자. 여기서 E의 shape는 3×3 행렬이다.

      · 아래 그림에서 벡터 x와 라인 ι은 직교하므로 (x^T) × ι은 0이며 (x'^T) × ι 또한 0이다. 이는 즉 ax+by+c=0이라는 식을 생성할 수 있다.

      · 위의 내용을 통해 (x'^T) × ι' = 0, 그리고 E × x = ι' 이므로, 뒤의 식을 앞에 대입하면 (x^T) × E × x = 0이라는 결과를 얻을 수 있으며, 식을 정리하면 아래와 같다.

      · 위의 Longuet-Higgins equation을 보면 모습이 Homography와 유사하다는 것을 알 수 있지만, Essential Matrix E는 point와 line을 연결하고, Homograpy H는 potin와 point를 연결한다는 점에서 차이가 난다.

 

    ② Fundamental Matrix : Camera의 내적 parameter까지 고려한 Matrix

      · 카메라의 고유 좌표를 고려하기 때문에 전역좌표계가 아닌 픽셀좌표계로 변형된다.

      · 만약 카메라의 정보가 고정된 이미지를 사용하고 있고, 초점거리로 나누어진 지점도 서로 정교하여 같다면 F=E라고 가정할 수 있다.

      · 위의 식을 통해 Image정보가 Camera에 대한 전역좌표계로 변환된 식을 사용할 수 있으며 아래와 같이 Fundamental Matrix를 유추할 수 있다.

      · Essential의 경우 Camera의 좌표계에서 식을 활용해야 하지만 아래와 같이 변환함으로써 픽셀좌표계를 사용할 수 있는 이점이 생긴다.

      · 아래와 같이 분할하면 Fundamental matrix를 내적연산을 통해 구할 수 있다.

      · F는 intrinsic, extrinsic parameter에 의존하는데, 아래의 식을 SVC(Singular Value Decomposition)을 통해 풀 수 있다. 

      · 위 식은 9개의 unknowns를 가진 homogeneous linear system을 생성하며 이는 AX=0으로 간소화할 수 있다.

      · 1개의 식이 1개의 equation만 커버하며 최소 8개의 대응점이 필요하기 때문에 Eight-point Algorithm을 활용한다.

  (2) Eight-point Algorithm

    ① (Normalize points)

      : AX = 0의 식에서 각 Column의 차이가 매우 크기 때문에, least square 계산시 오차가 많이 발생하게 되므로 이를 줄이기 위해 points를 Normalize한다. 이를 통해 points의 값이 (-1, -1)에서 (1,1)사이에 존재하도록 한다.
    ② Construct the M x 9 matrix A

    ③ Find the SVD of A

      : 우측과 같이 SVD를 적용하여 A에 대한 식을 만들 수 있다. → A =U∑(V^T)

        이를 통해 {f1, f2, ..., f9}를 찾아낸다.
    ④ Entries of F are the elements of column of V corresponding to the least singular value

      : ||F-F'||이 최소값이 되는 F를 찾아낸다. 즉, Singular value를 Control하여 F'을 새로 구하여 최적화된 F를 찾는다.
    ⑤ (Enforce rank 2 constraint on F)
    ⑥ (Un-normalize F)

      · ②의 M값은 대응점이 8개까지 필요없는 경우가 성립할 경우 변할 수 있다. (ex. Camera가 calibrate가 되었다고 가정)

2. Stereo Vision

  (1) Triangulation

  ① Select point in one image
  ② Form epipolar line for that point in second image
  ③ Find matching point along line
  ④ Perform triangulation (삼각법 or 삼각측량법 → 깊이 계산)

     : Left, Right 이미지에서 매칭된 point(x_i, x'_i)와 Camera matrices(P, P')을 통해 아래 식으로 3D Point를 예측한다.

  (2) Stereo Rectification

  : epipolar line이 horizontal한 경우 x방향 Translation항만 살아있기 때문에 아래의 식이 성립한다.

  : Camera center가 같은 높이에 있으며, baseline과 focal length가 같다.

  : 각 이미지는 서로 평행하며 baseline과도 평행하다.

  : 식을 정리해보면 아래와 같다.

   · Image Rectify의 수행

   ① 두 영상을 하나의 좌표축으로 변환(둘 중 하나의 좌표축에 R을 이용해 맞춘다.)

     → Compute E to get R : E = [t_x]R

     → Rotate the image by R

   ② 두 영상을 R_rect를 통해 Rotate하여 epipole을 무한대로 보낸다.

   ③ Scale을 보정한다(Focal length가 같게 조정)

 

   · Stereo Rectification Algorithm

   ① Estimate E

   ② Estimate the epipole e(SVD of E)

   ③ Build R_rect from e → infinity setting

   ④ Decompose E into R and T

   ⑤ Set R_1 = R_rect, R_2 = R×R_rect

   ⑥ Rotate each left camera point(warp image)

       [x' y' z'] = R_1[x y z]  → Homography와 유사  X' = HX, H=kR_1 (*k는 camera 정보)

   ⑦ Rectified points as P=f/z' [x' y' z']

   ⑧ Repeat (6) and (7) for right camera points using R_2

    + scaling(focal length가 같도록)

 

  (3) Depth Estimation via stereo matching

   - 멀면 멀 수록 이미지 변화 차이가 적고, 가까울 수록 큰 변화를 이용

   - 이미지에서 모든 epiline을 구한다면 전체 영상의 깊이를 예측할 수 있다.

     (카메라와의 거리는 수평적 차이와 반비례)

   - Stereopsis : 두 눈을 사용함으로써 깊이를 판별 (오른쪽 눈과 왼쪽 눈이 바라보는 각도는 다르다) → Disparity

   · (Basic) Stereo Matching Algorithm

    - 변수 : Window size(패치), 영상의 특성(texture, occlusion, 같은 패턴)에 영향을 많이 받는다.

    - 위 그림에서 disparity = x_2 - x_1

    - 대응하는 점을 찾는 방법

      ① Zero mean : mask filter를 사용하여 평균값을 빼준 후 정규화

      ② SSD : Sum of squared diff'

      ③ NCC : Normalized cross-correlation

 

   · Disparity Space Image(DSI)

    - 두 영상을 비교해가며 각각 발생한 차이점들을 하나의 Matrix로 저장 → 영상화(Image)

   - 유사점을 epiline을 따라 Local에서 대응하며 ref와 같은 값을 찾는다.

   - DSI는 row 하나당 발생(ex. 600개의 row → DSI가 600개 생성) → 추후 row간 보정도 해준다.

   · Depth from Disparity

 

반응형

댓글