1. 程式人生 > >雙目標定(二)單目標定基本原理

雙目標定(二)單目標定基本原理

主體思路,先處理純二維平面的畸變問題(此處略過),矯正圖片後,再來求解相機內外引數。基本思路是求得每個標定板對應的單應矩陣,再聯合優化所有標定板資料得到相機內參矩陣,再得到每個標定板對應的外參。

1. 標定板平面到像平面的單應矩陣H

,則對於每個棋盤格,可以得到一個標定板平面到當前影象平面的單應矩陣Hi,實際上這個單應矩陣Hi彙總了標定板平面到相機成像平面的旋轉平移以及相機內參資訊。
現在,我們已知每幅標定板圖的單應矩陣H

2.求解相機內參矩陣

對一幅標定板圖片上的標定板座標上的一點P=[X,Y,0,1]TP=[X,Y,0,1]^T由於
這裡寫圖片描述
(1)

A為相機內參
實際上,由於H是二維對應關係,而標定板平面Z軸對應為0,所以:H

=[h1,h2,h3]=A[r1,r2,t]H=[h1,h2,h3]=A[r_1,r_2,t],
由於R是正交矩陣,所以r1,r2正交,即r1和r2的模相同,而且點積為0,即:
r1Tr2=0r_1^Tr_2=0
r1=r2||r_1||=||r_2||
用h1,h2,替換r1,r2,則有:
這裡寫圖片描述
B=AA1B=AA^{-1},則可以將上述式子化簡為:
這裡寫圖片描述
B是對稱矩陣,所以可以用6個元素表示B的有效元素,則上述式子又可以表示為:
這裡寫圖片描述
因此之前由r1,r2正交得到的式子可以轉化為:
這裡寫圖片描述

將所有標定板影象都壓棧到一起,最小二乘法可以求出b。

求得b,也就是求出B,也即得到內參矩陣A。

3. 求解每個 標定板對應的外引數

根據第一個式子轉換得到:
這裡寫圖片描述
其中:
λ=A1h1=A1h2\lambda=||A^{-1}h_1||=||A^{-1}h_2||
就得到每個標定板平面座標系對相機座標系的旋轉平移向量

4.最小二乘解最終的內參矩陣

通過以上方式得到最初的A和Ri,tiR_i,t_i後,考慮到觀測時不可避免的噪聲,所以用最小二乘方法,將所有N張圖上每張圖d個點的觀測量用最小二乘方法解:
iNjd=

mijM(A,Ri,ti,Di)\sum_i^N\sum_j^d = m_{ij} - M(A,R_i,t_i,D_i)
其中M(A,Ri,ti,Di)M(A,R_i,t_i,D_i)為(1),即投影矩陣。
用高斯牛頓法對以上進行求解。
此處,之前的格點大小就派上用場了,比如OpenCV中認為左上角的格點為b標定板平面座標系的原點,則其他格點的三維座標依次是:(jsize,ksize,0)(j*size,k*size,0)

5.考慮畸變

一般情況下,我們先計算畸變雙目標定(一)單目標定與矯正的基本介紹,然後再通過4的最小二乘估計內參矩陣。但正如張定友論文中[1]所介紹的,這種方法的收斂速度太小,所以他提出直接最小二乘求解以下包括徑向畸變、內參和Ri,tiR_i,t_i在內的所有引數(他不考慮切向畸變)。其中內參和Ri,tiR_i,t_i的初始估計可用3部分的方法得到,而徑向畸變可用普通徑向畸變方法求解,或者直接令為0.

6.單目標定的整個流程

  • 拍攝一系列含有標定板的影象
  • 找出影象中的角點/格點
  • 得到每張影象格點之間的匹配關係
  • 求解最初的相機內參A和標定板座標系到世界座標系的旋轉平移Ri,tiR_i,t_i
  • 得到徑向畸變(和切向畸變)
  • 再次最小二乘聯合優化內參A和Ri,tiR_i,t_i

7.雙目標定流程

雙目標定先得到在左側標定板座標系中各個格點位置,通過左側相機的Ri,tiR_i,t_i轉換到相機座標系,再根據Rlr,tlrR_{lr},t_{lr}轉換到右側相機座標系,並使得兩側的投影誤差最小。在OpenCV的實現中,也是用高斯牛頓法的最小二乘方法來優化最後的結果。

for( i = 0; i < nimages; i++ )
    {
        for( j = 0; j < boardSize.height; j++ )
            for( k = 0; k < boardSize.width; k++ )
                objectPoints[i].push_back(Point3f(k*squareSize, j*squareSize, 0));
    }
///...
    double rms = stereoCalibrate(objectPoints, imagePoints[0], imagePoints[1],
                    cameraMatrix[0], distCoeffs[0],
                    cameraMatrix[1], distCoeffs[1],
                    imageSize, R, T, E, F,
                    CALIB_FIX_ASPECT_RATIO +
                    CALIB_ZERO_TANGENT_DIST +
                    CALIB_USE_INTRINSIC_GUESS +
                    CALIB_SAME_FOCAL_LENGTH +
                    CALIB_RATIONAL_MODEL +
                    CALIB_FIX_K3 + CALIB_FIX_K4 + CALIB_FIX_K5,
                    TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, 1e-5) );

Reference

Zhang Z. A flexible new technique for camera calibration[J]. IEEE Transactions on pattern analysis and machine intelligence, 2000, 22(11): 1330-1334.