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

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

干货第一时间送达

30d164854895a623dc25f906837b1bcb.png

整理丨古月居

1d79bc215de7370ecce3f6e33ed9eb12.png

相机的参数

参考:

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

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

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

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

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

45ac7d0605bebbebacd0336ce4e60776.png

254f9510e9ce85ed3b85c9aa210adf39.png

补充知识:齐次坐标

参考:相机标定详细讲解

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

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

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

6d60b7ae5de1d39d5ea68c7f1baf9597.png

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

cd52d3cfcb0ee455b2264df5fa595f9f.png

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

9e037e5ad3159b76d7bbb5bf231c6ad8.png

写成矩阵的形式:

ff5378619fe3d322dbe37ce8eb39422f.png

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

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

1.1 小孔成像原理

8952260308131cd195fa736f00d303f2.png

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

be530daf2299cf2f296bb475e1c3d465.png

8eb05f7768a29898b1445590d4b8e6e3.png

950558c8aa3839fbbf75792378d9edd5.png

1.2 相机外参

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

2a91e2d7f9ada967e6c707dc98483da0.png

1.3 相机内参

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

996053ccbc28f12dd804e0f65b3303f5.png

629501d5a2b35dbe7a2cf5f2ecde4201.png

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

2e66bda802111e5462e5047f2c442269.png

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

矩阵表示为:

b9b83f9b4a36f0e7e55ae00c8e3d69dd.png

1.5 畸变参数

6585d914a1cedc6c629d12e2db22a4fb.png

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

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

矫正公式:

48ea6cf1fec82488626dbad483b84645.png

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

7fa2d69538609bac830754ec46343e96.png

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

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


矫正公式:

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

ab3c97de496f1c48db902f6b9d443dac.png

/depth/camera_info

387bd42a7a388387a95989948b21b1d0.png

5c1931a27646066ab5c82667e29afb2a.png

rgb/camera_info

8fdf282e18c6a60e7f949deb2dc8c73e.png

17ca4c01b408f0a471778a7c791dab81.png

2. 相机内参标定

2.1 相机标定方法

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

09cde6c184b65a387ebc316ec68f9556.png

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

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

标定流程:

1.准备棋盘格

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

7138e657254367d00ed8eef7ea3d027c.png

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设置为了棋盘格数而非其标定角点的数目。

608ac895fe90b7ad7529276cff269ea4.png

4.移动标定板


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

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

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

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

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

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

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

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

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

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

bc885b29ed1d0e673031cc6553855c21.png

2.3 查看标定结果

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

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

9a941646b416eed07748ed2c6508d8e2.png

如果对标定结果满意,点击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视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

b22ce45efef9a96a5a89f1fe17530489.png

▲长按加微信群或投稿

052ce140cdc14a5c49a96f713b15380e.png

▲长按关注公众号

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

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

19a9d1758c4b237058cf13984cc475d7.png

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

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

  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值