Kinect2.0相机标定
我搜相机标定的时候有很多种方法,小白也不知道哪一个能用有用,感觉乱七八糟的,这个总结的很好Kinect2的标定和图像配准,我选的最简单的用matlab计算的。
下面是一些需要知道的基础知识,更好的操作和理解一些步骤吧(摘抄自上面那个博客)
相机结构
需要标定的参数:
标定方法和工具:
操作
参考:Kinect深度图与RGB摄像头的标定与配准(主要是参考的彩色相机的标定,还有最后对齐部分,红外相机看不太懂,我直接就拍了照片放在matlab里计算了)
kinect 2的数据获取与深度相机的标定(主要参考的matlab使用)
标定彩色摄像头
目的:获得彩色摄像头内参:,,,,还有畸变参数
- 用相机拍摄不同角度的彩色图片(正视、俯视、仰视、左倾、右倾),不少于20张
注意:
- 棋盘尽量覆盖在画面一半
- 角度越多越好;
- 棋盘要出现在图像的各个位置;
- 平面与摄像头平面角度不要超过45°(我自己设置的时候发现角度太斜了红外图像就采集不到了,但是彩色摄像头可以,彩色图片也能采集到,但是不知道放在matlab里能不能识别格子的角点了,所以还是按照大家都这么做的做吧)
参考的一篇博客说距离要2种及以上(我不知道距离远近有什么影响,反正我是照顾到红外相机太远了就采集不到,所以都离得比较近)
2. 把图片放到matlab里,就会自动计算出参数啦(matlab是通过检测棋盘格的角点然后计算相机参数的,虽然具体原理不太懂,不过这样至少知道拍摄的时候要注意什么,就是尽量把角点都显示全,让matlab容易捕捉)
调用matlab工具箱:
导入图片
会弹出一个框让你填写你的棋盘格单个格子的大小,我用的3cm的,所以改成30
然后会弹出一个框提示你一共输入了35张图片,识别并添加进matlab23张,有12张没有识别出来(反正就是不好用)被丢弃了。然后matlab就用这23张图片计算相机参数
Calibrate就可以开始计算相机参数啦
结果:
直接按确定:
标定红外摄像头
目的:获得彩色摄像头内参:,,,,还有畸变参数
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
注意:参考博客里有说红外相机关照问题,一些图片要去掉
彩色图像和深度图像对齐
原理
这个原理很全,但是我没看,好复杂的样子:张正友标定法-完整学习笔记-从原理到实战