Chapter 3-2. Depth

이진한·2025년 12월 24일

모빌리티 지능

목록 보기
8/11

먼저 해당 포스트를 쓰기 전에 저번 포스트에서 다루었던, 내용 중 Camera Calibration에 관련된 내용을 다루지는 않았지만, 이와 관련된 내용(Zhang's method)이 고영민 교수님의 Velog 상에 올라와 있어서 관심있는 사람은 찾아보길 바란다.

개인적으로 해당 Velog는 고영민 교수님의 수업이 어렵다고 느끼는 학우들이 많아서 이를 쉽게 설명해보고자 만드는 것이 목적이므로, 단순히 증명이 많은 내용은 생략했다. 간략하게 설명하자면, Calibration은 Camera Paramete를 찾는 방법이다. Camera를 구매하였을 때, 초점거리 혹은 image plane의 원점을 알려주지 않기 때문에 이를 찾을 수 있는 방법을 기술하는 것으로 Image간의 matching되는 point를 쉽게 구하기 위해서 Checker board를 활용하게 된다. Homography에서 다루었던 DLT과정을 통해서 수행하며, SVD(Singular Value Decomposition) 과정을 통해서 Least Square문제를 해결하는 과정이 담겨 있다. 또한,Zhang's method를 통해서 Instrinsic Parameter를 구하는 과정을 설명한다. 관심이 있다면 꼭 찾아보길 바란다. Linear Algebra를 수강했다면 수식 자체가 어렵지는 않다.
https://velog.io/@koyeongmin/%EA%B8%B0%EC%B4%88-%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%B9%84%EC%A0%84-4-Calibration

다시 본론으로 돌아와서 지난 포스트에서 Camera Parameter를 포함하는 투영행렬의 Inverse matrix로는 3차원 상의 point를 복원할 수 없다고 하였다. 따라서 3차원 정보를 복원하기 위해서는 추가적인 정보가 필요한데, 해당 정보가 바로 Depth이다. 이번 포스트에서는 Depth Estimation의 방법으로 Stereo Matching에 관련해서 설명하고자 한다.


1.Depth Estimation

방금 전 설명하였듯이, 3차원 정보를 복원하기 위해서는 Depth를 알아야 하는데, 이를 Estimation하기 위해서는 Stereo Camera를 활용하거나 여러 장의 연속된 Image 집합을 모아야 한다. 즉, 2장 이상의 Image가 있어야 3차원 정보 복원이 가능하다.

그렇다면 어떻게 Depth를 추정할 수 있는지에 대한 아이디어를 살펴보자.

지난 Post에서 설명하였듯이, 1대의 Camera에서 투영과정을 역으로 수행하면 1개의 직선이 나온다는 사실을 알 수 있었다. 따라서 위와 같이 2대의 Camera를 활용한다면 2개의 직선이 나올 것이고 각각의 직선에 대한 교점을 구한다면 Depth를 구할 수 있을 것이다.(같은 점에서 투영된 점이기 때문이다.)

Depth Esitimation을 수행하는 일반적인 과정은 다음과 같다.

  • Image Input

  • Find Corresponidg points

    • 전통적인 기법으로는 ORB, SIFT 알고리즘과 같은 Local Feature Matching을 수행하여 대응되는 지점을 찾아낸다.(교점을 구하기 위해서는 각각의 Image Plane 상의 좌표들이 하나의 Pixel에서 출력되었다는 가정이 필요하다.)
    • 최근에는 SuperPoint & SuperGlue와 같이 심층신경망을 통해 각 Pixel 별로 구별되는 특징값을 추출하는 기법을 이용한다.
  • Estimate Camera's Pose

  • Calculate depth

    8 points algorithm, Triangulation, Stereo mathching을 통해서 2개의 지점에 대한 교점을 찾아주는 과정을 수행한다.


2. Stereo Camera

많은 Depth Esitimation 과정이 존재하겠지만, 여기서는 Stereo Camera를 활용한 내용을 담고자 한다.

Stereo Camera


Stereo Camera는 2개의 카메라가 하나의 몸체에 설치되어 있는 카메라로, epipolar geometry의 특별한 형태이다. 이러한 Stereo Camera의 특징을 2가지 정리해보자면 다음과 같다.

  • Rotation이 없다.
  • 두 Camera 간격을 알고 있다.

Rotation이 존재하지 않으므로 위에서 설명했던 Camera Pose Esitmation 과정이 필요하지 않다. 그렇다면 이러한 Stereo Camera에서는 어떻게 Depth를 추정할 수 있을지 기하학적으로 이를 살펴보고자 한다.

Disparity

Stereo camera로 어떤 장면을 촬영하였을 경우, 멀리있는 물체는 위치가 조금만 변하지만, 가까이 있는 물체의 위치는 크게 변하게 된다. 이는 Disparity 따라서 결정이 되는데, 아래 Figure를 통해서 Disparity가 무엇인지 설명하고자 한다.

지금 위의 Figure에서 하나의 3차원 점 PP를 2개의 Camera를 통해서 촬영하였다고 생각하자. 참고로 Stereo Camera이므로 Rotation은 존재하지 않고 같은 방향을 촬영하였다고 생각하자.

추가적으로 OlO_{l}, ORO_{R} 사이의 Camera 간격도 알고 있다.

위의 Figure에서 보듯이 XlX^lXrX^r은 같은 지점 PP를 촬영하였지만, 위치차이가 발생한다. 이를 Disparity라고 한다. 쉽게 설명하자면 OlO_{l}부터 XlX^l사이의 거리를 +5+5, ORO_{R}부터 XrX^r까지의 거리를 5-5라고 한다면 Disparity1010이 될 것이다. 이러한 Disparity를 활용하여 Depth를 추정하게 된다.

Geometry of Stereo Camera

이제 Stereo Camera를 활용하여 Depth를 추정하는 과정을 살펴보자.

먼저 위의 각각의 기호들이 무엇을 의미하는지부터 정리하자면 다음과 같다.

  • OO' : 1번 Camera의 Origin
  • OO'' : 2번 Camera의 Origin
  • cc : 초점거리(Image Plane과 Camera Origin 사이의 거리
  • ZZ : Depth
  • x,xx', x'' : 1번 Camera의 Image Plane과 2번 Camera의 Image plane 상에 투영되는 지점

여기서 우리가 구하고자 하는 부분은 ZZ이다.
먼저 OP\overline{O'P}를 초록색 선을 따라서 평행이동하면 APO\triangle APO''(큰 삼각형), APO\triangle A'PO''(작은 삼각형)가 만들어질 것이다. 이 두 개의 삼각형은 닮음이므로 비례식을 사용한다면 다음과 같이 수식을 작성할 수 있을 것이다.

AAAA'가 Figure 상에서는 생략되어있지만 평행이동시켜본다면 큰삼각형과 작은삼각형이라는 말을 통해서 어디 지점을 의미하는지 알 수 있을 것이다.

Zc=BxxZ=cB(xx)=cBPx\frac{Z}{c} = \frac{B}{x' - x''} \to Z = c\frac{B}{-(x'' - x')} = c\frac{B}{-P_x}

위의 수식에서 BB(baseline)과 cc(focal length)의 경우 Stereo Camera의 Hardware에서 결정되는 값이며, 이미 알고 있다고 가정한다. 따라서 Depth Estimation을 위해서는 PxP_x(diparity)가 필요하다.

Stereo mathcing


방금 설명하였듯이, 깊이를 계산하기 위해서는 Disparity가 필요하다 그러면 이러한 Disparity는 어떻게 구할 수 있는지를 설명하기 위해서 위의 Figure를 예시로 들어보겠다. 아까 전에도 설명하였듯이, Stereo Camera에서는 Rotation이 없다. 그렇다면 왼쪽 1번 Camera에서의 한 Pixel의 위치는 오른쪽 2번 Camera의 청록색 선 중에 하나의 지점일 것이다. 따라서 이를 탐색하기만 한다면 같은 지점에서 촬영한 Disparity를 구할 수 있을 것이다.

따라서 위의 Figure에서 보이는 것과 같이, 1번 카메라의 Image Patch를 떼어내서 청록색 Line의 모든 Pixel과 비교하여 유사도를 측정한다. 이때 유사도를 측정하는 방식은 다음과 같다.

위의 유사도를 측정해내는 Formula를 활용하여 Score가 가장 높은 지점이 matching되는 지점이라고 판단해낼 수 있을 것이다.

Stereo Matching에서 Image Patch에 따른 특징은 다음과 같다.

  • Patch가 작은 경우 : 연산이 빨라지고 세밀한 depth를 얻을 수 있지만, 잘못된 matching이 많아져서 Noise가 커진다.
  • Patch가 큰 경우 : 연산은 느리지만, 부드러운 depth map을 얻을 수 있다.

그렇다면 Matching이 어려운 경우는 없을까 크게 3가지 있다.

  • texture regions
  • repeated patterns
  • specularities

특히 금속 재질에 의한 specularities는 위치가 바뀜으로써 Pixel값이 크게 바뀌게 된다. Deep Learing을 활용하는 경우에도 여전히 어려움을 겪고 있다.

이번 포스트 내용까지 하여 Vision 내용을 마무리하고 다음 포스트부터는 Lidar와 이번 수업에서 가장 재밌게 봤던 Localization(Bayes Filter, Kalman Fiter, Extended Kalmanfilter)에 대해서 다루어 보고자한다.

profile
Department of Robotics(Kyungpook national univercity)

0개의 댓글