Stereo Depth Estimation 간단 이해

신희준·2024년 2월 10일
0

Background Knowledge

목록 보기
10/12
post-custom-banner

reference

이번 포스팅에서는 Computer vision에서 이미지 두 장을 이용해 depth를 추정하는 방법을 간단히 알고 가자.

Introduction

Camera calibration을 통해서 우리는 3D scene을 2D image로 projection할 수 있는 projection matrix를 구할 수 있었다.

그런데, 반대로 2D image 한장을 통해서 3D scene의 point를 찾아낼 수 있을까? 아마 불가능할 것이다.

만약 우리가 하나의 카메라만 사용한다면, 직선 상의 많은 점이 내가 보는 상의 한 점에 맺히기 때문에 깊이를 구분할 수 없다.

그래도 아마 그 해당하는 3D point는 그 image plane의 2D point로부터 나가는 ray 위에 존재해야한다는 사실을 알 수 있다.

Stereo depth estimation

대신에 stereo depth estimation에서는 human vision과 비슷하게 2개의 view point를 통해 깊이를 추정한다.

위와 같은 setting으로 physical world의 point PP를 left/right camera로 찍었다고 하자. 그러면 아래와 같이 변수를 정의할 수 있는데,

  • PLP_L : left camera 이미지에서의 PP 위치
  • PRP_R : right camera 이미지에서의 PP 위치
  • n1n_1 : left camera 이미지에서 PLP_L까지의 horizontal distance
  • n2n_2 : left camera 이미지에서 PLP_L까지의 horizontal distance
  • TT : left/right camera 사이의 baseline distance
  • ff : camera의 focal length
  • dd : camera sensor의 pixel의 physical size
  • ZZ : camera center와 PP 사이의 거리 (-> 우리가 알고싶은 depth)
  • DD = disparity = n1n2n_1-n_2

그러면, 최종적으로 Depth는 아래와 같은 수식으로 표현할 수 있다. (닮음비 이용)

Z=fd×TDZ=\frac{f}{d} \times \frac{T}{D}

여기서 알 수 있는 점은 바로 Depth가 disparity에 반비례하다는 것인데, 이 말은 disparity가 클수록 물체가 camera와 가깝다는 뜻이고, 작을수록 멀다는 뜻이다.

다음으로 나올 수 있는 질문은 이 disparity를 구하기 위해서 PLP_LPRP_R점을 어떻게 matching 시킬 수 있냐는 것인데, 이는 Template matching을 통해 이루어진다.

애초에 점 PP는 왼쪽 camera에서 오른쪽 camera에서 찍던 같은horizontal line 상에 위치하기 때문에, 우리는 아래 그림과 같이 left image에서 PLP_L의 window를 right image에 sliding시키면서 similarity를 구해, 가장 비슷한 window와 matching시킨다.

similarity를 구하는 방법도 여러 가지가 있지만 설명은 생략.

정리하자면 stereo depth estimation에서는 두 개 이상의 카메라를 통해 얻은 영상에서 한 physical space의 한 point에 대한 disparity를 구함으로써 depth를 추정할 수 있는 것이다.

Disparity가 클수록 (빨간색) 가깝고, disparity가 작을수록 (파란색) 멀다.

profile
공부하고 싶은 사람
post-custom-banner

0개의 댓글