世界座標系的三維點投影到成像
座標系中的二維點的投影公式如下:
其中(x,y,z)為世界座標系中的三維點;
(u,v)為成像面座標系中的二維點;
a為相機的內引數矩陣:(cx,cy)為主光軸點,一般為影象的中心;fx和fy為焦距;
[r|t]為相機的外引數矩陣:r為旋轉矩陣,t為位移矩陣;
上述公式的簡單推理過程如下
考慮到鏡頭畸變
其中,k1,k2,k3,k4,k5和k6為徑向畸變,p1和p2為軸向畸變。在opencv中,畸變矩陣的引數為(k1,k2,p1,p2[,k3[,k4,k5,k6]]])。
opencv中的標定模組常用的標定函式:
doublecalibratecamera(inputarrayofarrays objectpoints, inputarrayofarrays imagepoints,size imagesize, inputoutputarray cameramatrix, inputoutputarray distcoeffs, outputarrayofarrays rvecs, outputarrayofarrays tvecs, int flags=0)其中
objectpoints為世界座標系中的點。在使用時,應該輸入乙個三維點的vector的vector,即vectorf> >
(注要記得括號的區別)objectpoints。
imagepoints為其對應的影象點。和objectpoints一樣,應該輸入std::vector> > imagepoints型的變數。
imagesize為影象的大小,在計算相機的內引數和畸變矩陣需要用到;
cameramatrix為內引數矩陣(
相機矩陣cameramatrix)
。輸入乙個cv::mat cameramatrix即可。
distcoeffs為畸變矩陣。輸入乙個cv::mat distcoeffs即可。
rvecs為旋轉向量;應該輸入乙個cv::mat的vector,即vectorrvecs因為每個vector會得到乙個rvecs。
tvecs為位移向量;和rvecs一樣,也應該為vectortvecs。
flags為標定是所採用的演算法。可如下某個或者某幾個引數:
cv_calib_use_intrinsic_guess:使用該引數時,在cameramatrix矩陣中應該有fx,fy,cx,cy的估計值。否則的話,將初始化(cx,cy)影象的中心點,使用最小二乘估算出fx,fy。如果內引數矩陣和畸變居中已知的時候,應該標定模組中的solvepnp()函式計算外引數矩陣。
cv_calib_fix_principal_point:在進行優化時會固定光軸點。當cv_calib_use_intrinsic_guess引數被設定,光軸點將保持在中心或者某個輸入的值。
cv_calib_fix_aspect_ratio:固定fx/fy的比值,只將fy作為可變數,進行優化計算。當cv_calib_use_intrinsic_guess沒有被設定,fx和fy將會被忽略。只有fx/fy的比值在計算中會被用到。
cv_calib_zero_tangent_dist:設定切向畸變引數(p1,p2)為零。
cv_calib_fix_k1,...,cv_calib_fix_k6:對應的徑向畸變在優化中保持不變。如果設定了cv_calib_use_intrinsic_guess引數,
cv_calib_rational_model:計算k4,k5,k6三個畸變引數。如果沒有設定,則只計算其它5個畸變引數。
相機標定原理 機器視覺相機標定的目的 原理及步驟
在影象測量過程以及機器視覺應用中,為確定空間物體表面某點的三維幾何位置與其在影象中對應點之間的相互關係,必須建立相機成像的幾何模型,這些幾何模型引數就是相機引數。進行攝像機標定的目的 求出相機的內 外引數,以及畸變引數。標定相機後通常是想做兩件事 乙個是由於每個鏡頭的畸變程度各不相同,通過相機標定可...
深度學習 相機標定 相機標定
術語 內參矩陣 intrinsic matrix 焦距 focal length 主點 principal point 徑向畸變 radial distortion 切向畸變 tangential distortion 旋轉矩陣 rotation matrices 平移向量 translation ...
相機標定之棋盤標定
該文章主要學習如何進行相機標定,原理部分只是比較多,不多贅述。首先,相機標定主要是去求解內參k和外參 r t 以下為相機標定過程中常用的opencv自帶的幾個重要函式。1.opencv 提供的函式projectpoints2 投影三維點到影象二維點。函式引數如下 void cvprojectpoin...