영상 소실점(vanishing point)의 이해와 활용

영상처리 2016.08.09 14:22

영상의 소실점(vanishing point)은 여러 재미있는 기하학적 성질을 가지고 있으며 카메라 캘리브레이션, 틸트(tilt) 계산, 3D 복원 등 다양한 응용을 갖는다.


이 글에서는 영상의 소실점(vanishing point)이 무언인지, 어떤 기하학적 의미를 갖고 있는지, 그리고 어떤 응용이 가능한지 정리해 본다. 소실점(vanishing point)은 결국 영상의 기하학적 성질을 다루기 때문에 아래 두 글에 대한 이해가 필수적이다.



1. 소실점(vanishing point)


우리가 사는 물리세계에서는 서로 평행한 두 직선은 영원히 만나지 않는다. 하지만 카메라 영상에서는 평행한 직선도 서로 만날 수 있으며 교점의 좌표도 구할 수 있다. 우리가 영상에서 말하는 소실점(vanishing point)이 바로 그 교점이다.


소실점(vanishing point)의 대표적인 예로는 기찻길의 선로를 들 수 있다.


그림 1. 소실점(Vanishing Point)


그런데, 위 그림 1을 자세히 보면 평행인 선로가 사실은 2개가 아니라 4개임을 알 수 있다. 그리고 이들 네 선로는 모두 한점에서 만난다. 여기서 우리는 소실점의 중요한 성질 하나를 알 수 있다.


물리공간에서 평행한 모든 직선들은 영상에서 모두 동일한 소실점을 갖는다.


즉, 물리공간에서 아무리 멀리 떨어진 직선들일지라도 그리고 아무리 수가 많더라도 서로 방향만 같다면 영상에서는 모두 동일한 하나의 소실점으로 수렴하게 된다.


그림 2. 이미지출처: http://slideplayer.com/slide/4713192/


그런데 이들 평행한 직선들은 모두 동일한 평면 위에 있는 직선들이어야 할까? 답은 NO, 그렇지 않다 이다. 즉, 어떤 평면 위에 있든 관계없이 3차원 공간에서 서로 평행하기만 하면 영상에서는 모두 동일한 소실점을 갖는다.


그림 3. 이미지 출처: http://www.kkuodesign.com



2. 소실선(vanishing line)


소실점(vanishing point)은 물리공간에서 평행한 직선들이 영상에 투영되어 원근효과(perspective effect)에 의해 마치 한 점에서 만나는 것처럼 보이는 현상이다.


그런데, 이러한 소실점(vanishing point)은 영상에서 단 한곳에서만 형성되는 것일까? 답은 NO, 그렇지 않다 이다. 한 영상에는 무수히 많은 소실점들이 형성될 수 있으며 그들의 위치는 영상내 임의의 위치 또는 영상의 테두리를 벗어난 외부에도 형성될 수 있다.

