當我們用OpenCV相機標定函數去標定相機時,我們能得到一個相機的內部參數,簡稱“內參”。內參是一個\(3 \times 3\) 的矩陣,
\[A=\begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix}\]
其中\(c_x\)和\(c_y\)很容易理解,它們表示相機光軸在圖像坐標系中的偏移量,以像素為單位。但對於焦距\(f_x\)和\(f_y\)就不是很直觀了。為什么一個相機會出現兩個焦距呢?在我們習慣使用的相機針孔模型中,一個透鏡的焦距通常只有一個。然而我們不能用針孔模型去解釋這兩個內參中的焦距。但我們可以從透視規律來解釋這兩個焦距。
由相機拍攝得到的圖像是遵從線性透視規律的。也就是說,一個物體的的寬和高會隨着這個物體與相機間的距離增加而按比例變小。而對於一張矩形的圖片,一個物體的寬和高則會根據物體與相機的距離按不同的比例變小。而這個比例,就是根據相機的焦距得到的。現在我們再利用針孔模型推導出這個比例關系,
\[\frac{f} {d} = \frac{x} {w} = \frac{y} {h}\]
以上是當圖像是正方形時的關系,就是當\(f_x=f_y\)時的情況。其中f是相機的焦距,以像素為單位;d為物體到相機的距離,單位為米;x是物體在圖像中的寬度,w為物體的實際寬度;y是物體在圖像中的高度,而h是物體的實際高度。而對於一張矩形的圖像,則有
\[\frac{f_x} {d} = \frac{x} {w} \]
\[\frac{f_y} {d} = \frac{y} {h} \]
這就是相機內參有兩個焦距的原因了。