[영상 Geometry #2] Homogeneous Coordinates

영상처리 2013. 7. 6. 16:35

(3D 비전 geometry 2번째 파트 homogeneous coordinates 입니다)


2. Homogeneous Coordinates


먼저, 들어가기 앞서 http://blog.daum.net/shksjy/229 글을 읽어보기를 추천합니다. Homogeneous Coordinate에 대한 유래부터 의미, 특징, 활용까지 전반적으로 잘 정리되어 있습니다.



2.1 homogeneous coordinates


 Homogeneous 좌표는 쉽게 말하면 (x, y)를 (x, y, 1)로 표현하는 것입니다. 좀더 일반적으로 말하면 임의의 0이 아닌 상수 w에 대해 (x, y)를 (wx, wy, w)로 표현하는 것입니다. 즉, homogeneous 좌표계에서 스케일(scale)은 무시되며 (x, y)에 대한 homogeneous 좌표 표현은 무한히 많이 존재하게 됩니다. 마찬가지로, 3차원의 경우에는 (X, Y, Z)를 (X, Y, Z, 1) 나 (wX, wY, wZ, w)로 표현합니다.


역으로 homogeneous 좌표에서 원래의 좌표를 구하려면 끝 자리가 1이 되도록 scale을 바꾼 후 1을 때내면 됩니다. 즉, (x, y, α)는 (x/α, y/α, 1)과 같으며 따라서 실제 2D 좌표는 (x/α, y/α)이 됩니다.


Homogeneous 좌표가 활용되는 곳은 주로 컴퓨터 그래픽스(graphics) 쪽이나 3D 비전 쪽입니다. 그 이유는 homogeneous 좌표계를 사용하면 affine 변환이나 perspective(projective) 변환을 하나의 단일(single) 행렬로 표현할 수 있기 때문입니다. 이러한 변환에 대한 얘기는 3. 변환(Transformation) 파트에서 자세히 다룰 예정입니다.


우리가 흔히 알고 있는 기하학은 유클리디언 기하학(Euclidean geometry)이며 유클리디언 기하학에서는 데카르트 좌표계(Cartesian coordinate system)를 사용합니다. 우리가 익히 알고 있는 직교 좌표계가 바로 데카르트 좌표계입니다. 그런데 유클리디언 기하학 말고 projective geometry라는게 있습니다. 번역하면 사영 기하학 또는 투영 기하학 정도가 되겠네요. 이 projective geometry에서 사용하는 좌표계가 바로 homogeneous 좌표이며 homogeneous 좌표를 다른 말로 projective 좌표라고도 부릅니다.


여기서 한 가지 의문이 듭니다.


도대체 homogeneous 좌표가 투영 즉 프로젝션(projection)과 무슨 관계가 있길래 사영 기하학 (projective geometry)과 함께 연관되어 나오느냐 입니다.


왠지 이것을 이해하는 것이 핵심일 것 같은데 머리속에 잘 정리가 안되어 한참을 해맸습니다. 어쨌든 나름 다음과 같이 정리를 해 봅니다.


우리가 보는 카메라 영상은 3차원 공간에 있는 점들을 이미지 평면에 투영(projection)시킨 것입니다. 카메라 초점과 투영된 점을 연결하면 하나의 긴 투영선(projection ray)이 나옵니다 (그래픽스 쪽에서는 카메라 초점을 projection reference point라고 부릅니다). 그런데, 이 선 상에 있는 모든 점들은 모두 동일한 한 점으로 투영됩니다. 그렇다면, 이미지 평면상의 한 점에 대한 homogeneous 좌표라는 것은 이 점으로 투영되는 (ray 상의) 모든 점들을 한꺼번에 표현하는 방법이 아닌가 하는 생각이 들었습니다.


좀더 구체적으로 [컴퓨터 비전에서의 Geometry #1] 좌표계의 <그림 1>으로 돌아가서 정규 이미지 평면(normalized image plane) 상의 한 점 p' = (u, v)에 대해 생각해 보겠습니다. 실제 픽셀 이미지가 아닌 가상의 이미지 평면을 사용하는 이유는 1. 좌표계(coordinate system) 파트에서 설명했다시피 기하학적인 해석은 카메라 파라미터가 제거된 정규 이미지 평면에서 하는 것이 보다 용이하기 때문입니다.


어쨌든, 점 p' = (u, v)에 대한 한 homogeneous 좌표 표현은 (u, v, 1)입니다. 그런데, 잘 살펴보면 점 p'을 카메라 좌표계로 봤을 때의 3D 좌표도 (u, v, 1)임을 알 수 있습니다.


...!


카메라 좌표계 입장에서 보면 투영선 상에 있는 점들의 3D 좌표는 일반적으로 w(u, v, 1) = (wu, wv, w)가 됩니다. 그런데, 이것은 (u, v)의 일반적인 homogeneous 좌표 표현과 정확히 일치합니다.


이러한 관점에서 보면 homogeneous 좌표 (x, y, z)에서 (x/z, y/z)를 구하는 것은 projection, 반대로, (u, v)를 homogeneous 좌표 (wu, wv, w)로 표현하는 것은 inverse projection 과정으로 볼 수 있습니다.


Homogeneous 좌표 표현의 다른 한 장점은 무한대의 점을 유한 좌표로 표현할 수 있다는 것인데, (u, v) 방향으로 무한대의 점은 homogeneous 좌표로 (u, v, 0)으로 표현됩니다. 



2.2 사영 기하학(projective geometry)


사영 기하학, projective geometry가 뭘까요?


위키피디아에 보면 사영기하학은 투영 변환(projective transformations)에 대해 불변인 기하학적인 특성을 연구하는 것이라고 설명되어 있습니다.


구체적으로 이게 무슨 말인지 나름 이해한 방식으로 설명을 해 보겠습니다.


사영 기하학은 말 그대로 프로젝션(projection)을 다루는 기하학이며 homogeneous(projective) 좌표계를 사용합니다. 사영 기하학은 유클리디언 기하학처럼 다양한 차원에서 정의될 수 있으며 1차원 사영기하학은 2차원 평면에서 선으로의 투영 관계를, 2차원 사영 기하학은 3D 공간에서 평면으로의 투영을, 3차원 사영 기하학은 4차원 공간에서 3차원 공간으로의 투영 관계를 설명하는 기하학입니다. 물론 그래픽스나 3D 비전에서 관심을 갖는 것은 2차원 사영 기하학입니다.


2차원 사영 기하학에서 두 homogeneous 좌표 (x, y, 1), (2x, 2y, 2)는 서로 같습니다. 왜냐하면 두 점 모두 동일한 한 점 (x, y)로 투영되기 때문입니다.


사영 기하학에서는 길이(length), 각도(angle), 평행성(parallelism)이 보존되지 않습니다. 이는 3D 공간의 물체를 2D 영상에 투영시켜 보면 쉽게 확인할 수 있을 것입니다.


여기서 평행성이 보존되지 않는다는 것에 상당히 재미있는 점이 있습니다. 우리가 유클리디언 기하학에서 익히 알고 있는 사실은 평행한 두 선(line)은 결코 만나지 않는다 입니다. 그런데, 사영 기하학에서는 평행한 두 선의 교점을 구할 수 있습니다. 우리가 이미지에서 흔히 보는 vanishing point가 바로 그 교점입니다.


그림 출처: 위키피디아


사영 기하학에서 보존되는 것은 type입니다. 즉, 직선은 직선으로 투영되고 곡선은 곡선으로 투영됩니다. 물론 직선 중에는 한 점으로 투영되는 경우도 있을 수 있겠습니다. 또 하나 보존되는 것은 포함관계입니다.


어쨌든 컴퓨터 비전에 관련된 부분은 이 정도로 정리가 되는 것 같습니다.


---------------


아래 추가적인 내용은 사영기하학 중에서 알아두면 유용한 내용 부분입니다.


직선의 방정식 ax + by + c = 0을 homogeneous 형태로 변환하면 ax + by + cw = 0이 됩니다 (변환 방법은 http://blog.daum.net/shksjy/229 참조). 여기서 ax + by + cw = 0은 직선 ax + by + c = 0 상의 점으로 투영되는 homogeneous 좌표 (x, y, w)들이 만족해야 하는 식을 나타냅니다. 즉, ax + by + c = 0에 대응되는 homogeneous 좌표계 상에서의 방정식입니다.


u = [a, b, c]T, p = [x, y, w]T라면 위 homogeneous 직선방정식은 uTp = 0 또는 pTu = 0과 같이 표현할 수 있습니다. 여기서 u는 직선을 나타내고 p는 직선상의 점을 나타냅니다. 즉, 어떤 점 p가 직선 u 상에 놓일 (혹은 직선 u가 점 p를 지날) 필요충분 조건은 uTp = 0입니다.


참고로, 여기서 ax + by + cw = 0은 homogeneous 좌표계 상에서는 평면의 방정식이긴 하지만 결과적으로는 직선으로 투영(projection)되기 때문에 직선방정식이라 치는 것입니다.


어쨌든 직선방정식을 uTp = 0과 같은 형태로 표현하면 여러 재미있는 연산(해석)이 가능해집니다.


먼저, 두 직선 u1, u2의 교점은 p = u1×u2가 됩니다 (×는 벡터의 외적(cross product)). 그 이유는 u1T(u1×u2) = 0, u2T(u1×u2) = 0이기 때문입니다.


이를 이용하면 두 직선 a1x + b1y + c1w = 0과 a2x + b2y + c2w = 0의 교점은 u1×u2 = (b1c2-b2c1, a2c1-a1c2, a1b2-a2b1)이 됩니다. 따라서 원래 유클리디언 직선에서의 교점은 ((b1c2-b2c1)/(a1b2-a2b1), (a2c1-a1c2)/(a1b2-a2b1))임을 알 수 있습니다.


또한 마찬가지 이유로 두 점 p1, p2를 지나는 직선의 방정식은 u = p1×p2가 됩니다.


즉, homogeneous 표현을 이용하면 두 직선의 교점 및 두 점을 지나는 직선의 방정식을 일반적으로 구할 수 있게 됩니다.


또한 직선 u를 변수로 놓고, 점 p를 상수로 놓으면 uTp = 0는 점 p를 지나는 모든 가능한 직선에 대한 식이 되어버립니다. ◇


-> 위 내용을 이해하기 위해서는 벡터의 외적(cross product)에 대한 이해가 필요합니다. 벡터의 외적에 대해서는 http://blog.naver.com/mindo1103/90103361104 글을 참조하면 잘 설명되어 있습니다. 간단히 설명하면 벡터의 외적 u × v 란 두 벡터 u, v에 의해 결정되는 평면에 수직이면서 그 크기가 u, v를 두 변으로 하는 평행사변형의 면적과 같은 벡터를 말합니다. 참고로, 벡터의 외적을 이용하면 세 점을 꼭지점으로 하는 삼각형의 면적을 손쉽게 구할 수 있습니다 (2D, 3D 모두 가능).



2.3 참고 자료


http://blog.daum.net/shksjy/229

위키피디아 Homogeneous coordinates

* Stan Birchfield, "An introduction to projective geometry (for computer vision)." Unpublished note, Stanford university (1998)


by 다크 프로그래머


'영상처리' 카테고리의 다른 글

[영상 Geometry #3] 2D 변환 (Transformations)  (72) 2013.07.08
[영상 Geometry #2] Homogeneous Coordinates  (18) 2013.07.06
[영상 Geometry #1] 좌표계  (63) 2013.07.06
TOF 카메라의 원리  (19) 2013.06.24
  • BlogIcon PartyLUV 2013.07.06 18:21 신고 ADDR 수정/삭제 답글

    저로선 참 어려운 정보네요~^^:;
    좋은 주말되세요!

    • BlogIcon 다크pgmr 2013.07.06 22:20 신고 수정/삭제

      제가 봐도 어렵네요 ^^; 아무래도 저도 공부하면서 정리하는 거라서 쉽지가 않습니다. 그나저나 PartyLUV님 블로그는 저로서는 딴세상이군요 @.@ 파티럽님도 좋은 주말 되세요.

  • anytime2736 2015.01.08 16:50 ADDR 수정/삭제 답글

    ' u = [a, b, c]T, p = [x, y, w]T ' 여기에서 저 윗첨자 T의 의미가 무엇인가요??

    • BlogIcon 다크pgmr 2015.01.08 20:44 신고 수정/삭제

      transpose(전치)를 의미합니다. [a,b,c]는 1행x3열, [a,b,c]T는 3행x1열 행렬이 됩니다.

  • anytime2736 2015.01.08 17:45 ADDR 수정/삭제 답글

    먼저, 두 직선 u1, u2의 교점은 p = u1×u2가 됩니다 (×는 벡터의 외적). 그 이유는 u1T(u1×u2) = 0, u2T(u1×u2) = 0이기 때문입니다.




    이를 이용하면 두 직선 a1x + b1y + c1w = 0과 a2x + b2y + c2w = 0의 교점은 u1×u2 = (b1c2-b2c1, a2c1-a1c2, a1b2-a2b1)이 됩니다. 따라서 원래 유클리디언 직선에서의 교점은 ((b1c2-b2c1)/(a1b2-a2b1), (a2c1-a1c2)/(a1b2-a2b1))임을 알 수 있습니다.
    =================================================================
    여기까지는 이해가 가능했습니다.
    하지만
    "또한 마찬가지 이유로 두 점 p1, p2를 지나는 직선의 방정식은 u = p1×p2가 됩니다."
    이 부분은 제가 이해가 좀 안됩니다. 두 점을 외적을 취한 다는것이 이해가 안되는데 설명좀 부탁드립니다...ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

    • BlogIcon 다크pgmr 2015.01.08 20:57 신고 수정/삭제

      u = p1×p2라 하면 외적의 성질(정의)에 의해 uTp1 = 0, uTp2 = 0이므로 u는 p1과 p2를 지나는 직선의 방정식이 됩니다.

  • rhoy 2015.03.24 17:07 ADDR 수정/삭제 답글

    ...!!
    소오오름~~!!
    눈 앞이 환해지고 머리 속이 개는 것 같네요.
    정말 무릎을 탁 쳤습니다.
    좋은 글 고맙습니다.

  • 교환법칙 2015.08.06 17:24 ADDR 수정/삭제 답글

    p1 = l1 X l2 (p1 : 교점, l1, l2 : 직선) 이 식이 성립한다고 햇는데, 교환법칙이 성립하지가 않습니다.
    아래와 같이 교점을 구해보면 서로 다른 좌표가 나오더군요. 어떻게 설명해야되는겁니까
    ((b1c2-b2c1)/(a1b2-a2b1), (a2c1-a1c2)/(a1b2-a2b1))

    • BlogIcon 다크pgmr 2015.08.06 21:28 신고 수정/삭제

      성립합니다. 다시 한번 확인해 보시기 바랍니다.. ((b1c2-b2c1)/(a1b2-a2b1), (a2c1-a1c2)/(a1b2-a2b1))에서 a1과 a2, b1과 b2, c1과 c2를 서로 바꾸어도 동일한 식이 됨을 쉽게 확인할 수 있습니다.

    • 교환법칙 2015.08.07 11:27 수정/삭제

      아 다시한번 확인해보니 성립이 하는군요!! 감사합니다.!

  • 뉴비 2017.09.06 22:02 ADDR 수정/삭제 답글

    안녕하세요 저는 토목공학은 전공하는 대학원생인데 신기하게 제가 필요한 지식이 있어서 검색 할때마다 다크 프로그래머님 블로그가 나오네요. 항상 많이 배우고 갑니다. 감사합니다

  • vision은처음 2017.09.11 16:43 ADDR 수정/삭제 답글

    외적이 뭔가 했더니, cross product 였군요. 감사합니다!

    • BlogIcon 다크pgmr 2017.09.11 18:00 신고 수정/삭제

      외적이란 용어가 모호할 수 있겠네요. 외적(cross product)라고 병기하는 형태로 본문을 수정했습니다. 감사합니다.

  • 대박 2018.08.30 11:59 ADDR 수정/삭제 답글

    도움 정말 많이 됐습니다
    진짜 이해하기 쉽게 설명해주시네요~~
    감사합니다

  • BlogIcon 이곰식 2019.03.25 12:55 신고 ADDR 수정/삭제 답글

    정리해서 올려주시니 정말 감사드립니다. 공부하는 학생으로서 정말 많은 도움 되네요! 꼼꼼히 정주행 중입니다!

  • BlogIcon 뉴트리노개미 2019.04.03 02:50 ADDR 수정/삭제 답글

    꼼꼼한 글 정말 감사합니다. 비전쪽 공부중에 난해한 말들이 나왔는데 (무한대의 점이 (x,y,0)이라던지, 벡터보고 line이라는데 유클리드좌표계에서 말이 안된다던지, 직선이 외적이라던지 등...) 여기서 드디어 해답을 찾고 가네요ㅜㅜ homogeneous coordinate가 단순히 뒤에 1을 덧붙인다고만 알고있어서 찾아볼 시도를 못하고있다가 이번 기회에 재대로 배우고 갑니다. 다시한번 감사합니다!