針孔相機模型
1. 坐標系介紹
在視覺應用中,總共有四個坐標系需要了解,分別是:像素坐標系(p)、圖像坐標系(i)、相機坐標系(c)、世界坐標系(w)。而相機就是將世界坐標系映射到了像素坐標系。
像素坐標系
圖像在相機內部的儲存形式類似像素坐標系,如下圖所示,其中一個像素的坐標為

$(u_{i}, v_{i})$,單位是(像素)

圖像坐標系
將像素坐標系的中心平移到中心,就得到了圖像坐標系,除了原點位置不同,單位也不同,圖像坐標系的單位是(m或者mm),坐標系如下圖所示:

設圖像坐標系的原點為$O_{i}(u_{0}, v_{0})$,相機感光元件中每個像素點的尺寸為$dx*dy$,兩坐標系之間的關系可表示為
$$\begin{cases}u = \frac{x}{dx} + u_{0}\\v=\frac{y}{dy}+v_{0}\end{cases}$$
將其寫成矩陣形式為:
$$\begin{bmatrix}u \\v \end{bmatrix}=\begin{bmatrix}\frac{1}{dx}&0\\0&\frac{1}{dy}\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}+\begin{bmatrix}u_{0}\\v_{0}\end{bmatrix}$$
將偏移項納入乘積項,轉化為齊次坐標形式:
$$\begin{bmatrix}u\\v\\1 \end{bmatrix}=\begin{bmatrix}\frac{1}{dx}&0&0\\0 &\frac{1}{dy}&0\\0&0&0\end{bmatrix}\begin{bmatrix}x\\y\\1\end{bmatrix}+\begin{bmatrix}u_{0}\\v_{0}\\1\end{bmatrix}=\begin{bmatrix}\frac{1}{dx}&0&u_{0}\\0&dy&v_{0}\\0&0&1\end{bmatrix}\begin{bmatrix}x\\y\\1\end{bmatrix}$$
相機坐標系
相機坐標系的z軸和圖像坐標系的z軸重合,x軸和y軸平行且同方向,相機坐標系原點$O_{c}$和圖像坐標系原點$O_{i}$連線的距離是焦距$f$(注意這里的$f$單位為m或mm),相機坐標系中的一點$B(x_{c},y_{c},z_{c})$成像到圖像坐標系$P(x,y)$,過程如下::

根據三角形相似可得:
$$\frac{f}{z_{c}}=\frac{x}{x_{c}}=\frac{y}{y_{c}}$$
即:
$$x=\frac{fx_{c}}{z_{c}},y=\frac{fy_{c}}{z_{c}} $$
相機坐標系轉化為圖像坐標系的齊次形式為:
$$\begin{bmatrix}x\\y\\1\end{bmatrix}=\begin{bmatrix}\frac{f}{z_{c}}&0&0&0\\0&\frac{f}{z_{c}}&0&0\\0&0&\frac{1}{z_{c}}&0\end{bmatrix}\begin{bmatrix}x_{c}\\y_{c}\\z_{c}\\1\end{bmatrix}$$
圖像的畸變
這是相機坐標系到理想的圖像坐標系的轉化,因為我們默認各個坐標系的變換是線性的。但實際上由於相機鏡頭中的鏡片因為光線的通過產生不規則的折射,總是存在鏡頭畸變的。畸變的引入使得成像模型中的幾何變換關系變為非線性。
圖像的畸變有很多,但通常主要考慮兩種:徑向畸變和切向畸變。
徑向畸變:正中心位置的畸變最小,隨着半徑的增大,畸變增大。徑向畸變可以分為枕形畸變和桶形畸變

徑向畸變公式為:
$$\begin{cases}x_{dr}=x(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})\\y_{dr}=y(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})\end{cases}$$
其中$(x,y)$為理想坐標,$(x_{dr},y_{dr})$為畸變后的坐標,$r^{2}=x^{2}+y^{2}$
切向畸變:在透鏡與成像平面不平行時就會產生,類似於透視變換。

切向畸變公式為:
$$\begin{cases}x_{dt}=x+2p_{1}xy+p_{2}(r^{2}+2x^{2})\\y_{dt}=y+p_{1}(r^{2}+2y^{2})+2p_{2}xy\end{cases}$$
將徑向畸變和切向畸變效果疊加,可得:
$$\begin{cases}x_{distorted}=x(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})+2p_{1}xy+p_{2}(r^{2}+2x^{2})\\y_{distorted}=y(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})+p_{1}(r^{2}+2y^{2})+2p_{2}xy\end{cases}$$
$(k_{1},k_{2},k_{3},p_{1},p_{2})$這五個為畸變參數,畸變參數的一般順序是k1,k2,p1,p2,k3。
世界坐標系
世界坐標系與相機坐標系坐標軸不一定平行或重合,它們之間可以通過剛體變換互相轉換,也就是只改變物體的空間位置(平移)和朝向(旋轉),而不改變物體的形狀。用旋轉矩陣$R$和平移向量$T$可以表示這種變換,如圖所示:


平移矩陣T為:
$$T=\begin{bmatrix}t_{x}\\t_{y}\\t_{z} \end{bmatrix}$$
因此,世界坐標系轉化為相機坐標系的變換為:
$$\begin{bmatrix}x_{c}\\y_{c}\\z_{c} \end{bmatrix}=\begin{bmatrix}x_{w}\\y_{w}\\z_{w}\end{bmatrix}+T\Rightarrow\begin{bmatrix}x_{c}\\y_{c}\\z_{c}\\1\end{bmatrix}=\begin{bmatrix}R & T \\0 & 1 \end{bmatrix}\begin{bmatrix}x_{w}\\y_{w}\\z_{w}\\1 \end{bmatrix}$$
2. 相機的內參和外參
根據1中幾個坐標系的轉化,可以得到世界坐標系轉化為像素坐標系:
$$\begin{bmatrix}u\\v\\1\end{bmatrix}=\begin{bmatrix}\frac{1}{dx}&0&u_{0}\\0&\frac{1}{dy}&v_{0}\\0&0&1 \end{bmatrix}\begin{bmatrix}\frac{f}{z_{c}} &0&0&0 \\0 & \frac{f}{z_{c}}&0&0\\0&0&\frac{1}{z_{c}}&0 \end{bmatrix}\begin{bmatrix}R&T \\0&1 \end{bmatrix}\begin{bmatrix}x_{w} \\ y_{w} \\z_{w} \\ 1 \end{bmatrix}=\underbrace{\begin{bmatrix}\frac{f_{x}}{z_{c}} & 0&\frac{u_{0}}{z_{c}}&0 \\0&\frac{f_{y}}{z_{c}} & \frac{v_{0}}{z_{c}}&0\\0&0&\frac{1}{z_{c}}&0 \end{bmatrix}}_{intrinsics}\underbrace{\begin{bmatrix}R & T \\0 & 1 \end{bmatrix}}_{extrinsics}\begin{bmatrix}x_{w}\\y_{w} \\z_{w} \\1 \end{bmatrix}$$
注意這里的fx和fy單位是像素。公式中的內參不含畸變參數。
相機標定
相機標定的目的就是要得到相機內參(包含畸變參數)和外參。最重要的還是內參(包含畸變參數),因為外參跟攝像機和拍攝物體的相對位置有關,所以不同圖像的外參都不一樣。
有了相機內參(包含畸變參數)后,我們就可以對相機拍攝的圖像進行畸變校正。
參考資料:
https://blog.csdn.net/qq_36342854/article/details/88933308
https://blog.csdn.net/baidu_38172402/article/details/81949447
https://blog.csdn.net/heiheiya/article/details/96151958
