視覺 SLAM 十四講
第 5 講 相機與影象
本節目標
1. 理解針孔相機的模型、內參與徑向畸變引數。
2. 理解一個空間點是如何投影到相機成像平面的。
3. 掌握 OpenCV 的影象儲存與表達方式。
4. 學會基本的攝像頭標定方法。
本講,我們要討論“機器人如何觀測外部世界”,也就是觀測方程部分。而在以相機為主的視覺 SLAM 中,觀測主要是指相機成像的過程。
我們在現實生活中能看到大量的照片。在計算機中,一張照片由很多個畫素組成,每個畫素記錄了色彩或亮度的資訊。三維世界中的一個物體反射或發出的光線,穿過相機光心後,投影在相機的成像平面上。相機的感光器件接收到光線後,產生了測量值,就得到了畫素,形成了我們見到的照片。
5.1 相機模型
相機將三維世界中的座標點(單位為米)對映到二維影象平面(單位為畫素)的過程能夠用一個幾何模型進行描述。這個模型有很多種,其中最簡單的稱為針孔模型。針孔模型是很常用,而且有效的模型,它描述了一束光線通過針孔之後,在針孔背面投影成像的關係。在本書中我們用一個簡單的針孔相機模型來對這種對映關係進行建模。同時,由於相機鏡頭上的透鏡的存在,會使得光線投影到成像平面的過程中會產生畸變。因此,我們使用針孔和畸變兩個模型來描述整個投影過程。
在本節我們先給出相機的針孔模型,再對透鏡的畸變模型進行講解。這兩個模型能夠把外部的三維點投影到相機內部成像平面,構成了相機的內參數。
5.1.1 針孔相機模型
現在來對這個簡單的針孔模型進行幾何建模。設 O − x − y − z 為相機座標系,習慣上我們讓 z 軸指向相機前方, x 向右, y 向下。 O 為攝像機的光心,也是針孔模型中的針孔。現實世界的空間點 P,經過小孔 O 投影之後,落在物理成像平面 O′ − x′ − y′ 上,成像點為 P ′。設 P 的座標為 , P ′ 為 ,並且設物理成像平面到小孔的距離為 f(焦距)。那麼,根據三角形相似關係,有:
其中負號表示成的像是倒立的。為了簡化模型,我們把可以成像平面對稱到相機前方,和三維空間點一起放在攝像機座標系的同一側,如圖 5-2 中間的樣子所示。這樣做可以把公式中的負號去掉,使式子更加簡潔:
整理得:
讀者可能要問,為什麼我們可以看似隨意地把成像平面挪到前方呢?這只是我們處理真實世界與相機投影的數學手段,並且,大多數相機輸出的影象並不是倒像——相機自身的軟體會幫你翻轉這張影象,所以你看到的一般是正著的像,也就是對稱的成像平面上的像。所以,儘管從物理原理來說,小孔成像應該是倒像,但由於我們對影象作了預處理,所以理解成在對稱平面上的像,並不會帶來什麼壞處。於是,在不引起歧義的情況下,我們也不加限制地稱後一種情況為針孔模型。
上式描述了點 P 和它的像之間的空間關係。不過,在相機中,我們最終獲得的是一個個的畫素,這需要在成像平面上對像進行取樣和量化。為了描述感測器將感受到的光線轉換成影象畫素的過程,我們設在物理成像平面上固定著一個畫素平面 o − u − v。我們在畫素平面得到了 P′ 的畫素座標: 。
畫素座標系通常的定義方式是:原點 o′ 位於影象的左上角, u 軸向右與 x 軸平行, v軸向下與 y 軸平行。畫素座標系與成像平面之間,相差了一個縮放和一個原點的平移。我們設畫素座標在 u 軸上縮放了 α 倍,在 v 上縮放了 β 倍。同時,原點平移了 。那麼, P ′ 的座標與畫素座標 [u; v]T 的關係為:
代入式(5.3)並把 αf 合併成 f_x,把 βf 合併成 f_y,得:
其中, f 的單位為米, α, β 的單位為畫素每米,所以 的單位為畫素。把該式寫成矩陣形式,會更加簡潔,不過左側需要用到齊次座標:
我們按照傳統的習慣,把 Z 挪到左側:
該式中,我們把中間的量組成的矩陣稱為相機的內參數矩陣(Camera Intrinsics) K。通常認為,相機的內參在出廠之後是固定的,不會在使用過程中發生變化。有的相機生產廠商會告訴你相機的內參,而有時需要你自己確定相機的內參,也就是所謂的標定。鑑於標定演算法業已成熟,且網路上能找到大量的標定教學,我們在此就不介紹了。
除了內參之外,自然還有相對的外參。考慮到在式(5.6)中,我們使用的是 P 在相機座標系下的座標。由於相機在運動,所以 P 的相機座標應該是它的世界座標(記為 ),根據相機的當前位姿,變換到相機座標系下的結果。相機的位姿由它的旋轉矩陣 R 和平移向量 t 來描述。那麼有:
注意後一個式子隱含了一次齊次座標到非齊次座標的轉換(你能看出來嗎?)。它描述了 的世界座標到畫素座標的投影關係。其中,相機的位姿 又稱為相機的外引數(Camera Extrinsics)。相比於不變的內參,外參會隨著相機運動發生改變,同時也是 SLAM中待估計的目標,代表著機器人的軌跡。
上式兩側都是齊次座標。因為齊次座標乘上非零常數後表達同樣的含義,所以可以簡單地把 Z 去掉:
但這樣等號意義就變了,成為在齊次座標下相等的概念,相差了一個非零常數。為了避免麻煩,我們還是從傳統意義下來定義書寫等號。
我們還是提一下隱含著的齊次到非齊次的變換吧。可以看到,右側的 表示把一個世界座標系下的齊次座標,變換到相機座標系下。為了使它與 K 相乘,需要取它的前三維組成向量——因為 最後一維為 1。此時,對於這個三維向量,我們還可以按照齊次座標的方式,把最後一維進行歸一化處理,得到了 P 在相機歸一化平面上的投影: