跳转到内容
新建笔记

相机成像坐标系:从世界点到像素

三套坐标分别表示什么

跳转到“三套坐标分别表示什么”
坐标记号意义
世界坐标Pw=(Xw,Yw,Zw)TP_w=(X_w,Y_w,Z_w)^T描述场景几何,原点由任务选择
相机坐标Pc=(Xc,Yc,Zc)TP_c=(X_c,Y_c,Z_c)^T以相机光心为参考,本文 z 轴朝前
像素坐标(u,v)(u,v)图像中的横、纵位置,单位为像素

本文采用常见相机投影约定:相机 x 向右、y 向下、z 向前。其他机器人或图形库可能不同,必须显式转换,不靠字母名称推断。

世界、相机、成像平面与像素坐标的几何关系参考图

定义 RcwR_{cw} 和 tcwt_{cw} 将世界坐标变到相机坐标:

Pc=RcwPw+tcw.P_c=R_{cw}P_w+t_{cw}.

R 是旋转矩阵,满足 RTR=IR^TR=I、det⁡R=1\det R=1;t 与三维点使用相同长度单位。相机在世界中的位置不是一般意义上的 t,而是:

Cw=−RcwTtcw,C_w=-R_{cw}^{T}t_{cw},

因为把相机光心代入时 Pc=0P_c=0。反向变换是 Pw=RcwT(Pc−tcw)P_w=R_{cw}^{T}(P_c-t_{cw})。

针孔模型利用相似三角形,先得到归一化成像坐标:

xn=Xc/Zc,yn=Yc/Zc.x_n=X_c/Z_c,\qquad y_n=Y_c/Z_c.

这里要求深度不为零;本文朝前约定下,可见的前方点通常满足 Zc>0Z_c>0。不同深度但位于同一条光线上的点可投影到相同像素,所以单个像素不能唯一恢复三维位置。

忽略像素轴斜切,内参矩阵为:

K=[fx0cx0fycy001],u=fxxn+cx,v=fyyn+cy.K=\begin{bmatrix}f_x&0&c_x\\0&f_y&c_y\\0&0&1\end{bmatrix},\qquad u=f_xx_n+c_x,\quad v=f_yy_n+c_y.

fx,fyf_x,f_y 以像素为单位,(cx,cy)(c_x,c_y) 是主点;主点并不必然等于图像几何中心。合并三步:

Zc[uv1]=K [Rcw∣tcw][Pw1].Z_c\begin{bmatrix}u\\v\\1\end{bmatrix} =K\,[R_{cw}\mid t_{cw}]\begin{bmatrix}P_w\\1\end{bmatrix}.

这个等式使用理想针孔模型。真实镜头还需要考虑径向/切向等畸变;应先约定输入点是否已去畸变,再使用投影公式。OpenCV 成像与标定模型

相机点 (1,0,5)(1,0,5)、fx=fy=800f_x=f_y=800、主点 (320,240)(320,240),得到 u=800/5+320=480u=800/5+320=480、v=240v=240。长度同时从米改为毫米时,Xc/ZcX_c/Z_c 不变;混用单位则会使外参和点的位置不一致。