kinect和联想E460自带相机标定
来源:互联网 发布:mac怎么快速回到桌面 编辑:程序博客网 时间:2024/04/29 00:08
我打算用MATLAB进行标定
我在Ubuntu14.04下安装MATLAB
参考博客:
http://www.cnblogs.com/nowornever-L/p/5649078.html
在这个问题当中遇到的问题:
这个地方我是做不出来,后来又找了找资料
tip: 快速打开system monitor 的命令:$ gnome-system-monitor
然后显示挂载点之后,进入安装界面后
然后在跟着那个博客链接,吧那个文件复制进那个文件夹当中,就可以了
最后在命令窗口输入 sudo matlab
就可以打开MATLAB
感觉可以不装MATLAB的的,但是装了就装了吧
据说是用拍的照片来进行标定的,那么只要会用摄像头进行拍照片,然后进行导入就可以了
http://www.cnblogs.com/li-yao7758258/p/5929145.html
opencv的方法:
http://blog.csdn.net/t247555529/article/details/47836233
matlab的方法:
http://blog.csdn.net/heroacool/article/details/51023921
采用matlab进行标定,
在命令窗口输入:cameraCalibrator
我测量了一下大概每个格子是24mm
写在最前面,这里我用的matlab相机标定的方式是错的!!!
输出的结果
最后的误差要小于0.5
我这个刚号0.5 导入了24张图片
输入:这是相机的内置参数矩阵
cameraParams.IntrinsicMatrix
输出
ans = 1.0e+03 * 1.0223 0 0 0 1.0248 0 0.6436 0.3609 0.0010
输入:cameraParams.RadialDistortion
这是径向畸变
输出:0.0618 -0.0409
输入:cameraParams.TangentialDistortion
这是切向畸变
输出:0 0
然后我们来分析一些这三个矩阵:
help cameraParams.IntrinsicMatrix
这个是3*3的矩阵[fx 0 0; s fy 0; cx cy 1] cx,cy是光学中心的坐标 s 是 斜参数 ,当x和y完全垂直的时候是0
fx = F * sx, fy = F * sy ,其中F是焦距的单位mm,sx,sy是每个像素的点的数量,fx,fy的单位是像素
然后对着位置填写进去就可以 了
%YAML:1.0#--------------------------------------------------------------------------------------------# Camera Parameters. Adjust them!#--------------------------------------------------------------------------------------------# Camera calibration and distortion parameters (OpenCV) Camera.fx: 1.0223Camera.fy: 1.0248Camera.cx: 0.6436Camera.cy: 0.3609Camera.k1: 0.0618Camera.k2: -0.0409Camera.p1: 0Camera.p2: 0Camera.k3: 0# Camera frames per second Camera.fps: 30.0# Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)Camera.RGB: 1#--------------------------------------------------------------------------------------------# ORB Parameters#--------------------------------------------------------------------------------------------# ORB Extractor: Number of features per imageORBextractor.nFeatures: 1000# ORB Extractor: Scale factor between levels in the scale pyramid ORBextractor.scaleFactor: 1.2# ORB Extractor: Number of levels in the scale pyramid ORBextractor.nLevels: 8# ORB Extractor: Fast threshold# Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.# Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST# You can lower these values if your images have low contrast ORBextractor.iniThFAST: 20ORBextractor.minThFAST: 7#--------------------------------------------------------------------------------------------# Viewer Parameters#--------------------------------------------------------------------------------------------Viewer.KeyFrameSize: 0.05Viewer.KeyFrameLineWidth: 1Viewer.GraphLineWidth: 0.9Viewer.PointSize:2Viewer.CameraSize: 0.08Viewer.CameraLineWidth: 3Viewer.ViewpointX: 0Viewer.ViewpointY: -0.7Viewer.ViewpointZ: -1.8Viewer.ViewpointF: 500
跑通orbslam一些注意事项:
http://blog.csdn.net/corfox_liu/article/details/51121392
这里有launch文件的详细介绍
http://blog.csdn.net/rosjjfdfd/article/details/49781295
在ROS下常用的主要有两种驱动包:usb_cam和uvc_cam
一、RGB摄像头的标定
RGB摄像头的标定想必大家都很熟悉,最常用的就是棋盘法。用待标定的摄像头拍摄多幅不同视角下的棋盘图片,将这些图片扔给OpenCV或Matlab,从而计算出该摄像头的内参以及对应于每一幅图像的外参。这里就写写我在标定过程中的一些感受和经验吧。
1、标定所用的棋盘要尽量大,至少要有A3纸的大小;
2、棋盘平面与摄像头像平面之间的夹角不要太大,控制在45度以下;
3、棋盘的姿势与位置尽可能多样化,但相互平行的棋盘对结果没有贡献;
4、用于标定的图片要多于20张;
5、注意设置好摄像头的分辨率,长宽比最好和深度图的相同,比如1280x960(4:3)。
二、深度摄像头的标定
深度摄像头看起来和RGB摄像头差别很大,实际上有很多相似之处。就Kinect而言,其通过一个红外散斑发射器发射红外光束,光束碰到障碍物后反射回深度摄像头,然后通过返回散斑之间的几何关系计算距离。其实,Kinect的深度摄像头就是一个装了滤波片的普通摄像头,只对红外光成像的摄像头(可以这么认为)。因此要对其标定,只需用红外光源照射物体即可,LED红外光源在淘宝上就20元一个。还有一点必须注意,在拍摄红外照片时,要用黑胶带(或其他东西)将Kinect的红外发射器完全挡住,否则其发出的散斑会在红外照片中产生很多亮点,不利于棋盘角点的检测。
kinect的内参
=== Intrinsic ===
554.952628 0.000000 327.545377
0.000000 555.959694 248.218614
0.000000 0.000000 1.000000
=== Distortion ===
0.025163 -0.118850 -0.006536 -0.001345
和Kinect深度摄像头的内参(这个对所有Kinect应该都是差不多的):
=== Intrinsic ===
597.599759 0.000000 322.978715
0.000000 597.651554 239.635289
0.000000 0.000000 1.000000
=== Distortion ===
-0.094718 0.284224 -0.005630 -0.001429
在这个过程当中发现了kinect 的matlab工具箱 和kinect calibration 的工具箱,可以当腾讯微云上下载,我也会把链接贴出来。
kinect 的matlab工具箱:
http://cn.mathworks.com/matlabcentral/fileexchange/30242-kinect-matlab
kinect calibration toolbox:
http://www.ee.oulu.fi/~dherrera/kinect/
http://sourceforge.net/projects/kinectcalib/
这里存一些 kinect matlab的一些教程:
http://jingyan.baidu.com/article/af9f5a2d10724343140a45da.html
使用ROS中openNI中自带的包进行标定
1、安装
sudo apt-get install ros-<rosdistro>-openni-camera这里的<rosdistro>就是你ros的版本。我的ros是indigo,所以:sudo apt-get install ros-indigo-openni-camera
如果安装正确就不用看下面的了
不正确的话:
rosdep install camera_calibrationrosmake camera_calibrationrostopic list
找到:
/camera/camera_info/camera/image_raw
就说明已经正确安装了
2、建议你已经会编译 usb_cam 我在跑orbslam的博客中有写到,请移步去看
并且能够理解usb_cam 的topic 是 、/usb_cam/image_raw
3、然后让下一个节点能够订阅这个话题
rosrun camera_calibration cameracalibrator.py --size 6x7 --square 0.024 image:=/usb_cam/image_raw camera:=/usb_cam
这里size 就是你棋牌格子的个数,我举个例子
这里分别是7*9 所有在填写的时候应该size 6*8, 因为最外层的不算啊
square 0.024 这个0.024就是一个方格的长度,我测量的是24mm 换算成米的话,就是0.024米
4、移动棋盘
不停的左右上下前后移动棋盘,直到吧这个calibrate这个按钮可以点亮
size 表示的格子的大小
skew 表示侧翻
x,y可能表示长度吧,
scale默认是0就好,不需要关心
点击calibrate这个按钮
然后
然后让0.11尽量靠近0之后按commit,就结束标定了
4、找到生成的yaml文件
进入home,然后按Ctrl + H
显示那些隐藏文件夹
我标定后里面的内容如下:
image_width: 640image_height: 480camera_name: head_cameracamera_matrix: rows: 3 cols: 3 data: [697.8452979278655, 0, 327.4718893339171, 0, 701.5696201683555, 201.8721432857928, 0, 0, 1]distortion_model: plumb_bobdistortion_coefficients: rows: 1 cols: 5 data: [0.01449668707747287, 0.09006209175368263, -0.01555938259828613, 0.005255809744315504, 0]rectification_matrix: rows: 3 cols: 3 data: [1, 0, 0, 0, 1, 0, 0, 0, 1]projection_matrix: rows: 3 cols: 4 data: [710.2444458007812, 0, 329.19645419468, 0, 0, 709.036865234375, 196.4578845252618, 0, 0, 0, 1, 0]
参考原文链接:
http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration#Running_the_Calibration_Node
http://wiki.ros.org/openni_camera
如果想要标定kinect的话,需要两步,1、先同样标定RGB,2 在标定IR (深度)摄像头
1、启动kinect
roslaunch openni_launch openni.launch
2、启动校正的节点
rosrun camera_calibration cameracalibrator.py image:=/camera/rgb/image_raw camera:=/camera/rgb --size 5x4 --square 0.024
这里不需要更改,因为kinect默认吧图片发布到camera/rgb/image_raw 这个上面
然后是同样的步骤:
image_width: 640image_height: 480camera_name: rgb_0000000000000000camera_matrix: rows: 3 cols: 3 data: [557.4671878091493, 0, 258.9542470035469, 0, 555.1274082338878, 220.5500740224768, 0, 0, 1]distortion_model: plumb_bobdistortion_coefficients: rows: 1 cols: 5 data: [0.1304774189138748, -0.06567783878217331, -0.008306341879221272, -0.05287386438832157, 0]rectification_matrix: rows: 3 cols: 3 data: [1, 0, 0, 0, 1, 0, 0, 0, 1]projection_matrix: rows: 3 cols: 4 data: [559.4676513671875, 0, 231.5585687537023, 0, 0, 597.3848876953125, 217.6638013910015, 0, 0, 0, 1, 0]
3、再来标定深度
rosrun camera_calibration cameracalibrator.py image:=/camera/ir/image_raw camera:=/camera/ir --size 6x7 --square 0.024
出现这个图:
这时由于红外光斑的影响是没有办法标定的,那么应该吧红外发射装置遮挡住,就像这样
然后接着去标定,就可以了
image_width: 640image_height: 480camera_name: depth_0000000000000000camera_matrix: rows: 3 cols: 3 data: [616.85214742582, 0, 275.6434852142577, 0, 602.4600482694285, 231.3793845153243, 0, 0, 1]distortion_model: plumb_bobdistortion_coefficients: rows: 1 cols: 5 data: [0.08954922725545461, 0.02125234407542443, -0.00350846157746074, -0.05364988623179562, 0]rectification_matrix: rows: 3 cols: 3 data: [1, 0, 0, 0, 1, 0, 0, 0, 1]projection_matrix: rows: 3 cols: 4 data: [621.77001953125, 0, 249.8842894859263, 0, 0, 644.28271484375, 229.9349429782742, 0, 0, 0, 1, 0]
参考链接:
http://wiki.ros.org/openni_launch/Tutorials/IntrinsicCalibration
到这里标定就结束了
双目的话,标定ros参考文档:
http://wiki.ros.org/camera_calibration/Tutorials/StereoCalibration
- kinect和联想E460自带相机标定
- kinect 2.0 SDK学习笔记(七)--matlab自带相机标定程序对kinect进行简单标定
- opencv 双目相机标定 自带例子程序的使用
- 运用kinect相机运行pcl自带的kinectfusion程序
- opencv 单目相机标定 自带例子程序的使用
- Kinect彩色相机标定(一):彩色图像的采集
- kinect环境配置和运行自带的例子
- Opencv相机标定和三维重建
- kinect标定
- kinect标定
- 相机标定
- 相机标定
- 相机标定
- 相机标定
- 相机标定
- 相机标定
- 相机标定
- 相机标定
- react开发必不可少的.babelrc配置
- 设置JNA库路径
- cisco packet tracer练习第二天
- [bigdata021- python3转换json数据的单引号双引号注意点]
- 使用jQuery对下拉列表框的选项进行移动demo
- kinect和联想E460自带相机标定
- redis 下载 编译 安装 运行
- 利用Tesseract实现javascript验证码识别
- bochs调试最常用的指令
- Java几种简单的正则表达式
- 【GDKOI2015】【JZOJ 4005】树 括号序 两种常见套路分析
- Leetcode-461. Hamming Distance
- bochs调试FAQ
- 浙江中医药大学-《数据结构》-串、数组算法设计