그림 4. 다양한 소실점 (이미지출처: http://www.detaildesignonline.com)


앞서 모든 평행한 직선들은 동일한 소실점을 갖는다 했다. 그런데 이 말을 조금만 바꾸어 보면 평행하지 않은 직선은 서로 다른 소실점을 갖는다는 의미가 된다. 즉, 영상에서 소실점의 위치를 결정하는 것은 직선의 방향이며 직선의 방향에 따라 위 그림처럼 수많은 소실점이 생성될 수 있다.


그리고 동일 평면에 속한 직선들의 소실점들은 모두 일직선상에 존재하게 되는데 이 선을 우리는 소실선(vanishing line)이라 부른다.

그림 5. 소실선 (vanishing line)


즉, 소실선(vanishing line)은 소실점들이 모여서 이루어진 직선이다. 하지만 소실선(vanishing line)을 좀더 근본적으로 이해하는 방법은 물리공간의 평면 전체를 카메라 영상에 투영했을 때 생성되는 극한의 경계선으로서 소실선을 이해하는 것이다. 직선을 이미지에 투영하면 소실점이 생성되고 평면을 이미지에 투영하면 소실선이 생성된다. 그리고 이러한 소실선의 대표적인 예로는 지평선, 수평선 등이 있다.


☞ "동일 평면에 속한 직선들의 소실점들은 일직선을 이룬다" 보다는 사실 "평행한 평면에 속한 직선들의 소실점들은 일직선을 이룬다"가 보다 정확한 표현이다. 만일 두 평면이 서로 평행이면 영상에서 이들은 동일한 소실선을 갖는다. 따라서 평행한 평면에 속하는 모든 직선들의 소실점들은 모두 동일한 소실선 상에 존재한다.


☞ (속한 평면에 관계없이) 모든 평행한 직선들은 동일한 소실점을 갖는다. 그리고 모든 평행한 평면들은 동일한 소실선을 갖는다.


☞ 카메라 광학축(optical axis)에 대한 소실점은 이미지의 주점(principal point)이다. 따라서 카메라 광학축과 평행인 모든 직선들에 대한 소실점은 이미지의 주점과 일치한다.


소실점들이 일직선을 이루는 성질은 직선들이 모두 동일한 또는 서로 평행한 평면에 속할 경우에만 성립하며 그 예는 아래 그림을 통해 확인할 수 있다.


그림 6. 출처: "Video Compass", ECCV'02



3. 기하학적 이해


앞서 설명하였듯이 평면 전체를 이미지에 투영하면 소실선이 생성되고 이 평면에 속한 직선을 이미지에 투영하면 소실점이 생성된다. 그리고 이 소실점은 평면의 소실선 위에 존재한다. 따라서 소실선의 생성 원리를 이해하면 소실점의 원리도 자연히 설명된다.


기하학적으로 봤을 때, 어떤 평면에 대한 소실선(vanishing line)은 이 평면과 수평이고 카메라 원점을 지나는 평면이 이미지 평면과 만나서 생기는 교선이다.


예를 들어 지면에 대한 소실선을 생각해 보자. 그림과 같이 카메라 원점(C)을 지나면서 지면과 수평인 평면이 이미지 평면과 만나 생기는 교선을 L이라 하자. 그러면 L 상에 있는 점들(p)은 지면과 평행인 평면상에 있기 때문에 아무리 투영선(Cp)을 확장하여도 지면과 만날 수는 없다. 즉, 지면 위의 점들은 이미지에서 L 또는 L보다 높은 지점으로는 결코 투영될 수 없다. 하지만 한 픽셀(pixel)이라도 L보다 아래쪽에 있는 점들은 언젠가는 지면과 만나는 점이 존재한다. 즉, 지면은 이미지에 L 이하의 영역으로 투영되고 L은 투영 영역의 경계선 즉, 소실선이 된다.


그림 7. 소실선의 기하학적 원리


소실점(vanishing point)도 마찬가지이다. 지면 위의 한 직선을 이미지에 투영해 보면 직선을 무한히 확장하였을 경우 결국 소실선(L) 상의 어느 한 점으로 수렴하게 됨을 쉽게 상상할 수 있다.



4. 소실선과 카메라의 자세추정


그림 7에서 발견할 수 있는 재미있는 사실 하나는 영상에서 소실선(L)의 위치는 카메라의 높이(h)와는 무관하게 결정된다는 점이다. 즉, 예를 들어 카메라를 삼각대에 고정시키고 땅 위에서 사진을 찍으나 100m 높이의 빌딩 위에서 찍으나 사진에 맺히는 지평선(수평선)의 위치는 모두 동일하다. 이를 좀더 일반화하면 다음과 같다.


영상에서 소실선의 위치는 카메라의 평행이동과는 무관하며 오직 카메라의 자세(3D 회전)에만 영향을 받는다.


그리고 영상에서 소실선의 위치를 알면 캘리브레이션을 하지 않고도 카메라의 팬(pan), 틸트(tilt), 롤(roll)을 알아낼 수 있다. 구체적인 설명에 앞서 먼저 카메라의 팬(pan), 틸트(tilt), 롤(roll)을 아래 그림과 같이 정의한다.


그림 8. 카메라의 팬, 틸트, 롤의 정의


즉, 틸트(tilt)는 광학축이 지면과 수평이면 0, 위쪽을 보면 +, 아래쪽을 보면 -, 팬(pan)은 정면을 기준으로 왼쪽이 +, 오른쪽이 -, 롤(roll)은 카메라가 좌우방향으로 똑바로 서 있으면 0, 왼쪽으로 기울면 +, 오른쪽으로 기울면 -로 정의한다.


☞ 용어의 일관성을 위해서는 팬, 틸트, 롤 대신에 피치(pitch), 롤(roll), 요(yaw)를 사용하는게 맞겠으나 직관적으로 이해하기 쉽도록 팬, 틸트, 롤이란 용어를 사용한다. 참고로 틸트는 pitch, 팬은 yaw에 대응된다.



A. 소실선과 롤(roll)


소실선을 이용해서 롤을 구하는 것은 비교적 간단하다. 카메라가 롤 방향으로 회전하면 영상에서 소실선 또한 롤(roll) 각도만큼 기울어진다. 따라서 소실선의 기울어진 각을 측정하면 카메라의 롤(roll)이 구해진다.


직관적으로는 영상에서 소실선의 기울어진 각도가 카메라의 롤(roll)이지만 이를 수치적으로 계산해 보면 다음과 같다. 소실선 상의 임의의 두 점의 픽셀 좌표를 (x1, y1), (x2, y2), 카메라의 초점거리를 fx, fy라 하면 카메라의 롤(roll)은 다음과 같이 계산된다 (아래 그림 예는 roll이 -인 경우이다).


 --- (1)


그림 9. 소실선을 이용한 roll의 계산



B. 소실선과 틸트(tilt)


소실점을 이용한 카메라 틸트(tilt)의 계산은 앞서 영상의 기하학적 해석 - 카메라의 틸드(tilt) 구하기 글에서 이미 설명한 바 있다. 여기서는 앞서 내용을 소실선으로 용어를 바꾸어 다시 적어본다.


이미지에서 소실선의 y좌표를 vy, 주점을 (cx, cy), 카메라의 y축 방향 초점거리를 fy라 하면 카메라의 틸트(tilt)는 다음과 같이 계산된다.


 --- (2)


단, 식 (2)는 카메라의 롤(roll)이 없는 경우에서 한해 성립한다. 만일 카메라의 roll이 0이 아닌 경우에는 소실선이 기울어지기 때문에 소실선의 y좌표 대신에 이미지 주점과 소실선 사이의 수직거리 d(필셀단위)를 이용한다. 이 때, 카메라의 틸트는 다음과 같이 계산된다 (틸트의 부호는 이미지에서 주점이 소실선 아래면 -, 소실선 위면 +로 설정).


--- (3)


그림 10. 소실선을 이용한 tilt의 계산


그런데, 만일 카메라의 초점거리가 fx ≠ fy로 x축, y축 방향이 다르게 주어진 경우에는 f = (fx + fy)/2로 사용하거나 또는 픽셀단위가 아닌 정규 이미지 평면에서의 정규화된 수직거리를 이용해서 틸트를 계산할 수 있다. 즉, 정규 이미지 평면에서 주점인 (0, 0)과 소실선 사이의 수직거리를 d_n라면 카메라의 틸트는 tan-1(d_n)로 계산된다.



C. 소실선과 팬(pan)


카메라의 팬(pan)은 틸트(tilt)나 롤(roll)과는 달리 절대적인 기준(원점)을 잡기가 애매하다. 따라서 여기서는 이미지 상의 물체(직선)와 실제 카메라 광학축 방향과의 상대적인 pan각을 구하는 문제로 접근한다 (top-view를 기준으로 했을 때의 사잇각).


즉, 예를 들어 아래 그림과 같이 철길에 대한 사진이 얻어졌을 때 사진을 획득할 당시의 카메라의 광학축 방향과 선로 방향 사이의 pan각을 구하는 것이 목적이다.


그림 11. 측면에서 촬영된 선로


그림 11과 같이 카메라의 원점을 C, 이미지의 주점을 P, 소실점을 V, 초점거리를 f, 주점에서 소실선에 내린 수선의 발을 H, 수직거리를 d라 하자 (카메라의 roll은 없다고 가정한다). 이 때, top-view에서 봤을 때 카메라 광학축의 방향은 CH, 선로의 방향은 CV에 대응된다. 따라서 카메라 광학축을 기준으로 한 선로의 pan각은 다음과 같이 계산된다.


 --- (4)


만일 초점거리가 fx ≠ fy로 따로 주어질 경우에는 f = (fx + fy)/2로 평균값을 사용하거나 또는 정규이미지 좌표를 사용해 보다 정밀한 pan 값을 얻을 수도 있다. 정규이미지 좌표를 사용할 경우 pan각은 다음과 같이 계산된다.


 --- (5)


☞ 수식 (4), (5)는 카메라의 roll이 없는 경우에 대해 성립하는 수식이지만 계산 과정 자체는 카메라의 roll이 있는 경우에도 동일하다. 즉, 소실선과의 수직거리 및 주점에서 소실선에 내린 수선의 발만 이미지에 맞게 계산해 주면 이후의 과정은 동일하다.



5. 소실점/소실선을 이용한 카메라 캘리브레이션


앞서까지 소실점/소실선을 이용한 카메라의 3D 자세측정 방법을 설명하였다. 그런데, 영상에서 소실점/소실선을 이용하면 이러한 외부 파라미터(extrinsic parameter) 뿐만 아니라 카메라의 내부 파라미터 추정도 가능하다. 즉, 카메라의 초점거리(f) 및 주점(cx, cy)의 추정이 가능하다.


소실점/소실선을 이용한 카메라 파라미터 추정의 구체적인 방법에 대해서는 다음의 두 논문을 참조한다.

  • Beardsley, Paul, and David Murray. "Camera calibration using vanishing points." BMVC92 (1992): 416-425.
  • Košecká, Jana, and Wei Zhang. "Video compass." Computer Vision—ECCV 2002 (2002): 476-490.


6. 기타 응용


차선, 기찻길, 빌딩, 복도, 상자 등 인간이 만든 많은 조형물에는 평행한 선들이 존재하기 때문에 이들의 소실점 정보를 이용하면 이미지 내에 존재하는 평면들과 카메라 사이의 기하학적 관계를 부분적으로 복원할 수 있다. 그리고 이러한 정보가 모여서 이미지에 대한 3D 복원 등의 응용이 가능해진다. 이 외에도 소실점으로부터 추출되는 기하학적 정보는 카메라 캘리브레이션 응용 뿐만 아니라 영상분석, 장면 분할, 차선인식, 자율주행, 물체 인식 등 폭넓은 응용을 갖는다.


by 다크 프로그래머


저작자 표시 비영리 변경 금지
신고
  • 하성주 2016.08.11 12:50 신고 ADDR 수정/삭제 답글

    마침 요새 소실점관련해서 보고있었는데 딱 올려주셨네요 ㅎㅎ 감사합니다

  • 잉여킹 2016.09.26 15:55 신고 ADDR 수정/삭제 답글

    늘 잘 보고 있습니다. 덕분에 영상처리 공부에 많은 도움이 되었습니다 ^^

  • 영상이란 2017.01.03 08:47 신고 ADDR 수정/삭제 답글

    깔끔한 정리 감사합니다

  • 알씨 2017.01.05 01:02 신고 ADDR 수정/삭제 답글

    소실점에 대해 찾고 있었는데, 많은 도움이 되었습니다.
    감사합니다^^

  • 공부하는학생 2017.01.14 18:19 신고 ADDR 수정/삭제 답글

    쌩큐쌩큐쌩큐쌩큐쌩큐쌩큐썡큐쌩큐쌩큐쌩큐 ㄴㅁ아ㅓㅁㄴ래ㅑㅁ낳ㅁ아아앍

  • 상자 2017.02.15 17:44 신고 ADDR 수정/삭제 답글

    안녕하세요 다크프로그래머님

    Vanishing point 의 이해에 관한 글 잘보았습니다. 저는 도로영역 검출을 위해 Vanishing point를 정확히 찾아내려고 하는 작업을 하고있습니다.
    한가지 질문 드릴 것은 Vanishing point를 구하는 구체적인 방법을 찾고 있는데 따로 정형화 된 방법은 없는것 같아서요(예를들어 캐니에지 방법이 구체적으로 나와 있는 것 처럼)
    구하는 방법에 대해서 조사를 하려면 관련 논문을 서베이 해볼 수 밖에 없는 걸까요? 찾아보니 유전자 알고리즘을 이용하는 것도 있고, greedy 알고리즘을 이용하는 방법도 있고 다양하게 있는걸로 조사 했는데.. 음.. 뭐라고할까 핵심 알고리즘에 대해 알고싶은데.. 제가 잘못 찾고 있는 걸까요?

    • BlogIcon 다크pgmr 2017.02.16 08:13 신고 수정/삭제

      vanishing point는 영상에서 차선 등의 직선 성분들을 추출해서 교점을 구해야 하지 않을까요..

  • 글적글적 2017.02.21 09:13 신고 ADDR 수정/삭제 답글

    안녕하세요 다크프로그래머님~ 많이배우고있고 항상 감사합니다~~

    Vanishing Point에 대하여 좀 더 깊게 알수있었습니다. 지금 Vanishing Point를 아는 상황에서 Vanishing Line을 찾으려 하는데 쉽지가 않네요.. Point로 Line을 찾을 수 있는 방법이 있을까요?? 관련 논문을 찾아봐도 잘 나오지 않는데 제가 잘못생각하고있는걸까요?

    • BlogIcon 다크pgmr 2017.02.21 10:37 신고 수정/삭제

      직선을 결정하기 위해서는 서로 다른 2 점이 필요하니 vanishing line을 결정하기 위해서는 서로 다른 두 vanishing point가 있으면 됩니다. 만일 vanishing point가 하나밖에 없다면 vanishing line은 수평하다고 가정하고 구할 수도 있습니다 (즉, 기울기가 0). 단, 이 경우 카메라가 지면에 대해 좌우로 기울어지지 않아야 합니다.

  • ㅇㅇ 2017.05.26 02:04 신고 ADDR 수정/삭제 답글

    저기 혹시 학교 조사 발표자료로 위의 내용을 사용 할 수 있을까요?

  • 김동현 2017.08.24 15:06 신고 ADDR 수정/삭제 답글

    좋은 자료 감사합니다.
    많은 도움이 되었어요^^