ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Perception] 1-2. Single View Geometry
    CV & ML 2021. 12. 9. 11:14

    Coursera의 Perception 과목의 2번째 강의 Single View Geometry입니다.

     

    요번 강의에서는 한 장의 사진을 통해 거리를 측정하는 방법에 대해 소개하며,

    3D 비전에서 빠질 수 없는 vanishing point(소실점)에 대해서도 알아보겠습니다.

     

    월드 좌표계와 카메라 좌표계

    카메라를 통해 사진을 찍으면 실제 3D 물리적 세상이 2D 평면에 맺히게 됩니다.

     

    Figure 1 월드좌표계와 카메라 좌표계

    위의 그림은 현실세계의 3차원 점 P가 카메라를 통해 영상에 2차원 점 p로 맺히는 과정을 보여줍니다.

    현실세계 좌표계를 'World Coordinate' 이라고 하며, 점 표기는 주로 대문자로 표현합니다. 

    카메라 좌표계(Camera Coordinate) 는 중심 C를 기준으로 $x_c, y_c, z_c$ 3개의 축으로 이루어져 있으며, 영상과 카메라 중점 사이는 초점거리 f로 나타나 있습니다. 

     

    점 P가 고정되어 있어도 카메라가 보는 방향에 따라 영상에 맺히는 점 p의 위치는 달라질 수 있습니다.

     

     

    How to measure distance?

    단안 카메라에서 찍은 사진에서 길이를 측정하기 위해선 어떻게 해야 할까요?

     

    Idea 1: Measurements on planes

    Figure 2. 평행선을 갖고 있는 타일

     

    Figure 2의 왼쪽 그림에서는 실제 세계에서는 평행한 선들을 갖고 있는 타일이 나타나 있습니다.  타일 사이의 대각선 길이를 찾고자 할 때, 왼쪽 그림에 바닥에 놓인 선들이 평행으로 놓여지도록 시점을 가상으로 바꾼 다음, 오른쪽 그림처럼 측정할 수 있습니다.

    (실제 단안 카메라로 찍었을 때 사진의 시점을 바꾸기 위해서는 촬영 시 카메라의 포즈를 알아야 하고, 오른쪽 그림처럼 나오기 위해선 카메라의 광학축이 바닥과 수직이 되게끔 포즈를 바꿔서 영상을 생성해야 합니다.)

     

    Idea 2: Vanishing Point 

     

    두번째 방법은 실제 세계의 평행선들이 영상 평면에는 한 점으로 수렴한다는 특징을 이용해서 길이를 측정할 수 있습니다. 

     

    Figure 3. 사람과 기둥 

    위의 그림에서 지붕을 지탱하는 하나의 기둥이 201cm라고 할 때, 사람과 그 옆에 있는 기둥들의 높이는 어떻게 구할 수 있을까요?

    기둥들은 서로 평행하고, 기둥이 지붕과 만나는 선과 바닥과 만나는 선은 서로 평행합니다. 이 선들을 그어보면 다음 그림처럼 나타납니다. 

     

    Figure 4. 물리적 세계의 평행선들이 하나의 소실점으로 수렴

    같은 색의 선들끼리는 실제 물리적 세계에서는 평행한 선들이라고 볼 수 있습니다. 이 선들은 3D 세상에선 절대 서로 만나질 않죠. 하지만 2D 영상으로 맺힐 때는 신기한 현상이 발생합니다. 2D에서 선을 긋다 보면 평행한 선들끼리는 동일한 점으로 수렴하는 것을 보실 수 있습니다. 이 점을 'Vanishing Point', 한국어로는 소실점이라고 하며, 2D 영상에서 3D 세상의 무한대를 나타낼 수 있습니다. 

    왼쪽 부분의 파란색 선들은 실제 물리 세계에서는 평행하기 때문에 그 사이 거리가 변하지 않습니다. 따라서 각 기둥의 높이는 서로 같으므로 모두 201cm 라고 추정할 수 있겠죠.

     

    그렇다면 사람은 어떻게 측정할 수 있을까요?  

    사람은 파란색 선들 중 밑에서 3번째, 2번째 사이에 있기 때문에 머리부터 발까지 길이와 기둥 길이의 비율을 이용하여 사람의 키를 추정할 수 있습니다.  

     

    실제 물리 세계에서 평행한 선들이 영상으로 투영되면서 소실점이 나타나는 과정은 다음과 같습니다.

    Figure 5. 평행한 선들을 영상에 투영

    line on the ground plane에 위치하는 파란색 점들이 image plane으로 투영될 때 점점 vanishing point로 수렴하는 걸 볼 수 있습니다. 현재는 광학축 (camera 좌표계에서 z축)이 평면의 파란색 선과 평행하기 때문에, 광학축이 영상 평면과 교차되는 점으로 vanishing point가 나타납니다.

     

    2D와 3D 관계를 나타내는 투영 기하학에서는 Homography Coordinate(동차 좌표계)라는 개념이 유용하게 적용이 되는데요. 일단 동차 좌표를 간단하게 설명한다면 $ (x,y)$ 를 $(x,y,1)$로 나타내는 것입니다.

    이 좌표를 쓰는 첫번째 이유는 카메라 초점과 카메라 영상의 픽셀 점을 이어서 선(ray)를 만들면 그 ray에 존재하는 모든 점을 동차 좌표 한 개로 표현할 수 있습니다. 예를 들면 2D 영상에 (2,1)이라는 픽셀 좌표를 동차 좌표계로 (2,1,1)이라고 설정하면, 3D 세계에서 (4, 2, 2), (10, 5, 5) 모두 동촤 좌표계에서는 같은 점인 셈이죠. 따라서 카메라 초점과 $(2,1)$을 연결한 선에 위치한 점들을 $z(2, 1, 1)$로 나타낼 수 있습니다. 

    이 동차 좌표를 사용하는 두번째 이유는 소실점과 같은 실제 세계에서 무한대를 나타내는 점을 2D에서 표현할 수 있어 기하학적 관계를 계산 할 때 편리하기 때문입니다. 이 소실점은 z = 0 으로서 나타낼 수 있습니다. 

     

    동차 좌표계의 유래와 자세한 특징에 대해 알고 싶으신 분들은 아래 두 포스팅을 참고해주시길 바랍니다.

    영상 Geometry#2 Homography Coordinates

    Homography Coordinates에 대해서....

     

    이 때까지는 실제 세계에서 평행한 선들이 2D 영상에 나타나는 상황을 살펴보았습니다.

    그렇다면 2D 영상에서 평행하게 나타나는 선들은 실제 세계에서 어떻게 나타난 선들일까요?

     

    카메라의 광학축이 바닥 부분과 평행한다고 했을 때 영상에서 평행한 선들은 물리적 세계에서는 한 점에서 출발해서 점점 사이 거리 멀어지는, 발산하는 선들이다.

    Figure 6. 2D 영상에서 평행한 선

     

    우리가 실제로 갖고 있는 휴대폰 카메라를 이용해서 확인해보려면, 

    Figure 7. 영상에서 평행한 선들 확인하는 방법

    먼저 한 점에서 점점 발산하는 선들을 줄 자를 그립니다. 그 다음 폰 카메라를 평평한 바닥에 90도로 세워서 위치하고  휴대폰을 앞 뒤로 움직이면 특정 위치에서,  선들이 영상 안에 평행하게 나타나 확인할 수 있고, 그 특정 위치와 점 사이 거리를 초점 거리로 볼 수 있습니다. 이 부분은 추후에 더 다뤄보도록 하겠습니다.

     

     

    댓글

Designed by Tistory.