[ComputerVision] Stereo

유혜지·2023년 11월 6일
0

ComputerVision

목록 보기
7/9
Camera Projection Equation


given (u, v).

=이 아니라 ~인가?
projection 과정에서 발생하는 loss 때문에 size 정보를 정확히 담지 못해 proportional하기 때문이다.

Stereo Vision

카메라가 2대 이상이라면, 그 카메라 2대로 동시에 어떤 대상을 찍었을 때, depth 정보를 추론해낼 수 있다.

Why stereo Vision?


Fundamental Ambiguity 때문이다.
x = f * X / Z = f * kX / kZ, y = f * Y / Z = f * kY / kZ
위 식에 따르면, 거리가 멀어져도 가까워져도(k값에 변화가 있어도), z축 기준 동일선상에 있다면 픽셀상 동일한 point에 값이 찍힌다. → 수없이 많은 X(or Y)와 Z 세트가 있음

Recovering Depth Information


우리는 P, Q 위치에 있는 물체의 depth 정보를 알고 싶다. 왼쪽 카메라로 보면, P와 Q는 서로 다른 픽셀의 위치에 찍히지만, 오른쪽 카메라로 보면 둘은 동일선상에 있기 때문에 하나의 픽셀에 찍힌다.

하나의 카메라만으로 알 수 없었던 depth 정보를 하나의 카메라를 추가로 사용함으로써 얻을 수 있다.

Depth can be recovered with two images and triangulation

카메라 두 대의 거리를 알면, 세상에다 대고 삼각형을 그려서 카메라로부터 얼마나 떨어져 있는지를 알 수 있다.

A Hitchhiker's Guid to Parallax


두 카메라로 동시에 찍은 두 이미지를 비교해보았을 때, 가까이 있는 object의 움직임이 커보이고, 멀리 있는 object의 움직임은 작아보인다.
→ categorization의 문제가 아니라, inversely proportional한 값이다. 즉, 수치화할 수 있을 것이다. (→ 많이 움직이면 가까이, 조금 움직이면 멀리 있겠구나)

  • DENSE: 모든 픽셀에서 거리를 잼 → 정밀도 떨어짐, but 형상 정보를 알게됨.
  • SPARSE: 어떤 object들에 대해서만 → 정밀도 높음

두 이미지는 dynamic하면 안되고, static한 이미지여야만 한다. → 동일한 카메라로 동시에 촬영한다.

  • 어려운 점
    • triangle을 그리려면, 카메라 사이의 거리를 정확하게 맞춰야 한다.
    • 두 카메라에서 찍은 image coordinate의 물체가 동일한 것인지 알 수 있어야 함(어떤 것과 어떤 것이 matching되는지 알아야 함).
A Simple Stereo System

  • Intrinsic
    • f1 and f2: focal lengths
    • A1 and A2: affine internal parameter matrices
      f1 = f2 = f, A1 = A2 = A → 두 카메라는 동일한 카메라라고 가정했으므로 focal length와 affine transformation은 동일함
  • Extrinsic
    • Transformation(R, T) between cameras
      R = I
      T = (T'x, 0, 0)

      stereo setup을 아주 간단히만 해보자. rotation하지 말고, x방향(좌우)으로만 translation하자.

A simple Stereo System-Top Down View (XZ plane)

  • 각각의 카메라 사이의 거리를 T'x라고 한다. 이를 baseline이라고 부르기도 한다.
  • 두 카메라에 P 위치의 물체가 나타난 이미지를 overlap시키면 다음과 같다.
    • 위와 같이 overlap시킨 object가 찍힌 픽셀 사이의 거리를 parallax distance라고 한다.
Projection Equation

  • left camera에서 World to Camera Coords할 때, 아무런 transformation을 해주지 않는다. 이는 left camera를 world coordinate으로 정의하겠다는 의미이다.
  • right camera는 world coordinate(left camera coordinate)과 일치시키기 위해 x 방향으로만 translation해주므로 위와 같은 matrix가 나온다.
Stereo Disparity

  • d: disparity(x'r과 x'l의 픽셀 차)
    이 값이 클수록 카메라로부터 object 거리가 짧음, 반대로 작을수록 카메라로부터 거리 멂.
  • T'x: baseline(두 카메라 사이의 거리)
  • Z: depth(카메라와 object 사이의 거리)
    Z = f * T'x / d given f, T'x, d

    Note: Depth and stereo disparity are inversely proportional
    depth와 disparity는 "반비례" 관계이다!
    correspondence matching을 수행할 때, 사용할 수 있는 measure로 similarity(유사도)와 SSD(Dissimilarity)가 있다.

Stereo Example

  • 밝을수록 가깝다 == disparity가 클수록 가깝다 → disparity에 역수를 취하면 depth가 나올 것.

    자, 근데 이상한 점..
    1) 오른쪽 이미지에서 보이지 않는 곳까지 disparity values에 값이 구해져있다.
    2) 검은색은 일치하는 patch를 찾지 못했기 때문에 검은색이다.
    patch를 떠서 corespondence matching을 할건데, object의 edge 부분은 배경 변화가 크기 때문에 8-neighbor의 값이 달라진다. 이 문제는 edge에서 많이 발생한다. 따라서 저 disparity values 이미저처럼 깔끔하게 나오는 게 말이 안된다!

Recall: Simple Stereo System

  • Epipolar Line: 두 카메라에 object가 찍힌 그 픽셀 point를 잇는 선
    x 방향으로만 translation했기 때문에, y값은 동일!
Matching using Epipolar Lines

  • epipolar line을 이용해 full search하지 말고, left image의 patch와 일치하는 곳을 right image에서 찾아보자.

    근데... 좌우 이동하면서 전체를 다 봐야 할까?
    left image를 기준으로 right image는 왼쪽으로 물체가 이동한 것처럼 보이므로 patch의 왼쪽만 보면 된다.
    또또. 왼쪽을 다 볼 필요 없다. 두 카메라 사이의 T'x(baseline) 범위까지만 확인해보면 correspondence point를 찾을 수 있다.

Example: 5x5 windows NCC match score


왼쪽 이미지와 같이 나오는 게 정상이다(edge에서 error가 많이 발생).

이는 근본적인 correspondence matching의 문제(patch를 가지고 8-neighbor 값을 비교하는)이다. 이 correspondence matching의 전제조건은 "시점에 따라 값의 변화가 있으면 안됨"이기 때문.

Example: No Matches


solution

  • kernel의 size를 키워서 narrow하게 말고, wide하게 보자.
    narrow한 영역은 noise에 민감하다.
    kernel size를 키우면 상대적으로 noise에 강해지지만, smooth해짐. 또한 global optima pair 근처로 갈 확률은 높아지지만, 정확한 correspondence match는 어려울 수 있다. detail이 떨어지고, distance 또한 뭉툭하게 계산될 것이다.

    disparity 이미지는 기준이 되는 카메라에 맞춰서 하나의 이미지가 생성된다. 위 이미지는 left image의 disparity image이다.
    그래서 disparity image는 image(camera) 하나 당 한 개가 나온다.

0개의 댓글