單目相機標定參考鏈結
主要參考一下鏈結。
singlecameracalibrator 專案 此專案用於對 相機進行標定,寫入模型
定義錯誤結構體
err模型檔案結構體
主函式:
輸入引數
引數檔案,初始化檔案,資料列表檔案,寫入的模型檔案,x偏移量,y偏移量
singlecameracalibration(intrinsicsfile, inifile, datalistfile, modelfile, dx_offset, dy_offset);
從引數檔案讀取 內參矩陣, 模型
readcameraparameters(intrinsicsfile, cameram, distcoefficients, model);
內外參矩陣cameramatrix 33,cv_64fc1 ,64位浮點數,通道為1
畸變係數distcoefficients 15 cv_64fc1 ,64位浮點數,通道為1,k1 k2 p1 p2 k3
將下面的值讀取到model結構體中
內外參矩陣
1.675675467281303e+03 0 1.283523418943789e+03 0 1.684175875308985e+03 1.005861159085279e+03 0 0 1
畸變係數
-0.084261396889388 0.094000220253870 0.002534040690027 -0.004307360185249 0.029818290884515
再次將 內外參,畸變係數讀取到cameram, distcoefficients,中
從初始化檔案中讀取配置,讀取配置的id 與roi矩形區域,(x,y,長,寬)
readfile_ini(inifile, id, roi_rect);
將id賦給上述的modle變數。
讀取標定影象資料檔案
read_datalist(datalistfile, roi_rect, dx_offset, dy_offset, vecimgtotal, vecpwtotal);
讀取影象的座標 影象的x 等於讀入的點加上roi的x點,影象的y等於讀入點的y加上roi的y值。補償偏移量。
讀取對應的世界座標,世界座標的x 等於讀入的值加上偏移量offsetx,世界座標的y等於讀入的值加上偏移量offsety, 此處設定z軸為0;
開始標定:
由相機內參獲取某一平面的旋轉向量,平移向量
mat rvec, tvec;
這個函式需要查一下
bool b = solvepnpransac(vecpw, vecimg, cameram, distcoefficients, rvec, tvec);
由旋轉向量獲取旋轉矩陣(旋轉矩陣是3*3的,是世界座標與相機座標的變換)
參考:mat rotation_matrix = cv::mat(3, 3, cv_32fc1, cv::scalar::all(0));//旋轉矩陣
rodrigues(rvec, rotation_matrix);
列印旋轉矩陣與平移矩陣,並將矩陣寫入上述的結構體model中
驗證標定結果
將旋轉矩陣 和平移矩陣組合,上述讀取座標時,將世界座標的z軸設為0;
所以此處 重新構建乙個矩陣m, m包含旋轉矩陣前兩列,和平移矩陣
將 內參矩陣 與 旋轉矩陣相乘,即為上圖的m1*m2, 再求逆矩陣作為invh。
畸變校正
這個函式需要查一下
undistortpoints(vecimg, vecdst, cameram, distcoefficients, noarray(), cameram);//校正後點為同為畫素座標,校正後的座標放在vecdst,
將矯正後的點取出,放在 新矩陣p(3*3)中,前兩個值為x.y ,第三個值為補入的1,相當於上圖最左側的
計算世界座標系 即是 invh *p
統計錯誤率 差的平方和 與 平均誤差。是否需要再次標定。
這裡沒懂。 齊次座標還原
模型檔案結構體 st_model
模型檔案結構體mat型別 st_value_info
主函式讀取模型, 模型路徑,模型內參矩陣,模型係數的逆矩陣
readmodel(modelpath, m_info.mat_carmera, m_info.mat_coefficients, m_info.mat_invh);
得到世界座標系
getlaserworldpoint(mat img, st_value_info m_info, int offsetx, int offsety)
首先閾值化, 在進行33的腐蝕操作。在進行55的膨脹操作。
再求出每列的灰度重心,
此處參考:大意就是 越亮的位置,權重越大,越靠近重心。
求完之後,在將偏移量進行補償。
張正友相機標定** 參考:
深度學習 相機標定 相機標定
術語 內參矩陣 intrinsic matrix 焦距 focal length 主點 principal point 徑向畸變 radial distortion 切向畸變 tangential distortion 旋轉矩陣 rotation matrices 平移向量 translation ...
相機標定之棋盤標定
該文章主要學習如何進行相機標定,原理部分只是比較多,不多贅述。首先,相機標定主要是去求解內參k和外參 r t 以下為相機標定過程中常用的opencv自帶的幾個重要函式。1.opencv 提供的函式projectpoints2 投影三維點到影象二維點。函式引數如下 void cvprojectpoin...
相機畸變以及相機標定
相機畸變的種類 徑向畸變 產生原因 由透鏡形狀引起的畸變稱為徑向畸變,徑向畸變主要分為桶形畸變和枕型畸變。在針孔模型中,一條直線投影到畫素平面上還是一條直線。但在實際中,相機的透鏡往往使得真實環境中的一條直線在中變成了曲線。越靠近影象的邊緣現象越明顯。由於透鏡往往是中心對稱的,這使得不規則畸變通常徑...