동차좌표계 (Homogeneous Coordinates) :: Geometry of Image Formation
https://darkpgmr.tistory.com/78 : 3D 비전 geometry 2번째 파트 homogeneous coordinates
먼저, 들어가기 앞서 http://blog.daum.net/shksjy/229 글을 읽어보기를 추천합니다.
Homogeneous Coordinate에 대한 유래부터 의미, 특징, 활용까지 전반적으로 잘 정리되어 있습니다.
homogeneous coordinates 이란
Homogeneous좌표는 쉽게 말하면 (x, y)를 (x, y, 1)로 표현하는 것입니다. (1x, 1y, 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차원 사영기하학은 2D 평면에서 선으로의 투영 관계를,
2차원 사영기하학은 3D 공간에서 평면으로의 투영을,
3차원 사영기하학은 4D 공간에서 3D 공간으로의 투영 관계를 설명하는 기하학입니다.
물론 그래픽스나 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