Kinect2.0相機標定

我搜相機標定的時候有很多種方法,小白也不知道哪一個能用有用,感覺亂七八糟的,這個總結的很好Kinect2的標定和圖像配準,我選的最簡單的用matlab計算的。
下面是一些需要知道的基礎知識,更好的操作和理解一些步驟吧(摘抄自上面那個博客)

相機結構

在這裏插入圖片描述
在這裏插入圖片描述
需要標定的參數:
在這裏插入圖片描述
標定方法和工具:
在這裏插入圖片描述

操作

參考:Kinect深度圖與RGB攝像頭的標定與配準(主要是參考的彩色相機的標定,還有最後對齊部分,紅外相機看不太懂,我直接就拍了照片放在matlab裏計算了)
kinect 2的數據獲取與深度相機的標定(主要參考的matlab使用)

棋盤格下載
也可以去官網(應該是吧,反正好多人用這個):https://github.com/code-iai/iai_kinect2/tree/master/kinect2_calibration/patterns(這個只是最終的存放路徑,只下載這個好像不行,需要返回找到整個項目然後把整個項目下載,再在文件夾裏找圖片)

標定彩色攝像頭

目的:獲得彩色攝像頭內參:fxf_x,fyf_y,cxc_x,cyc_y,還有畸變參數

  1. 用相機拍攝不同角度的彩色圖片(正視、俯視、仰視、左傾、右傾),不少於20張

注意:

  • 棋盤儘量覆蓋在畫面一半
  • 角度越多越好;
  • 棋盤要出現在圖像的各個位置;
  • 平面與攝像頭平面角度不要超過45°(我自己設置的時候發現角度太斜了紅外圖像就採集不到了,但是彩色攝像頭可以,彩色圖片也能採集到,但是不知道放在matlab裏能不能識別格子的角點了,所以還是按照大家都這麼做的做吧)
    參考的一篇博客說距離要2種及以上(我不知道距離遠近有什麼影響,反正我是照顧到紅外相機太遠了就採集不到,所以都離得比較近)

在這裏插入圖片描述
2. 把圖片放到matlab裏,就會自動計算出參數啦(matlab是通過檢測棋盤格的角點然後計算相機參數的,雖然具體原理不太懂,不過這樣至少知道拍攝的時候要注意什麼,就是儘量把角點都顯示全,讓matlab容易捕捉)
調用matlab工具箱:

在這裏插入圖片描述
導入圖片
在這裏插入圖片描述
會彈出一個框讓你填寫你的棋盤格單個格子的大小,我用的3cm的,所以改成30
在這裏插入圖片描述
然後會彈出一個框提示你一共輸入了35張圖片,識別並添加進matlab23張,有12張沒有識別出來(反正就是不好用)被丟棄了。然後matlab就用這23張圖片計算相機參數
在這裏插入圖片描述
Calibrate就可以開始計算相機參數啦
在這裏插入圖片描述
結果:
在這裏插入圖片描述
直接按確定:
在這裏插入圖片描述
在這裏插入圖片描述

標定紅外攝像頭

目的:獲得彩色攝像頭內參:fxf_x,fyf_y,cxc_x,cyc_y,還有畸變參數

Kinect深度圖片好像是又紅外攝像頭拍來的,所以標定紅外攝像頭就可以了。步驟同上,但是我採集到的紅外圖像很奇怪,畫面是雪花狀的(這個博主和我情況一樣16位深度的TIF圖像轉8位深度——Matlab標定 一片白,可能保存成16位就沒問題了,但是我直接用的這個圖片好像也可以檢測出來,就沒有管),而且位置要求很苛刻,角度太大了或者太近都採集不到。
最後結果如下:
在這裏插入圖片描述
Camera Intrinsics
IntrinsicMatrix: [3×3 double]
FocalLength: [361.1934 362.1103]
PrincipalPoint: [261.9911 210.5512]
Skew: 0
RadialDistortion: [0.1103 -0.2990]
TangentialDistortion: [0 0]
ImageSize: [424 512]

Camera Extrinsics
RotationMatrices: [3×3×29 double]
TranslationVectors: [29×3 double]

Accuracy of Estimation
MeanReprojectionError: 0.3615
ReprojectionErrors: [35×2×29 double]
ReprojectedPoints: [35×2×29 double]

Calibration Settings
NumPatterns: 29
WorldPoints: [35×2 double]
WorldUnits: ‘millimeters’
EstimateSkew: 0
NumRadialDistortionCoefficients: 2
EstimateTangentialDistortion: 0

注意:參考博客裏有說紅外相機關照問題,一些圖片要去掉
在這裏插入圖片描述

彩色圖像和深度圖像對齊

原理見下一節。
我選擇第一對彩色和紅外圖像對應的外參矩陣,用matlab計算。

R_ir=[0.9956   , 0.0669   , 0.0653;%紅外圖像對應的外參,旋轉矩陣
   -0.0670 ,   0.9978  , -0.0005;
   -0.0652 ,  -0.0039 ,   0.9979];
T_ir=[-119.979664484074	;-116.048814672852;	460.315362680143];%紅外圖像對應的外參,平移矩陣
R_rgb= [0.9960  ,  0.0589  ,  0.0677;%彩色圖像對應的外參,旋轉矩陣
   -0.0596   , 0.9982   , 0.0077;
   -0.0671 ,  -0.0117 ,   0.9977];
T_rgb=[-68.7625339843484;	-113.548684529554	;465.147009166948];%彩色圖像對應的外參,平移矩陣
R=R_rgb*inv(R_ir);%計算ir2rgb旋轉矩陣
T=T_rgb-R*T_ir;%計算ir2rgb平移矩陣

然後就是用輸入圖像和內參外參計算出來的旋轉平移矩陣,然後根據公式編程,最後輸出圖像啦。程序見:kinect 2.0 SDK學習筆記(四)–深度圖與彩色圖對齊
結果:還是會有重影?(有部分顏色在牆上。。。)這個還是我手動平移之後比較好的結果,可能是我只用了一對圖像的外參,不夠精確?
在這裏插入圖片描述
點雲圖很明顯的看到:
在這裏插入圖片描述

原理

基本推到看這個(我能看懂哈哈哈)kinect 2.0 SDK學習筆記(四)–深度圖與彩色圖對齊
這個原理很全,但是我沒看,好複雜的樣子:張正友標定法-完整學習筆記-從原理到實戰

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