自製棋盤格標定板 單目相機標定

2021-10-25 12:59:07 字數 3748 閱讀 3284

單目相機標定方法可以選用matlab,ros,opencv等。對於非專門標定人員,了解其基本原理就可是實踐了,不需深究細究其公式解法(至少還是要看的懂),畢竟這是一門工程活。本文分別使用 opencv 和 kalibr 對某款手機的相機進行標定。

官方教程如下:

create calibration pattern

create calibration pattern​docs.opencv.org

2. camera calibration with square chessboard

camera calibration with square chessboard​docs.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

# 生成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

camchain-xiaomi.yaml

cam0:

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

results-cam-xiaomi.txt

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...