三維重構學習筆記(1):相機標定

三維重構學習筆記(1):相機標定

本篇主要是理解一些矩陣計算相關的問題,每個問題都用在提出時重點標識,對於相機標定的理解比較有實際意義。

1、三維重構

1.1 宏觀理解

先說一說宏觀上的理解:三維重構是指“通過二維圖片信息獲得圖片中的物體的三維信息的一種手段”。能夠通過二維圖片得到物體的三維信息主要還是得益於“圖片在獲取過程中與真實的世界發生了幾何上的轉換關係”,結合圖片中的點以及那種“幾何關係”,我們可以通過反推計算得到物體在真實世界中的三維信息。

1.2 三維重構的方法(SFM: Structure From Motion 簡單說明:後續會深入學習)

有很多。這裏暫時將關注點放在“機器視覺方面的三維重構”,因爲有些三維重構的方法涉及到“深度相機”的使用,而工業檢測可能使用普通相機居多。
另外一個限制因素:包工頭暫時希望我通過單目相機的不同拍攝角度獲得三維信息
通過近期文獻方面的閱讀,我主要關注了經典的三維重構方法:SFM。該方法通過“無序圖片”進行三維重建,是單目三維重構比較流行的策略。典型的SFM包括兩大主要步驟:

  1. Correspondences Search(包括:特徵提取、匹配、幾何驗證(相機標定))

  2. Incremental Reconstruction(包括:初始化3D模型、圖像配準、三角測量、光束平差(Bundle Adjustment))

上述步驟會在進一步學習中詳細介紹。

2. 相機標定有關的問題

2.1 前話

閱讀文獻時發現:

  1. 相機標定是三維重構中不可或缺的一環。因此我也拜讀了最爲經典的張氏標定法。
  2. 特徵匹配也是不可或缺的一環。因此我嘗試了最爲經典的SIFT和SURF特徵。

(張氏標定簡單理解:通過最少兩張圖片就可以得到相機的內外參數,其中內參數是相機本身畸變,焦距等會影響圖片的生成的參數,外參數主要是相機的座標與世界座標的關係,比如旋轉和平移。)

2.2 關於標定後的相機參數在三維重構中怎麼用

張氏標定法中,有一個令我在意的假設:假設物體在世界座標系中z=0z=0的平面上。
問題一:標定好的相機能否通過反推得到物體的三維空間情況?也就是說通過多張圖片對單相機標定之後,是否能夠通過單張圖片反推得到物體的三維座標。目前我認爲答案爲“否”。

標定中的未知數:

