Camera Projection

홍성민·2025년 4월 10일
0

Camera Calibration & ROS

목록 보기
4/4

Pw=[xw,yw,zw],Pc=[xc,yc,zc],Pi=[u,v]P_w = [x_w, y_w, z_w], P_c=[x_c, y_c, z_c], P_i = [u, v]는 각각 World, Camera, Image(Pixel) coordinate를 의미한다.

우리가 원하는 정보는 world에서 image coordinate로 변환시키는 것이다.
즉, PwP_w에서 PcP_c로 가기 위해서는 extrinsic parameter가 필요하다.

World to Camera

extrinsic parameter는 rotation, translate으로 구성되어 있으며 식은 다음과 같다.

Pc=RPw+T=[RT][xwywzw1]=[xcyczc1]P_c = RP_w + T = [R|T] \begin{bmatrix}x_w\\y_w\\z_w\\1\end{bmatrix}=\begin{bmatrix}x_c\\y_c\\z_c\\1\end{bmatrix} 이다.

먼저 rotation은 각각 Rx(a),Ry(B),Rz(r)R_x(a), R_y(B), R_z(r)로 구성되어 있으며 이는 로드리게스 공식을 유도하면 값이 나오게 된다.

R=Rz(r)Ry(B)Rx(a)R=R_z(r)R_y(B)R_x(a)RR을 바로 표현할 수 있는데 어떤 좌표계를 먼저 돌릴 것인지에 따라 값이 변화하기 때문에 사용자에 맞게끔 식을 변환시켜도 무방하다. (roll, pitch, yaw값을 생각하면 된다.)

다음 translate은 [x+xiy+yiz+zi]\begin{bmatrix}x+x_i\\y+y_i\\z+z_i\end{bmatrix}와 같이 어떠한 점(벡터)를 이동시키는 것을 의미한다.

따라서, 위를 정리하면 Pc=RPw+TP_c=RP_w+T가 된다.
이는 어떠한 시스템(라이다, 레어더 등등)의 기준으로있는 월드 좌표계 기준으로 있는 어떠한 포인트를 카메라 좌표계로 변환시키는 것을 의미한다.
따라서, 카메라를 기준으로 x, y, z축을 기준으로 얼마나 회전했는지와 이동했는지를 구하게 되면 각각의 parameter를 구하여 대입하면 된다. (이때의 유의사항은 각 시스템 혹은 센서마다 정의하는 축이 다를 수 있으니 확인해야한다.)

또한, PC=RPw+TP_C=RP_w+T로 표현할 수 있지만 RTRTRR의 마지막 열에 translate vector를 추가하면 된다. 그러면, RTRT는 3x4행렬이 나오도록 하면 된다.


Camera to Image

우리는 위 그림의 World origin에서 Camera Frame까지 변환시킨 것이다.
하지만 이는 Camera Frame에 상에 맺힌 것일뿐 Image Frame으로의 projection을 시키지 못했다.

따라서 이때 필요한 정보는 intrinsic parameter가 필요하다. 이는 카메라의 focal length(초점 거리)와 principal point(주점)이다.

먼저 우리는 카메라 좌표계에 PPzc=1z_c=1인 image plane으로 변환시킨 다음 intrinsic parameter를 곱해주게 된다.

normalized image plane은 기존의 camera coordinate에서 zc=1z_c=1로 만들기 위해 각 element를 zcz_c로 나눠주기만 하면 된다. 이는 비율을 유지한채로 3D점을 2D점으로 mapping시키는 것이기 때문에 위 그림에서 zcz_c가 앞과 뒤라고 생각해주면 된다.

따라서, 이를 다시 픽셀 좌표계 즉 이미지 좌표계로 변환시키기 위해서는 focal length와 principal point의 값이 들어있는 intrinsic parameter가 있는 matrix를 곱해주면 된다.

fx,fyf_x, f_y는 x는 horizontal, y는 vertical을 의미하고 fov값을 알면 단순 피타고라스 정리로 구할 수 있다.

cx,cyc_x, c_y는 image coordinate에서의 중심 값으로 만약 1920(w)x1080(h)의 resolution을 가진다면 c_x= h / 2, c_y = w / 2가 된다.
(위 그림에서는 영상 좌표계에서 x와 y의 축 값의 이름을 바꾸는 경우가 있는데 대체적으로 vertical값이 x, horizontal값이 y로 볼 수 있다.)

profile
할거면 똑바로 하고 아님 말자

0개의 댓글