單目相機標定方法可以選用matlab,ros,opencv等。對於非專門標定人員,了解其基本原理就可是實踐了,不需深究細究其公式解法(至少還是要看的懂),畢竟這是一門工程活。本文分別使用 opencv 和 kalibr 對某款手機的相機進行標定。
官方教程如下:
create calibration pattern
create calibration patterndocs.opencv.org
2. camera calibration with square chessboard
camera calibration with square chessboarddocs.opencv.org
3. camera calibration with opencv
步驟4因為採用charuco pattern和影象資料篩選,效果會比步驟3好。若無準備紙張列印,可以將影象用顯示器顯示,使用卡尺等工具測量,再配置相應引數使用。使用相機拍攝然後(相關專家建議15~25有效幀),配置引數,然後執行程式,程式輸出結果如下(使用300幀,因為做資料對比時使用了乙個大值)。
<?xml version="1.0"?>
"2023年02月26日 星期三 12時35分20秒"
3001280
7208
62.5399999618530273e+01
1.615803
3d1.2485522379913739e+03 0. 640. 0. 1.2485522379913739e+03 360. 0. 0.
1.51
d5.0384590562845866e-01 -3.0376096576568092e+00 0. 0.
7.8728630374810207e+00
5.2319322556617598e-01
# 安裝mynteye sdk包
cd path/mynt-eye-s-sdk
make ros
# 編譯kalibr
cd ros_ws
git clone
catkin make
# 製作標定板
kalibr_create_target_pdf
--type apriltag
--nx 11
--ny 6
--tsize 0.08
camchain-xiaomi.yaml# 生成bag
kalibr_bagcreater --folder datasets/xiaomi/ --output-bag xiaomi.bag
# 標定
kalibr_calibrate_cameras --bag xiaomi.bag
--topics /cam0/image_raw
--models pinhole-radtan
--target config/april_6x6_3x3cm.yaml
results-cam-xiaomi.txtcam0:
cam_overlaps:
camera_model: pinhole
distortion_coeffs: [0.38360605866599407, -1.2390358225770555, -0.005105318309031128,
0.008904478919730792]
distortion_model: radtan
intrinsics: [1258.0634247624691, 1262.5744117703066, 679.407979810292, 356.56135804474275]
resolution: [1280, 720]
rostopic: /cam0/image_raw
另一組資料processed 115 images with 31 images used
camera-system parameters:
cam0 (/cam0/image_raw):
type: distortion: [ 0.38360606 -1.23903582 -0.00510532 0.00890448] +- [ 0.00921869 0.06175648 0.00114031 0.00136888]
projection: [ 1258.06342476 1262.57441177 679.40797981 356.56135804] +- [ 1.71014401 0.93096679 2.90029945 2.57525038]
reprojection error: [-0.000014, -0.000000] +- [0.157424, 0.165574]
同一資料,採用不同的幀數或者不同的標定板,都會導致標定結果不一樣。因為相機引數標定的過程是非線性方程優化的過程,很難有穩定解。當然標定板的平整度和位置,與中覆蓋的範圍和光照條件都可以影響標定結果。所以標定有幾點小建議:cam0:
cam_overlaps:
camera_model: pinhole
distortion_coeffs: [0.3563290561077106, -1.3382736411516931, -6.800422558739942e-05,
0.012937904161103493]
distortion_model: radtan
intrinsics: [1190.2025644327568, 1190.4884127469832, 649.8036045156342, 367.41226082406587]
resolution: [1280, 720]
rostopic: /cam1/image_raw
calibration results
********************
camera-system parameters:
cam0 (/cam1/image_raw):
type: distortion: [ 0.35632906 -1.33827364 -0.000068 0.0129379 ] +- [ 0.00691535 0.04395793 0.00067249 0.00074388]
projection: [ 1190.20256443 1190.48841275 649.80360452 367.41226082] +- [ 4.35593828 4.45693539 2.28717668 1.71501437]
reprojection error: [0.000002, -0.000001] +- [0.695613, 0.334193]
光照條件好
標定板平整
棋盤格盡量大
影象清晰度高(計算使用亞畫素)
拍攝角度小於45°(角度大對應的重投影誤差大,會影響角度小的)
影象呈現完整標定板
上述三次標定存在些許差異,但皆為可靠資料。根據小孔成像原理,很容易得知:當相機解析度擴大(縮小)一倍時,空間點xyz沒變,內參矩陣k擴大(縮小)原來的一倍;當相機橫豎變化時,空間點xyz沒變,原u->v,原v->u,內參矩陣需交換對應行。
單目相機標定
主要 執行前需要先準備標定和記錄標定列表的文字檔案,並放入程式所在目錄下 文字檔案的內容如下 calibdata.txt 裡面填寫好需要標定的名稱 for int ii 0 iiif 0 ii cornernum 24 是每幅的角點個數。此判斷語句是為了輸出 號,便於控制台 輸出所有的角點 cout...
單目相機標定
1 matlbe 單目標定步驟 常用術語 中文名 英文名 內參矩陣 intrinsic matrix 焦距 focal length 主點 principal point 徑向畸變 radial distortion 切向畸變 tangential distortion 旋轉矩陣 rotation ...
相機標定之棋盤標定
該文章主要學習如何進行相機標定,原理部分只是比較多,不多贅述。首先,相機標定主要是去求解內參k和外參 r t 以下為相機標定過程中常用的opencv自帶的幾個重要函式。1.opencv 提供的函式projectpoints2 投影三維點到影象二維點。函式引數如下 void cvprojectpoin...