机器人抓取—— 相机参数与标定 camera_calibration

发布时间:2023-04-21 09:00

点击上方“计算机视觉工坊”,选择“星标”

干货第一时间送达

\"30d164854895a623dc25f906837b1bcb.png\"

整理丨古月居

\"1d79bc215de7370ecce3f6e33ed9eb12.png\"

相机的参数

参考:

https://blog.csdn.net/weixin_43206570/article/details/84797361

摄像机标定(Camera calibration)是从空间点及其对应的像素点,获得相机的位置信息和内部参数信息的过程。

  • 相机外参:从世界坐标坐标系到相机坐标系

  • 相机内参:从相机坐标系到图像坐标系

简要总结:单目相机共有 16 个参数:

\"机器人抓取——

\"254f9510e9ce85ed3b85c9aa210adf39.png\"

补充知识:齐次坐标

参考:相机标定详细讲解

https://www.jianshu.com/p/7d97fccd79bb

齐次坐标系:能够明显的区分点与向量,并且便于计算机做图形处理时进行仿射变换的坐标系。

例如,在欧式空间,表示一个三维的点和一个三维的向量可以采用如下的方法:

\"6d60b7ae5de1d39d5ea68c7f1baf9597.png\"

由于向量只有方向和大小,如果只给出( x , y , z ) , 如何确定这是向量还是点呢?

\"机器人抓取——

P可以看做是一个相对于原点的位移,那么

\"9e037e5ad3159b76d7bbb5bf231c6ad8.png\"

写成矩阵的形式:

\"机器人抓取——

可以看到,点和向量区分的方式是最后一个数值是否为1。

从普通坐标系变换到齐次坐标系,如果是点( x , y , z ) 则变换为( x , y , z , 1 ),如果是向量( x , y , z ) 则变换为( x , y , z , 0 ) 。

1.1 小孔成像原理

\"机器人抓取——

相机中有四个坐标系,分别为{world},{camera},{image},{pixel}

\"机器人抓取——

\"机器人抓取——

\"机器人抓取——

1.2 相机外参

从{world}到{camera}坐标系变换

\"机器人抓取——

1.3 相机内参

从{camera}到{image} 坐标系变换

\"机器人抓取——

\"机器人抓取——

从{image}到{pixel}的坐标变换

\"机器人抓取——

1.4 综合:从{world}到{pixel} 的坐标转换

矩阵表示为:

\"机器人抓取——

1.5 畸变参数

\"机器人抓取——

径向畸变(桶形畸变和枕形畸变)

径向畸变产生原因:光线在远离透镜中心的地方偏折更大。

矫正公式:

\"48ea6cf1fec82488626dbad483b84645.png\"

式中,( x , y ) 是畸变后图像像素点的坐标, (x_{cor},y_{cor})是理想的无畸变的坐标(图像坐标系),r是该点距成像中心的距离

\"机器人抓取——

切向畸变 (薄透镜畸变和离心畸变)

切向畸变产生原因:透镜制造上的缺陷使得透镜不完全平行于图像平面,这种现象发生于成像仪被粘贴在摄像机的时候。


矫正公式:

\"c8cc76ee1b220e078b3a436f574c5b05.png\"

由此得到相机的5个畸变参数:D ( k 1 , k 2 , k 3 , p 1 , p 2 ) 

对于质量比较好的相机来说,切向畸变很小,可忽略,径向畸变系数k 3也可忽略,只计算k 1 , k 2 两个参数。张正友标定中就默认p 1 , p 2 为0。

1.6 一个实例:Azure kinect 相机的参数

K4A Calibration Blob:


RGB Camera Format: bgra


RGB Camera Resolution: 720P

Depth Camera Mode: NFOV_UNBINNED

\"机器人抓取——

/depth/camera_info

\"机器人抓取——

\"机器人抓取——

rgb/camera_info

\"机器人抓取——

\"17ca4c01b408f0a471778a7c791dab81.png\"

2. 相机内参标定

2.1 相机标定方法

总上所述,单目相机共有 16 个参数:

\"机器人抓取——

通常所说的相机标定即标定相机的内参。一般采用张正友标定法。

张正友标定法只考虑了径向畸变,没有考虑切向畸变。

标定流程:

1.准备棋盘格

棋盘格黑白间距已知,可采用打印纸或者购买黑白棋盘标定板(精度要求高)。

\"机器人抓取——

