勇哥看到下面这图的时候,突然对什么世界坐标这个概念模糊起来。
一直以来,我以为所谓机器视觉里面的世界坐标是指摄像机视野内看到的对象上面的坐标。
但是上图中世界坐标的定义显然跟相机没啥子关系。
其实,世界坐标是我们自己定义的参考坐标而已,你可以把它定义在任何位置。
它可以在标定板上面,这时候它是为了描述相机的位置而被引入的参考坐标。(后面有示例)
它也可以是在其它任何位置,这取决于你的目的。
我们在halcon标定助手标定的时候,每张标定板图片上的世界坐标都是不同的。
最后这全部图片合在一起,halcon会算出相机的外参--世界坐标系与相机坐标系间的相对位姿(平移+旋转)。
后面引用的matlab的相机标定工具箱用的是棋盘格标定,每张图中标定块都在一个平面内。
halcon的则要复杂些,它的每张图中的标定块可能不在一个平面内。
下面引用matlab的棋盘格标定的例子:
这是matlab的标定工具箱,标定后所呈现的一张图,在标定时它将角点左上角坐标定义为世界坐标的原点,
平行方向的为X轴,垂直方向的为Y轴,以这个为世界坐标,计算外参,因为标定需要15-20张不同角度的图片,
因此,每张图所对应得世界坐标也是不同的。
第三张是我自己拍摄的19张不同角度的标定板图片,所得到得相对位姿的图像显示。
在这个例子里我们看到世界坐标是位于标定板上的,用于推算相机外参用的。
但是请注意世界坐标是我们自己定义的,可以在任何位置。
说个题外话:halcon的标定助手的标定,与matlab空上棋盘格标定有两个地方不同。
一是halcon的标定片不是放置同一个平面上的,二是halcon助手起始状态下填写的内参是硬件属性,但是标定完成后会计算出实际内参。
相机内参、外参、世界坐标系三者可以算出像素坐标。
也就是相机内参x相机外参x世界坐标系=Zc x 像素坐标系
其中,Zc是相机坐标系下的Z值,也就是相机坐标系与世界坐标系间的高度,也有的教程把它写为s,都是一样的。

