【OpenCV-應用之路】-------單目相機標定-函數解析:calibrateCamera()

首先,先看看OpenCV提供的標定接口:

opencv函數:

    double calibrateCamera(
        InputArrayOfArrays objectPoints,        //輸入:目標點位 的集合的集合
        InputArrayOfArrays imagePoints,         //輸入:圖像點位 的集合的集合
        Size imageSize,                         //輸入:圖像尺寸 
        InputOutputArray cameraMatrix,          //輸出:相機內參矩陣(fx,fy,cx,cy)
        InputOutputArray distCoeffs,            //輸出:畸變矯正多項式(k1,k2,p1,p2,k3...)
        OutputArrayOfArrays rvecs,              //輸出:旋轉矩陣 的集合
        OutputArrayOfArrays tvecs,              //輸出:平移矩陣 的集合
        int flags = 0,                          //輸入:對標定過程方法進行更精細的控制
        TermCriteria criteria =                 //輸入:迭代參數
        TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 30, DBL_EPSILON));

計算流程大概分爲以下兩步:

1.通過大量的對應點:   物體的目標點(現實世界)和 物體投影點(圖片中)計算出內參矩陣和畸變矯正多項式

2.再以得到的內參矩陣和畸變矯正多項式和輸入數據,進行迭代修正。得到更好的輸出結果。


以下是參數詳細解析:

參數一:InputArrayOfArrays:objectPoints,輸入目標點的位置 的集合的集合。

其每個點位代表着物體的三維座標。

參數類型可爲 :vector<vector<cv::Point3_<someType>>>

 

參數二:InputArrayOfArrays:imagePoints,圖像點位 的集合的集合

其每個點,是objectPoints中的點投影在圖片中成像的對應點。

參數類型可爲 :vector<vector<cv::Point2_<someType>>>

PS:objectPoints和imagePoints數組大小和每個數組的數組大小應該一致,且每個點一一對應。

 

參數三:Size:imageSize 圖像尺寸

參數四:InputOutputArray: cameraMatrix  相機內參矩陣

如圖:其中fx,fy分別爲x/y方向的焦距,cx,cy爲光軸對於投影平面座標中心的偏移量

該參數固定以3x3雙精度類Mat類型返回。

可配合cv::getOptimalNewCameraMatrix()函數使用,解決矯正後邊緣像素爲空問題

Ps1:當flags設置有固定中心(即:cv::CALIB_FIX_PRINCIPAL_POINT)時,固定光軸主點爲圖像中心。

Ps2:當flags設置有固定中心(即:cv::CALIB_FIX_PRINCIPAL_POINT | cv::CALIB_USE_INTRINSIC_GUESS)時,

直接使用傳入光軸偏移量cx,cy計算。

Ps3:當flags設置有固定焦距(即:cv::CALIB_FIX_FOCAL_LENGTH)時,直接使用傳入焦距fx,fy計算。

 

參數五:InputOutputArray distCoeffs 畸變矯正多項式(k1,k2,p1,p2,k3....k6)

其中k1,k2.....k6 爲泰勒級數展開的係數 用於矯正透鏡造成的徑向畸變

p1,p2 用於矯正透鏡切向畸變造成的畸變(可參考鉛錘模型)

該參數固定以雙精度類Mat類型返回。

默認返回k1,k2,p1,p2,k3。需要k4,k5,k6時可設置flags爲:CV_CALIB_RATIONAL_MODEL(一般只用於魚眼鏡頭)

ps::可通過設置cv::CALIB_FIX_Kn來固定對應的Kn在迭代修正過程中保持不變。

 

參數六:OutputArrayOfArrays rvecs 旋轉矩陣 的集合

類型可爲Vector<cv::Mat> ,其中每個Mat 爲1x3的Rodrigues表現的空間旋轉矩陣。

 

參數七:OutputArrayOfArrays tvecs 平移矩陣 的集合

類型可爲Vector<cv::Mat> ,其中每個Mat 爲1x3的平移矩陣。

 

參數七:int flags 對標定過程方法進行更精細的控制

除上述flags外還有:

CALIB_FIX_ASPECT_RATIO:修正過程中 fx,fy的比值不變。(若CV_CALIB_USE_INTRINSIC_GUESS被設置,則只更改fy值)

CALIB_ZERO_TANGENT_DIST:設置切向畸變爲0;

 

參數八:TermCriteria criteria  迭代參數

TermCriteria 類有三個成員 (int type,int maxCount,double epsilon)

分別是 迭代類型(翻譯爲迭代終止條件更符合),最大迭代次數,期望精度

迭代類型有:COUNT, EPS or COUNT + EPS  (滿足次數,滿足精度,或兩者之一)

 

返回值:重投影的均方根誤差

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