本文主要是介绍摄像机标定04_从单幅图像中提取世界坐标,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
从单幅图像中提取世界坐标
从原理上来说,使用标定后的摄像机可以在世界坐标系内进行未失真的测量。一般情况下只有使用多个摄像机在不同空间位置上同时拍摄同一物体的两幅或多幅图像,才可以进行这种测量,这种方式被称为立体重构。使用这种方法重构两幅图像中对应点的三维位置是可以实现的,因为两个摄像机光心与两幅图像中在成像平面上的对应点可以定义两条光线,这两条光线在三维空间中的交点就是图像中相应点的三维位置。
要是只有一个摄像机呢?
第一就是使用远心镜头拍摄被测物体;
第二就是如果使用针孔摄像机或线阵摄像机,此时必须将被测物体放在一个已知平面上(如传送带 )上。
这两种情况都可以通过光线(视线)与已知被测平面相交来解决问题。就算测量平面与光轴之间有一定的倾斜角度,也可以进行测量。
(1)使用远心镜头拍摄被测物体:这种情况下,平行投影完全不受深度信息的影响。因此,不能得到物体在摄像机坐标系中的 z 坐标。然而我们可以得到物体在摄像机坐标系中的
然后消除径向畸变的影响,得到成像平面上未失真的坐标 (u,v)T ,最终计算得到点 Pc 的坐标为:
注意上面的方法其实就相当于通过点 (u,v,0)T 并且于成像平面 (0,0,1)T 垂直的光线与平面 z=0 相交得到的交点。
(2)使用针孔摄像机确定目标物体的世界坐标稍微复杂一些,不过原理相同,也是将光线与已知平面相交。
在很多应用中,被测物体都放在摄像机前面的一个平面上,如传送带。如果我们想在这个平面上测量物体,那么就需要得到这个平面所定义的世界坐标系中的坐标。原理上讲,我们需要使用图像上某点所对应的的光线与该测量平面相交。所以我们需要知道定义该光线的两个点。从透视投影的模型中易知,第一个点就是摄像机的投影光心,在摄像机坐标系中的坐标为 (0,0,0)T 。第二个点的坐标我们需要将点 (r,c)T 从图像坐标系转换到成像平面坐标系中。为了得到该点在成像平面上对应的空间点坐标,我们要考虑成像平面在光心前,距离光心 f 处,因此,光线上第二个点的坐标为
为了将这条光线与测量平面相交,最好将光线 Lc 的方程建立在世界坐标系中,因为在世界坐标系中测量平面就是 z=0 。因此我们需要将两个点 (0,0,0)T 和 (u,v,f)T 转化到世界坐标系中。
以 Pc=RPw+T 的逆变换
式中, R−1=RT 是 Pc=RPw+T 中旋转矩阵 R 的逆矩阵。我们称转换后的光心为
Ow=RT((0,0,0)T−T)=−RTT 。将转换到成像平面上的点称为 Iw ,也就是说 Iw=RT((u,v,f)T−T) ,这时,这条光线在世界坐标系中表示为
式中, Dw 表示光线的方向向量。由此得到光线与测量平面 z=0 的交点了,交点的坐标为:
式中,
以上所讨论都是基于被测物体的测量平面的位姿已知。幸运的是由于我们使用平面标定对象,可以通过摄像机标定得到这个位姿。如果在用来标定的其中一幅图像中标定板直接放在测量平面上(如传送带)上,那么这幅图像中标定板的外参基本就等同于上面所需要的测量平面的位姿。当然只有标定对象厚度可以忽略的情况下,才能直接使用标定对象的外参作为测量平面的位姿。如果考虑到标定对象的厚度,这个外参确定的世界坐标系必须沿其 z 轴正方向在移动标定板的厚度。
除了可以将图像中某些点转换到世界坐标系中,例如将一维边缘位置或亚像素精度轮廓线转换到世界坐标系中,还可以将图像本身转换到世界坐标系中。这个转换得到的图像就相当于摄像机在于世界平面绝对垂直并且镜头不存在任何畸变的情况下拍摄得到的图像。这种图像校正在一些需要使用图像本身进行处理的应用中非常有用,例如需要在校正后的图像中进行区域处理、模块匹配或光学字符识别(OCR)等。为了进行图像校正,原理上我们在世界坐标系中平面
这篇关于摄像机标定04_从单幅图像中提取世界坐标的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!