相机变换

摘录自

《视觉SLAM14讲》

https://blog.csdn.net/qq_41623632/article/details/138285193

https://www.songho.ca/opengl/gl_projectionmatrix.html

https://zhuanlan.zhihu.com/p/718895401

投影变换

camera1

Z(uv1)=(fx0cx0fycy001)(XYZ)=defKPZ\begin{pmatrix}u \\ v\\ 1 \end{pmatrix}=\begin{pmatrix}f_x &0&c_x\\0&f_y&c_y\\0&0&1 \end{pmatrix}\begin{pmatrix}X\\Y\\Z\end{pmatrix}\overset{def}{=}\bold{KP}

fx=fdXf_x=\frac{f}{dX}

ff单位m,cc单位像素,(u,v)(u,v)为像素坐标系坐标,像素坐标系以图像左上角为原点,uu向右为xx正方向,vv向下为yy正方向,KK为内参矩阵。

坐标变换

camera2

ZPuv=Z(uv1)=K(RPw+t)=Kwc ⁣Tw ⁣PZ\bold{P}_{uv}=Z\begin{pmatrix}u \\v\\1\end{pmatrix}=\bold{K}(\bold{R}\bold{P}_w+\bold{t})=\bold{K}{\,}_w^c\!\bold{T}{\,}^w\!\bold{P}

wc ⁣T{\,}_w^c\!\bold{T} 外参矩阵

wc ⁣T=(Rt){\,}_w^c\!\bold{T}=\begin{pmatrix}R &t \end{pmatrix}

w ⁣P=(xyz1){\,}^w\!\bold{P}=\begin{pmatrix}x\\y\\z\\1 \end{pmatrix}

OpenGL Projection Matrix OpenGL

camera2

PGL_PROJECTION=(2nrl0r+lrl002ntbt+btb000(f+n)fn2fnfn0010)\bold{P}_{GL\_PROJECTION}=\begin{pmatrix}\frac{2n}{r-l}&0&\frac{r+l}{r-l}&0\\0&\frac{2n}{t-b}&\frac{t+b}{t-b}&0\\0&0&\frac{-(f+n)}{f-n}&\frac{-2fn}{f-n}\\0&0&-1&0 \end{pmatrix}

使用相机参数构造投影矩阵:

1
2
3
4
[2 * fx / w, 0.0,          -(w - 2 * cx) / w,    0.0                            ],
[0.0, 2 * fy / h, -(h - 2 * cy) / h, 0.0 ],
[0.0, 0.0, far / (far - near), -(far * near) / (far - near) ],
[0.0, 0.0, 1.0, 0.0 ]

(xNDCyNDCzNDCwNDC)=PGL_PROJECTION(xyz1)\begin{pmatrix}x_{NDC}\\y_{NDC}\\z_{NDC}\\w_{NDC} \end{pmatrix}=\bold{P}_{GL\_PROJECTION}\begin{pmatrix}x\\y\\z\\1 \end{pmatrix}