>>>文章索引<<<
相機標定(一)-原理及內參、外參
相機標定(二)-畸變校正,張正友標定法
相機標定(三)-相機成像模型
1 人眼&相機結構
1.1 類比
類比來說,相機就是計算機的“眼睛”:
1.2 成像
本質上來說,圖像是真實世界場景中在二維平面(成像平面)的投影,它記錄了兩類信息:
- 幾何信息:位置、點、線等;
- 光度信息:強度、色彩。
2 相機成像模型
- 小孔成像模型(Pinhole camera model)
- 正交投影(Orthographic projection)
- 縮放正交投影(Scaled orthographic projection)
- 透視投影(Perspective projection)
2.1 小孔成像模型(Pinhole camera model)
數學表示,具體也可參考博客:
一般來說,我們使用右手座標系:
小孔成像模型實際上是透視投影(perspective projection)的一種最簡單的形式。假設我們要將真實世界中的三維點(X,Y,Z)T投影爲二維圖像上的點p=(x,y)T,則有:
{ZX=fxZY=fy⇒{x=fZXy=fZY(1)
2.2 正交投影(Orthographic projection)
- 3D場景距離相機無限遠;
- 所有投影線均平行於光軸。
則有x=X,y=Y。
2.3 縮放正交投影(Scaled orthographic projection)
- 場景深度<<到相機的距離;
- 場景中所有點的Z值均相同,如Z0。
這種情況相當於對垂直於相機Z軸方向上的一個平面場景進行成像,則對於場景中所有的點有:x=sX,y=sY,s=Z0f。
2.4 透視投影(Perspective projection)
3 相機參數
對於小孔成像模型中,有:
{x=fZXy=fZY(2)
3.1 相機內參
上述爲理想狀態下的公式,下面來分析幾種特殊情況。
3.1.1 像素不是正方形
當相機傳感器(CCD)上的像素不是正方形時有:
{x=kfZXy=lfZY(3)
- x,y:座標(pixel);
- k,l:縮放因子(pixel/mm)
- f:焦距(mm)
令上式中:fx=kf,fy=lf,則有:
{x=fxZXy=fyZY(4)
3.1.2 相機主點(principal point)不在原點
即光軸與CCD中心有偏移。假設主點在圖像上的座標(像素)爲cx,cy,則有:
{x=fxZX+cxy=fyZY+cy(5)
那麼沿着相機的Z軸,有X=Y=0,x=cx,y=cy。
3.1.3 x軸與y軸不垂直
理想情況下,x軸與y軸是相互垂直的,但一般情況下,x軸和y軸的夾角並不是90度。假設x軸和y軸之間的夾角爲θ,則有:
{x=fxZX−fxcotθZY+cxy=sinθfyZY+cy(6)
3.1.4 內參矩陣
組合所有參數,可以得到相機的內參矩陣K:
K=⎣⎡fx00−fxcotθsinθfy0cxcy1⎦⎤=⎣⎡fx00sfy0cxcy1⎦⎤(7)
3.2 相機外參
相機外參反映了相機在世界座標空間中的位姿,可通過一個剛性變換來表示,通常包含平移T和旋轉R。
平移矩陣:
T=⎣⎡TXTYTZ⎦⎤(8)
旋轉矩陣:
R=⎣⎡r11r21r31r12r22r32r13r23r33⎦⎤(9)
旋轉矩陣是正交的,所以有:RTR=I。
4 畸變
畸變是光學透鏡固有的透視失真特性,目前所有的鏡頭都存在畸變,只是程度不同。畸變又分爲徑向畸變和切向畸變,這裏只以徑向畸變爲例。常見的徑向畸變有桶形畸變、枕形畸變等:
徑向畸變可以被建模爲:
具體的畸變校正過程可以參考博客。
5 相機標定
相機標定的目的就是獲取前文提到的相機內參、外參和畸變係數。通常,標定方法分爲兩步:(1)從不同角度捕獲棋盤格圖像;(2)檢測角點並計算相機參數。
可使用OpenCV或其他相機標定程序來完成參數計算。
參考
[1] 一個pdf,下載地址找不到了=_=