针孔相机的成像原理


之前一直对相机的原理有些模糊,这里记一个笔记,以免遗忘。

设相机坐标系下的点P(x,y,z)P(x,y,z)在相机成像平面上成的像为P(X,Y,Z)P^{'}(X^{'},Y^{'},Z^{'})

针孔相机成像原理

根据三角形的相似原理,可以得到如下式子:
Zf=XX=YYX=fZXY=fZY(1)\begin{gathered} \frac{Z}{f}=\frac{X}{X^{'}}=\frac{Y}{Y^{'}}\\ \begin{aligned} X^{'}&=&\frac{f}{Z}X\\ Y^{'}&=&\frac{f}{Z}Y \end{aligned} \end{gathered} \tag{1}

注意此时XX^{'}的单位是米,但是像素平面上的单位是像素。同时需要注意的一点是,成像平面的原点在成像平面的中点上,一般来说,成像平面的原点在像平面的右上角:
针孔相机成像原理
结合以上两点,我们对式(1)进行转化变为:
{u=αX+cxv=βY+cy\begin{gathered} \begin{cases} u=\alpha X^{'} + c_x\\ v=\beta Y^{'} + c_y \end{cases} \end{gathered}
其中u,vu,v是像素平面上的像素坐标单位是像素,α,β\alpha, \beta是统一尺度的因子,单位为像素/(毫)米。cx,cyc_x,c_y单位为像素,是平移坐标系的偏移量。

此时可以将相机平面下的3D坐标转化为像素平面上的坐标公式写为:
[uv1]=1Z[fx,0,cx0,fy,cy0,0,1][XYZ]\begin{bmatrix} u\\v\\1 \end{bmatrix}=\frac{1}{Z} \begin{bmatrix}{f_x},&{0},&{c_x}\\{0},&{f_y},&{c_y}\\{0},&{0},&{1} \end{bmatrix} \begin{bmatrix} X\\Y\\Z\end{bmatrix}

其中fxf_x表示αf\alpha f, fyf_y表示βf\beta f
由此我们便可以总结出将相机坐标系下的3D坐标转化到像素平面上的像素坐标需要先得到相机坐标系下3D点的归一化坐标[X/Z,Y/Z,1]T[X/Z,Y/Z,1]^T。然后乘上相机的内参矩阵:
K=[fx,0,cx0,fy,cy0,0,1] K=\begin{bmatrix}{f_x},&{0},&{c_x}\\{0},&{f_y},&{c_y}\\{0},&{0},&{1}\end{bmatrix}
就可以得到像素平面上的坐标值了。

相机畸变模型和校正方法


相机畸变模型和校正方法

先把公式摆在这里:
xdistorted=x(1+k1r2+k2r4+k3r6)ydistorted=y(1+k1r2+k2r4+k3r6)r2=x2+y2\begin{aligned} &x_{distorted}=x(1+k_1r^2+k_2r^4+k_3r^6)\\&y_{distorted}=y(1+k_1r^2+k_2r^4+k_3r^6)\\ &r^2=x^2+y^2 \end{aligned}

相关文章: