单目相机标定(分别利用ROS和Matlab)

1. ROS中相机标定
1.1 开始之前
做以下准备:
* 一个已知维度的棋盘,下载链接
>注意:8*6 的棋盘代表8*6个节点,也就是说9*7个黑白方块
* 5m*5m 的光线充足的区域
* 可以通过 `ROS` 发布图像的相机

1.2 编译  
获得依赖项并编译驱动

rosdep install camera_calibration

列出topics,

rostopic list

这回列出所有topics,查看是否有  image_raw topic,  ROS 缺省的topics一般是以下两种:
/camera/camera_info
/camera/image_raw

1.3 运行校准节点
 加载要校准的topic:  

rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/camera/image_raw camera:=/camera

 这条语句会打开校准窗口, 窗口的棋盘会被高亮显示,如下所示:
 checkerboard
若不能打开窗口,运行以下语句:

 --no-service-check

(1.4 双棋盘)
若用多个棋盘,则需要多个`--siz` 和 `--square`参数,同时确保棋盘的维度不同来保证相机可以区分他们。

1.5 移动棋盘
为了更好地校准, 需要在相机前移动棋盘, 例如:
*  把棋盘放到视野的左右前后: X-- 代表视野的左右;Y-- 代表视野的上下; Size-- 代表距离相机的距离,即棋盘大小;  skew-- 代表棋盘的倾斜度
* 棋盘应该覆盖大部分视野
* 棋盘向左右前后倾斜
每一步都要举起棋盘直到窗口的棋盘高亮显示为止  

left


当你移动棋盘的过程,你会看到窗口右边的柱不断变长,当`CALIBRATE`按钮变亮时,点击它校准。
这个过程可能会需要一会儿,期间窗口可能会变黑,请耐心等待。
 
1.6 校准结果  
你会在终端窗口看见校准结果(注释里面有参数解释)并在校准窗口看到校准的图片。  

D =  [-0.33758562758914146, 0.11161239414304096, -0.00021819272592442094, -3.029195446330518e-05]
K =  [430.21554970319971, 0.0, 306.6913434743704, 0.0, 430.53169252696676, 227.22480030078816, 0.0, 0.0, 1.0]
R =  [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
P =  [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0]
# oST version 5.0 parameters


[image]

width
640

height
480

[narrow_stereo/left]

# 相机内参矩阵
camera matrix
430.215550 0.000000 306.691343
0.000000 430.531693 227.224800
0.000000 0.000000 1.000000

# 相机畸变矩阵
distortion
-0.337586 0.111612 -0.000218 -0.000030 0.0000

# 矫正矩阵,一般为单位矩阵
rectification
1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000

# 投影矩阵,即旋转矩阵和平移矩阵
projection
1.000000 0.000000 0.000000 0.000000
0.000000 1.000000 0.000000 0.000000
0.000000 0.000000 1.000000 0.000000


如果你对校准结果满意,点击`COMMIT`按钮, 这回将校准的参数发送到相机永久储存,校准窗口将会退出,同时终端窗口写着:`writing calibration data to ...`  

1.7 创建`.yml`文件
之后你可以调用这个文件加载任意相机  

 

 

2. Matlab中相机标定

将带有棋盘的图片存储下来

1. 选择Matlab中标定相机的工具,如图左下角所示:

2.2 导入图片

点击Add Images 导入图片,此处可以导入多张图片

设置棋盘格的大小:

导入的图片可能有无效的会被自动检测:

点击窗口上面的Calibrate 的按钮,下图为标定结果

点击右上角Export camera 可以将标定结果显示到命令行窗口:

 

参考文献
ROS
How to Calibrate a Monocular Camera

Matlab相机标定

相机标定原理

ROS单目相机标定是一种通过使用ROS(机器人操作系统)来校准单目相机的方法。校准相机的目的是确定相机的内部参数(例如焦距和畸变系数),以便在图像处理和计算机视觉应用正确地测量和估计物体的位置和大小。为了进行ROS单目相机标定,可以参考ROS Wiki提供的教程。首先,需要安装相应的ROS软件包,例如使用以下命令安装ROS Melodic版本的相机标定软件包: sudo apt-get install ros-melodic-camera-calibration 然后,确保相机已经通过ROS发布了图像,可以使用以下命令列出ROS主题以检查图像是否已发布: rostopic list 通过执行以上步骤,您就可以开始进行ROS单目相机标定了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [ROS单目相机标定](https://blog.csdn.net/weixin_44709392/article/details/124169293)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [1.ROS机器视觉:单目摄像头的调用与标定](https://blog.csdn.net/wzfafabga/article/details/127206880)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值