2.拍摄若干张标定板图片

此处分两种情况:

(1) 标定畸变系数和相机内参,拍摄照片需要包含完整棋盘,同时需要不同距离,不同方位,同时需要有棋盘不同倾斜角度。

(2) 标定畸变系数,相机内参和相机外参,图片包含上述要求,同时标定程序生成结果中每张照片会计算一个相机外参数因此根据实际需求,增加几张棋盘在工作位置的照片。(相机外参建议采用solvePnP函数获取)

3.检测图片中的棋盘格内角点,提取亚像素角点信息

4.估算理想无畸变的情况下,五个内参和六个外参。

5.应用最小二乘法估算实际存在径向畸变下的畸变系数。

6.极大似然法,优化估计,提升估计精度。

2.2 camera_calibration

  • ros:camera_calibration

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

  • ros:How to Calibrate a Monocular Camera

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

camera_calibration 是一个ros功能包,可以方便快捷的完成相机标定。

标定步骤如下(未亲测):

首先,请下载标定板。教程中使用的是8X6,边长为108mm的棋盘标定板。

由于标定过程使用的是棋盘内部的角点进行,所以实际上我们使用的是9格X7格的棋盘标定板。

请确保标定环境拥有一个5m×5m的无遮挡环境。

1.安装 camera_calibration

rosdep install camera_calibration
rosmake camera_calibration

或者下载github:camera_calibration包,放到catkin_ws/src下,编译:

https://github.com/ros-perception/image_pipeline/tree/noetic/camera_calibration

cd catkin_ws
catkin_make

2.启动相机驱动,如 azure kinect 相机为:

roslaunch azure_kinect_ros_driver driver.launch
rostopic list #可以看到相机发布 /rgb/image_raw ,/rgb/camera_info 等话题

3.运行标定结点。


需要加载你要标定的相机的 image topic。

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

来运行标定结点的python脚本,其中

  • -–size 8x6 为当前标定板的大小。

  • -–square 0.108为每个棋盘格的边长,单位为米。

  • image:=/rgb/image_raw 标定当前订阅图像来源自名为/rgb/image_raw的topic。

  • camera:=/rgb为像机名。

之后,将会出现如下图所示的UI。

如果没有打开,请在启动标定节点时添加 --no-service-check 参数,来检查服务结点是否工作。

如果没有看到如图所示的彩色点,请确认–size参数是否正确,尤其注意是否将size设置为了棋盘格数而非其标定角点的数目。

\"机器人抓取——

4.移动标定板


为了达到良好的标定效果,需要在像机周围移动标定板:

  • 移动标定板到画面的最左、右,最上、下方

  • 移动标定板到视野的最近和最远处

  • 移动标定板使其充满整个画面

  • 保持标定板倾斜状态并使其移动到画面的最左、右,最上、下方

当标定板移动到画面的最左、右方时,此时,UI的x会达到最小或满值。

同理,y指示标定板的在画面的上下位置,size表示标定板在视野中的距离。

在每个步骤中,保持棋盘格静止,直到图像在标定窗口中高亮显示。

当calibration按钮亮起时,代表你已经有足够的数据进行摄像头的标定,此时请按下calibration并等待一分钟左右。

最后生成到/tmp/calibrationdata.tar.gz一个包,包内如下图。

\"机器人抓取——

2.3 查看标定结果

标定完成后,将在终端中看到标定结果,并在标定窗口中看到校准后的图像。

如果标定成功,可以看到本来弯曲标定板的边变成了直线。

\"机器人抓取——

如果对标定结果满意,点击Save将结果保存到默认文件夹,点击COMMIT。

数据会自动导入下次启动相机驱动节点时,会自动调用保存的.yaml。

使用camera_calibration_parsers可以进行标定文件格式转换。

版权声明:本文为CSDN博主「zxxRobot」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

https://blog.csdn.net/zxxxiazai/article/details/108168120

备注:作者也是我们「3D视觉从入门到精通」知识特邀嘉宾:一个超干货的3D视觉学习社区

本文仅做学术分享,如有侵权,请联系删文。

重磅!计算机视觉工坊-学习交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有ORB-SLAM系列源码学习、3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、深度估计、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

\"机器人抓取——

▲长按加微信群或投稿

\"机器人抓取——

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列手眼标定相机标定、激光/视觉SLAM、自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

\"机器人抓取——

 圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号