智慧交通day03-车道线检测实现02-1:相机校正
1. 相機標定的意義
我們所處的世界是三維的,而照片是二維的,我們可以把相機認為是一個函數,輸入量是一個場景,輸出量是一幅灰度圖。這個從三維到二維的過程的函數是不可逆的。
相機標定的一個目的是要找一個合適的數學模型,求出這個模型的參數,能夠近似從三維到二維的過程,使這個三維到二維的過程的函數找到反函數。
這個逼近的過程就是相機標定,我們用簡單的數學模型來表達復雜的成像過程。
由此可知,相機標定的一個目的就是建立像素坐標系和世界坐標系之間的關系。原理是根據攝像機的模型,由已知特征點的圖像坐標求解攝像機的模型參數,并求出成像的反過程,從而從圖像中恢復出空間點的三維坐標,達到三維重建的目的。
另外相機標定還可以進行圖像校正,由于透鏡的制造精度以及組裝工藝的偏差會引入畸變,導致圖形失真,所以我們可以求解畸變參數,對圖像進行去畸變。
2. 成像原理
在介紹相機標定之前,我們首先來看下相機的成像模型。也就是,現實物體上的一個點在相機采集到的圖像中所在的位置是怎么確定的。我們采用的模型是針孔模型,也就是小孔成像。
小孔成像是利用了光線直線傳播的原理。比如說,遠處有一棵大樹,而我們有個盒子,在這個盒子的對著大樹的那一面上用針尖戳一個小孔。我們任選這棵大樹上的任何的一個點,它都會向四周去反射無數條光線。但是因為光線是直線傳播的,所以這些光線要么沒有一條能進入盒子中,要么就只有一條光線是進入到這個盒子里面的。進入到盒子中的光線會在盒子里的一面上形成一個光點。這個光點跟大樹上的某個點是對應的,顏色也是一致的,這就建立了一對一的關系。如果我們把感光膠片或者感光的傳感器放在盒子里,就可以做成一個針孔相機來得到大樹的彩色圖像了。如下圖所示:
由于大樹上每個點反射的無數條光線只有一條進入到盒子中,所以圖像是很暗的。而加大孔徑,雖然可以提高圖像的亮度,卻會使物體上的某一個點會反射一小束光進入到相機里。這一小束光會在感光傳感器上形成一個光斑,而不是一個點;從而相機失去了物體與圖像上的點的一一對應關系,進而導致圖像模糊甚至無法成像。當然實際的針孔相機不可能是讓每個點只有一條光線進入相機。因為光具有波粒二象性,是可以衍射的,所以很小的針孔,也會導致圖像模糊。根據可見光的波長,理論計算的小孔最佳直徑是 0.25mm 左右,相應的光圈值大概是 f/200。
所以用一個直徑比針孔直徑大許多的凸透鏡來替代針孔。凸透鏡可以把物體上的一個點所反射的那一小束通過透鏡的光重新匯聚成一個點,這樣,不但圖像亮度增大了,而且物體和圖像上點的又可以一一對應起來了。這就是我們現在常用的相機的基本工作原理。
3. 相機成像模型
現在我們看下相機的成像模型,我們從下圖中直觀感受下:
下面我們介紹下成像過程中的四大坐標系:
下面我們進行一系列的變換,引入多個參數矩陣,實現從世界坐標系到像素坐標的轉換。已知一個現實世界中的物體點的在世界坐標系中的坐標為(Xw, Yw, Zw),經過相機拍攝得到圖片,在圖片上的像素坐標為(u , v )。假設在圖像坐標系中的坐標為( x , y ),在相機坐標系中的坐標為(Xc, Yc, Zc)。各個坐標之間的轉化流程如下圖所示:
3.1. 世界坐標系與相機坐標系之間的轉換
世界坐標系轉換到相機坐標系時不會產生形變,所以將世界坐標系進行剛體變換就可轉換為相機坐標系。三維空間中,當物體不發生形變時,而只進行旋轉平移的運動,就是剛體變換。空間中的一個坐標系總可以通過剛體變換,即平移和旋轉,就可以轉換為另一個坐標系,如下圖所示:
下面我們看下旋轉矩陣的計算,現在假設坐標系沿著z軸旋轉,如下圖所示:
則有:(假設其中x’,y’表示世界坐標系,x,y是相機坐標系)
3.2. 相機坐標系到圖像坐標系的轉換
從相機坐標系到圖像坐標系,是從3d到2d的過程,屬于透射投影關系:
3.3. 圖像坐標系到像素坐標系
像素坐標系和圖像坐標系都在成像平面上,只是各自的原點和度量單位不一樣。圖像坐標系的原點為相機光軸與成像平面的交點,通常情況下是成像平面的中點。圖像坐標系的單位是mm,屬于物理單位,而像素坐標系的原點在圖像的左上角,單位是pixel,也就是我們說的幾行幾列。如下圖所示:
所以這二者之間的轉換如下:
3.4. 總結
我們已經介紹了各個坐標系之間的轉換過程,但是我們想知道的是如何從世界坐標系轉換到像素坐標系,因此我們需要把上面介紹到的聯系起來,將三者相乘,可以把這三個過程和在一起,寫成一個矩陣:
4. 圖像畸變
我們在相機坐標系到圖像坐標系變換時談到透視投影。相機拍照時通過透鏡把實物投影到像平面上,但是透鏡由于制造精度以及組裝工藝的偏差會引入畸變,導致原始圖像的失真。因此我們需要考慮成像畸變的問題。透鏡的畸變主要分為徑向畸變和切向畸變兩類。
4.1. 徑向畸變
顧名思義,徑向畸變就是沿著透鏡半徑方向分布的畸變,產生原因是光線在原理透鏡中心的地方比靠近中心的地方更加彎曲,這種畸變在普通的鏡頭中表現更加明顯,徑向畸變主要包括桶形畸變和枕形畸變兩種。以下分別是枕形和桶形畸變示意圖:(從左到右依次是:正常無畸變,桶形畸變和枕形畸變)
4.2. 切向畸變
切向畸變是由于透鏡本身與相機傳感器平面(像平面)或圖像平面不平行而產生的,這種情況多是由于透鏡被粘貼到鏡頭模組上的安裝偏差導致。在相機傳感器和鏡頭不平行的情況下,因為存在夾角,所以光透過鏡頭傳到圖像傳感器上時,成像位置發生了變化,如下圖所示:
下圖顯示某個透鏡的切向畸變示意圖,大體上畸變位移相對于左下—右上角的連線是對稱的,這跟凸透鏡與傳感器之間的夾角有關:
徑向畸變和切向畸變模型中一共有5個畸變參數:k1、k2、p1、p2、k3,得到這五個參數,就可以進行圖像的去畸變。這些都屬于相機的內參。
5.相機標定的分類
相機標定方法一般分為三類,分為傳統的標定算法,自標定法和基于主動視覺的標定法。分別介紹如下:
-
傳統的標定算法:傳統的相機標定算法就是基于標定物的相機標定算法,在進行相機標定時,要通過專門指定的標定物來完成,此類方法是利用標定物上構建的已確定的物點坐標和與之對應的圖像點之間的聯系,借助一些數學方法,得到相機的內部和外部參數。它對標定物的要求有:標定物的特征部分與周圍環境存在較大的差別,特征容易分辨且提取方便,標定物具有較高的穩定性,也就是說它的特征不隨著相機位置的變換產生畸變。常見模板有棋盤格,圓形,三角形等。
-
?代表算法有Tsai標定法和直接線性變換法(DLT)等。
-
自標定法:該算法不使用標定物,而是依靠圖像點之間存在的關系,直接計算相機的參數。該算法只計算相機的內部參數的約束,不考慮相機系統的外部場景,所以方法靈活,應用范圍較廣,但是算法魯棒性較差,只適合精度要求較低的場合。
-
基于主動視覺的標定法:該算法是控制相機做一些特定的動作,比如說平移,旋轉,得到多張圖片,以此計算相機參數。使用比較廣泛的有兩類:一類是在三維空間中,讓相機作兩組純平移運動,進而求解相機的參數,第二類是控制相機繞光心軸旋轉,獲得相機的參數。此類方法優點是算法簡單,往往能夠獲得線性解,故魯棒性較高,缺點是系統的成本高、實驗設備昂貴、實驗條件要求高,而且不適合于運動參數未知或無法控制的場合。
總結
以上是生活随笔為你收集整理的智慧交通day03-车道线检测实现02-1:相机校正的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 下载Pytorch的自带数据集时报错=u
- 下一篇: 【Pytorch神经网络基础理论篇】 0