이미지 형성의 기하학
https://learnopencv.com/geometry-of-image-formation/
Geometry of Image Formation | LearnOpenCV #
In this post, we will explain the image formation from a geometrical point of view. Specifically, we will cover the math behind how a point in 3D gets projected on the image plane. This post is written with beginners in mind but it is mathematical in natur
learnopencv.com
위 글을 구글 번역기로 돌린 결과물
이미지 형성의 기하학
이 포스트에서는 기하학적인 관점에서 이미지 형성을 설명합니다.
특히 3D의 한 점이 이미지 평면에 투영되는 방법에 대한 수학을 다룰 것입니다.
이 게시물은 초보자를 염두에 두고 작성되었지만 본질적으로 수학입니다. 즉, 행렬 곱셈만 알면 됩니다.
설정
문제를 쉽게 이해하기 위해 방에 카메라가 배치되어 있다고 가정해 보겠습니다.
이 방의 3D 점 P가 주어지면 카메라로 찍은 이미지에서 이 3D 점의 픽셀 좌표(u, v)를 찾고 싶습니다.
이 설정에는 세 가지 좌표계가 있습니다. 살펴보겠습니다.
1. 세계 좌표계(World Coordinate System)
방에 있는 점의 위치를 정의하려면 먼저 이 방에 대한 좌표계를 정의해야 합니다. 두 가지가 필요하다
- Origin : 방의 모서리를 임의의 원점(0,0,0)으로 고정할 수 있습니다.
- X, Y, Z 축 : 바닥의 2차원을 따라 방의 X 및 Y 축을 정의하고 수직 벽을 따라 Z 축을 정의할 수도 있습니다.
위의 방법을 사용하여 X, Y 및 Z 축을 따라 원점으로부터의 거리를 측정하여 이 방에 있는 모든 점의 3D 좌표를 찾을 수 있습니다.
방에 부착된 이 좌표계를 세계 좌표계(World Coordinate System)라고 합니다. 그림 1에서는 주황색 축을 사용하여 표시됩니다. 축을 표시하려면 굵은 글꼴(예: X_w )을 사용하고, 점의 좌표를 표시하려면 일반 글꼴(예: X_w' )을 사용합니다.
이 방의 점 P를 생각해 봅시다. 세계 좌표계에서 P의 좌표는 (X_w, Y_w, Z_w)로 지정됩니다. 이 점의 X_w, Y_w, Z_w 좌표는 3개의 축을 따라 원점에서 이 점까지의 거리를 간단히 측정하여 찾을 수 있습니다.
2. 카메라 좌표계
이제 이 방에 카메라를 설치해 보겠습니다.
방의 이미지는 이 카메라를 사용하여 캡처되므로 이 카메라에 부착된 3D 좌표계에 관심이 있습니다.
카메라를 방의 원점에 놓고 X, Y 및 Z 축이 방의 X_w, Y_w 및 Z_w 축과 정렬되도록 정렬했다면 , 두 좌표계는 동일합니다.
그러나 이는 터무니없는 제한입니다. 우리는 카메라를 방의 아무데나 놓고 싶어하고 그것은 어디에서나 볼 수 있어야 합니다. 이 경우 3D 방(즉, 세계) 좌표와 3D 카메라 좌표 간의 관계를 찾아야 합니다.
카메라가 방의 임의의 위치(t_X, t_Y, t_Z)에 있다고 가정해 보겠습니다. 전문 용어로 카메라 좌표는 세계 좌표에 대해 (t_X, t_Y, t_Z)로 변환될 수 있습니다.
카메라가 임의의 방향을 보고 있을 수도 있습니다. 즉, 카메라가 세계 좌표계를 기준으로 회전한다고 말할 수 있습니다.
3D의 회전은 세 가지 매개변수를 사용하여 캡처됩니다. 세 가지 매개변수를 요, 피치 및 롤(yaw, pitch, and roll)로 생각할 수 있습니다. 3D의 축( 두 개의 매개변수)과 해당 축에 대한 각도 회전(하나의 매개변수)으로 생각할 수도 있습니다.
그러나 회전을 3x3 행렬로 인코딩하는 수학적 조작이 편리한 경우가 많습니다. 이제 3×3 행렬에는 9개의 요소가 있으므로 9개의 매개변수가 있지만 회전에는 3개의 매개변수만 있다고 생각할 수 있습니다. 그것이 사실이며, 이것이 바로 임의의 3×3 행렬이 회전 행렬이 아닌 이유입니다. 세부 사항으로 들어가지 않고 지금은 회전 행렬이 9개의 요소를 가지고 있음에도 불구하고 3개의 자유도를 갖는다는 것만 알아두십시오.
우리의 원래 문제로 돌아가십시오. 세계 좌표와 카메라 좌표는 회전 행렬 R와 3요소 이동 벡터 t로 연결됩니다.
그게 무슨 뜻이야?
월드 좌표계에서 좌표값(X_w, Y_w, Z_w)을 가지고 있던 점 P가 카메라 좌표계에서 다른 좌표값(X_c, Y_c, Z_c)을 갖게 됨을 의미합니다. 빨간색을 사용하여 카메라 좌표계를 표현하고 있습니다.
두 좌표 값은 다음 방정식으로 연결됩니다.
(1)
회전을 행렬로 나타내면 yaw, pitch, roll과 같은 다른 표현에 필요한 지루한 기호 조작 대신 간단한 행렬 곱셈으로 회전을 수행할 수 있습니다. 이것이 회전을 행렬로 나타내는 이유를 이해하는 데 도움이 되기를 바랍니다.
때때로 위의 표현은 더 간결한 형태로 작성됩니다. 3x1 변환 벡터는 3x3 회전 행렬의 끝에 열로 추가되어 외부 행렬(Extrinsic Matrix)이라고 하는 3x4 행렬을 얻습니다.
(2)
여기서, 외부 행렬 P는 다음과 같이 주어집니다.
(3)
동차 좌표(Homogeneous coordinates): 투영 기하학에서 우리는 종종 좌표에 추가 차원이 추가되는 재미있는 좌표 표현으로 작업합니다. 직교 좌표의 3D 점(X, Y, Z)은 동차 좌표에서 (X, Y, Z, 1)로 쓸 수 있습니다. 더 일반적으로, 동차 좌표(X, Y, Z, W)의 점은 직교 좌표의 점(X/W, Y/W, Z/W)과 동일합니다. 동차 좌표를 사용하면 유한 숫자를 사용하여 무한 수량을 나타낼 수 있습니다. 예를 들어, 무한대의 점은 동차 좌표에서 (1, 1, 1, 0)으로 나타낼 수 있습니다. 세계 좌표를 나타내기 위해 방정식 2에서 동차 좌표를 사용했음을 알 수 있습니다.
3. 이미지 좌표계
점 세계 좌표에 회전 및 변환을 적용하여 카메라의 3D 좌표계에서 한 점을 얻으면 이미지에서 점의 위치를 얻기 위해 이미지 평면에 점을 투영할 수 있는 위치에 있게 됩니다.
위 이미지에서 우리는 카메라 좌표계에서 좌표(X_c, Y_c, Z_c)가 있는 점 P를 보고 있습니다. 카메라 좌표계에서 이 점의 좌표를 모른다면 외부 행렬을 사용하여 세계 좌표를 변환하여 방정식 2를 사용하여 카메라 좌표계의 좌표를 얻을 수 있음을 상기하십시오.
그림 2는 단순 핀홀 카메라의 경우 카메라 투영을 보여줍니다.
광학 중심(핀 홀)은 O_c를 사용하여 표시됩니다. 실제로는 점의 반전된 이미지가 이미지 평면에 형성됩니다. 수학적 편의를 위해 센서에서 판독된 이미지는 반전을 보상하기 위해 180도 쉽게 회전할 수 있기 때문에 이미지 평면이 광학 중심 앞에 있는 것처럼 모든 계산을 수행합니다. 실제로는 이마저도 필요하지 않습니다. 독자 Olaf Peters는 댓글 섹션에서 다음과 같이 지적했습니다. “훨씬 더 간단합니다. 실제 카메라 센서는 맨 아래 행에서 역순으로(오른쪽에서 왼쪽으로) 읽은 다음 각 행에 대해 맨 아래에서 위로 읽기만 하면 됩니다. 이 방법으로 이미지가 자동으로 수직으로 형성되고 좌우가 올바른 순서로 형성됩니다. 따라서 실제로는 더 이상 이미지를 회전할 필요가 없습니다.”
이미지 평면은 광학 중심에서 거리 f(초점 거리)에 배치됩니다.
고등학교 기하학(유사한 삼각형)을 사용하여, 3D 점(Xc, Yc, Zc)의 프로젝트 이미지(x, y)를 표시할 수 있습니다.
(4)
위의 두 방정식은 다음과 같이 행렬 형식으로 다시 작성할 수 있습니다.
(5)
아래 표시된 행렬 K는 고유 행렬(Intrinsic Matrix)이라고 하며 카메라의 고유 매개변수를 포함합니다.
(6)
위의 단순 행렬은 초점 거리만 보여줍니다.
그러나 이미지 센서의 픽셀은 정사각형이 아닐 수 있으므로 두 개의 다른 초점 거리 f_x와 f_y를 가질 수 있습니다.
카메라의 광학적 중심(c_x, c_y)은 영상 좌표계의 중심과 일치하지 않을 수 있습니다.
또한 카메라 센서의 x축과 y축 사이에 약간의 스큐 감마가 있을 수 있습니다.
위의 모든 사항을 고려하면 카메라 매트릭스는 다음과 같이 다시 작성할 수 있습니다.
(7)
그러나 위의 식에서 x 및 y 픽셀 좌표는 이미지의 중심을 기준으로 합니다. 그러나 이미지로 작업하는 동안 원점은 이미지의 왼쪽 상단 모서리에 있습니다.
이미지 좌표를 (u, v)로 표현해 봅시다.
(8)
여기서,
(9)
요약
카메라 픽셀 좌표에 세계 좌표계의 3D 점을 투영하는 것은 세 단계로 수행됩니다.
- 3D 포인트는 두 좌표계 간의 회전 및 변환으로 구성된 외부 매트릭스(Extrinsic Matrix)를 사용하여 세계 좌표에서 카메라 좌표로 변환됩니다.
- 카메라 좌표계의 새로운 3D 포인트는 초점 거리, 광학 중심 등과 같은 내부 카메라 매개변수로 구성된 고유 매트릭스(Intrinsic Matrix)를 사용하여 이미지 평면에 투영됩니다.
이 시리즈의 다음 게시물에서는 카메라 보정에 대해 배우고 OpenCV의 기능을 사용하여 카메라 보정을 수행하는 방법에 대해 알아봅니다.