深度相机标定

参考

计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换 -https://blog.csdn.net/chentravelling/article/details/53558096
相机标定原理 https://www.cnblogs.com/Jessica-jie/p/6596450.html

http://wiki.ros.org/openni_launch/Tutorials/IntrinsicCalibration

http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration

准备标准黑白棋格盘

下载黑白棋盘 来源:http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration
		 
打印棋盘(可以A4纸打印,粘贴在硬纸板上)
		 
测量棋盘单元(黑色或白色正方形)边长(A4纸的在0.025 m 左右)

步骤

安装 sudo apt install ros-kinetic-camera-calibration

启动openni驱动(kinetic)

对于kinetic则安装和启动:
roslaunch openni_launch openni.launch

启动openni的驱动(Xtion2)

对于Xtion2则:
roslaunch openni2_launch openni2.launch

openni2的驱动安装:

sudo apt-get install libopenni2-dev libopenni2-0
sudo apt-get install ros-kinetic-openni2-camera
sudo apt-get install ros-kinetic-openni2-launch

或者下载ASUS-Linux-x64-OpenNI2.2,但是不建议,容易安装失败
NiViewer2 #则会显示 RGB图 和 深度图

进行校准,RGB相机

rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.025 image:=/camera/rgb/image_raw camera:=/camera/rgb
	 
size是黑白格的横纵点数,square是黑白格边长,image是图像节点名称,camera是相机名称

标定界面出现后,按照x(左右)、y(上下)、size(前后)、skew(倾斜)等方式移动棋盘,知道x,y,size,skew的进度条都变成绿色位置,此时可以按下CALIBRATE按钮,等一段时间就可以完成标定。
	 
点save成功后,可以在保存的目录下查看具体的矫正图片和参数
然后 commit(commit之后,启动摄像头之后会自动加载)。

IR(深度)相机

rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.025 image:=/camera/ir/image_raw camera:=/camera/ir
	 
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.025 image:=/camera/depth/image_raw camera:=/camera/depth
	 
斑点图案使得不可能在IR图像中准确地检测棋盘角。最简单的解决方法是用一两个便签纸覆盖投影机(最左边的单独的开口),大多散布斑点。一个理想的解决方案是完全阻挡投影机,并提供一个单独的红外光源。良好的照明源包括阳光,卤素灯或白炽灯。
	 
Kinect相机驱动程序不能同时传输IR和RGB图像。它将根据用户数量决定两者中的哪一个流,因此在进行IR校准之前杀掉订阅RGB图像的节点(rosnode list | grep rgb | xargs rosnode kill)

点save成功后,可以在保存的目录下查看具体的矫正图片和参数
然后 commit 
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
深度相机标定是指校准深度相机,以准确地获取场景中物体的距离信息。在Python中,我们可以使用OpenCV库来实现深度相机标定深度相机标定的过程包括收集一系列已知距离下的图像,使用这些图像计算相机的内部参数和畸变系数。下面是一个使用Python和OpenCV进行深度相机标定的大致步骤: 1. 收集标定图像:使用深度相机拍摄一组标定图像,要求图像中有已知距离的特征点。可以使用一个标定板,标定板上通常有一些等距标记,或者斑点等特征。 2. 检测角点:对于每张标定图像,使用OpenCV的cornerSubPix()函数检测标定板的角点坐标。这些角点将在后续计算中用来估算相机的内部参数和畸变系数。 3. 计算相机的内部参数和畸变系数:使用OpenCV的calibrateCamera()函数来计算相机的内部参数和畸变系数。这个函数会使用标定板的角点坐标和已知的标定板上的特征点距离,通过优化算法来估计相机的内部参数和畸变系数。 4. 验证标定结果:使用标定的相机参数和畸变系数来对其他图像进行畸变矫正和深度测量。可以通过测量标定板上特征点的距离与实际已知距离的差异来验证标定结果的准确性。 总结:深度相机标定是通过收集已知距离下的图像并计算相机内部参数和畸变系数,以准确测量场景中物体的距离。在Python中,可以使用OpenCV库提供的函数来实现深度相机的标定。以上是一个大致的标定流程,具体实现还需要根据实际情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值