单目相机标定___二、程序

单目相机标定___二、程序,第1张

相机的标定,现在基本上都是用张正友标定法,OpenCV中这些模块和函数也非常成熟。

只要照着这个流程做下来就行了。

当然首先要弄一个棋盘格做标定板,标定图片需要使用标定板在不同位置、不同角度、不同姿态下拍摄,最少需要3张,以10~20张为宜。

有两个独立轴坐标系模组,分别是 :

默认二者在垂直Z方向上在同一平面。

其中,Sb的轴上安装了一个相机,Sa没有相机。

其中,M' 是一个齐次矩阵,是P系到Sb系的变换,待定。

因为上式W值与相机拍照时的Sb轴位置无关,所以:

注意,这里是M'' (two primes),而不是M' (single prime)。M''也是一个齐次矩阵,值待定。

上两式可推得:

其中,M''' (three primes) 也是齐次矩阵,值通过九点标定确定.

可以看出,M'''相当于M''作用于P后,再平移beta,即:

这里,T()是代表平移的齐次矩阵。

以及beta的解法:

其中,A是最后所要求的Sa系的mark目的坐标,B是Sb系相机拍照mark时的实时XY轴坐标,P是相机拍照时所得的实时视觉定位像素坐标。

M''' 是Sb系的相机与轴的九点标定时的(Vision to Motion)的齐次仿射关系矩阵。

M 是 上文所述W到Sa系的齐次仿射关系矩阵。

Beta相当于,九点标定时,当mark位在相机视野相机P(0, 0)上时,拍照位的轴坐标。

先做相机所在模组Sb的相机九点标定,由九个像素坐标和九个对应的Sb轴坐标,得到仿射矩阵M''',令p0=(0, 0), 得到

Beta = M''' . p0,并存储以备用。

有了M'''和Beta,代入公式得到Sb系下的mark坐标表征向量W,多个位置不同的mark得到多个不同的W, 第i个W记为Wi。

使用适当的测量方式,得到Wi对应的Sa系下的坐标Ai,从而得到从W到A的仿射关系矩阵M。

至此,标定过程中的核心参数,M''', M, Beta 均得到了,代入公式,就能求得相机在任意位置B时,拍到的像素坐标为P,该点mark转移到Sa系下后,对应的坐标A了。

该坐标系统不算复杂,我用这个作为例子,是为了展示说明,如何比较严谨的用数学来论证坐标转换关系,尽量避免感性的推导想象。这样可以防止迷失在坐标转换中各种正负号的暴力试错上。

ros单目相机标定为啥xy到不了满格

1、相机标定第一步,准备一张标定板,打印出来下载

2、打开相机

利用usb_cam驱动 ,参考ros.wiki.usb_cam因为相机启动时自动检查矫正文件

3、打开矫正窗口

一般来说正常安装ros都是包含了camera_calibration,输入命令检查一下, 之后执行相机矫正py文件,从Damondback版本开始,ROS就支持使用多个标定板来进行标定了,如果你使用多个标定板进行标定,请输入复数个–size和–square参数来说明各个标定板的大小

4、采集样本数据

为了得到一个好的标定结果,应该使得标定板尽量出现在摄像头视野的各个位置里:标定板出现在视野中的左边,右边,上边和下边,标定板既有倾斜的,也有水平的,离得近的远的都要有,最好保证所有的进度条都是绿色满格的 。如果没有的话检查你命令输入是否输入正确,例如:8x6,中间不能用 "*" ,是字母 "x",--size,--square前面是两个"-",还要注意你的相机发出的话题是不是usb_cam/image_raw

y:表示标定板在视野中的上下位置。

size:标定板在占视野的尺寸大小,也可以理解为标定板离摄像头的远近。

skew:标定板在视野上下左右中的倾斜位置。

5、计算矫正参数

点击CALIBRATE按钮,稍等1-2分钟,可以在命令窗中看到标定参数,点击COMMIT将结果保存到电脑路径:/home/sun/.ros/camera_info/head_camera.yaml,再次启动相机时就不会有Camera Calibration文件找不到的警告了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12040650.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存