相機內參:畸變參數(切向(由於鏡片工藝導致的圖片與鏡頭不平行)、徑向畸變(遠離中心圖片出現彎曲))、焦距 ff,相機外參數:旋轉矩陣,平移向量。
畸變校正中的未知數:
徑向畸變:xcorrected=x(1+k1r2+k2r4+k3r6),ycorrected=y(1+k1r2+k2r4+k3r6)x_{corrected}=x(1+k_1r^2+k_2r^4+k_3r^6), y_{corrected}=y(1+k_1r^2+k_2r^4+k_3r^6),xyx、y是圖像中的畸變後的位置座標,通過校正得到真實座標。r是該點距成像中心的距離。
切向畸變:xcorrected=x+[2p1y+p2(r2+2x2),ycorrected=y+[2p1x+p2(r2+2y2)x_{corrected}=x+[2p_1y+p_2(r^2+2x^2), y_{corrected}=y+[2p_1x+p_2(r^2+2y^2),xyx、y是圖像中的畸變後的位置座標,通過校正得到真實座標。r是該點距成像中心的距離。

已知:相機標定時,假定標定板處在 z=0z=0的平面上,且最後得到像素與標定板的映射關係爲:
[u,v,1]T=H[xw,yw,1][u,v,1]^T=H[x_w,y_w,1],其中 HH是3*3的單應矩陣,歸一化後,有8個未知數。通過四組對應點即可得到 HH的唯一解,若是存在多組匹配點,可以通過最小二乘或者SVD進行求解。
問題二爲什麼不能通過4對匹配點直接求單應矩陣?。我覺得是:單應矩陣是相機內外參數的線性組合,得到的匹配點不一定是完全準確的,所以用4組匹配點計算單應矩陣有可能存在較大的誤差。如果出現了多組匹配點,各匹配點可以相互約束,從而得到誤差更小的單應矩陣。
問題三爲什麼要通過多張圖片進行相機標定?我覺得:在以三維重構爲目標的任務中,相機標定是輔助得到[xw,yw,zw][x_w,y_w,z_w]的重要手段。但是很明顯,一張圖片標定得到的單應矩陣不足以使我們得到[xw,yw,zw][x_w,y_w,z_w]。如果分別知道了相機的內外參數,

從這裏看我在上一部分的問題:在知道圖片上的點之後爲什麼得不到物體對應的三維點
A:很明顯,該方程只能得到世界座標中的[xw,yw][x_w,y_w],無法直接得到zwz_w。假設相機的內外參矩陣均已知,且相機標定時採用的是張氏標定,通過圖片進行三維重建時(考慮最簡單的兩張圖片),若爲單目系統,兩張圖片的內參矩陣一樣,外參矩陣有區別。設兩張圖片爲左圖和右圖
世界座標到兩圖對應的相機座標系滿足:
[xiL,yiL,ziL]T=RL[xi,yi,zi]T+TL[x_i^L,y_i^L,z_i^L]^T=R_L[x_i,y_i,z_i]^T+T_L,
[xiR,yiR,ziR]T=RR[xi,yi,zi]T+TR[x_i^R,y_i^R,z_i^R]^T=R_R[x_i,y_i,z_i]^T+T_R.
三維重構的目的:得到世界座標系中的值[xi,yi,zi]T[x_i,y_i,z_i]^T
根據上式,得到任意[xiL,yiL,ziL]T[x_i^L,y_i^L,z_i^L]^T或者[xiR,yiR,ziR]T[x_i^R,y_i^R,z_i^R]^T都可以通過計算直接得到求解方程得到世界座標[xi,yi,zi]T[x_i,y_i,z_i]^T
所以目標轉化爲求解[xiL,yiL,ziL]T[x_i^L,y_i^L,z_i^L]^T或者[xiR,yiR,ziR]T[x_i^R,y_i^R,z_i^R]^T
通過相機內參數可以計算得到由ziL,ziRz_i^L, z_i^R分別表示的[xiL,yiL],[xiR,yiR][x_i^L,y_i^L],[x_i^R,y_i^R],結合相機座標系與世界座標系的轉換可以計算得到ziL,ziRz_i^L, z_i^R。反推即可得到世界座標系。
------------------------------------------------------------------------------------------------------------------
關於三維重構更加直觀的理解請看 aipiano的博客,參考三維重構部分
將我上面講的部分說的簡單明瞭。
------------------------------------------------------------------------------------------------------------------

那麼相機標定的目標就成了分別計算出:內參矩陣A,旋轉矩陣R和平移向量T
理解步驟:通過圖片與標定物體易得單應矩陣HH,且H=λA[r1,r2,t]H=\lambda A[r_1,r_2,t],並且r1,r2r_1,r_2是正交單位向量,所以上式滿足約束條件:
h1TATA1h2=0h_1^TA^{-T}A^{-1}h_2=0
h1TATA1h1=h2TATA1h2h_1^TA^{-T}A^{-1}h_1=h_2^TA^{-T}A^{-1}h_2
將該約束條件可以最終轉化爲一個方程組:
Bb=0Bb=0,其中BB是2 * 6的矩陣,bb是由AA轉化而來的1*6的向量。AA中的未知數共有5個,如果不算γ\gamma,則A中有四個未知數。而兩張圖片即可提供包含四個等式的線性方程組。故而可以求出bb,易得AA,得到A之後,旋轉矩陣,平移矩陣也易得。

問題四矩陣AA的自由度爲什麼是2
張正友的文章中解釋:HH的自由度爲8,旋轉矩陣和平移矩陣的自由度分別爲3(繞軸旋轉以及向那些方向平移是獨立的,故R,TR,T各有3個自由度),所以只能從內參矩陣中得到兩個約束。這個問題總體待定。需要討論,知道的小夥伴請留言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章