针孔相机模型的坐标系

时间:2014-04-08 13:23:24

标签: opencv camera calibration perspectivecamera

最近,我一直在研究针孔相机模型,但我对OpenCV提供的模型和“计算机视觉中的多视图几何”教科书感到困惑。

我知道下面的照片是一个简化的模型,用于切换图像平面和相机框架的位置。为了更好地说明和理解,并考虑主要点(u0,v0),两个帧之间的关系为x=f(X/Z)+u0y=f(Y/Z)+v0

enter image description here

然而,我真的很困惑,因为通常图像坐标是第四象限坐标的形式,如下所示!

我可以直接将以下定义中的(x,y)替换为上述“等效”针孔模型,这种模型并不具有说服力吗?

enter image description here

此外,如果一个物体位于相机坐标中的区域(+ X,+ Y)象限(当然,Z> f),在等效模型中,它应该出现在图像的右半平面上坐标。但是,这种物体在普通相机拍摄的图像中,应该位于左半部分。因此,对我来说这种模式是不合理的。

最后,我尝试基于原始模型推导出以下模型。

enter image description here

结果为x1=-f(X/Z)y1=-f(Y/Z)

然后,我试图找到(x2,y2)-coordinate和相机坐标之间的关系。 结果是x2=-f(X/Z)+u0y2=-f(Y/Z)+v0

在(x3,y3)-coordinate和相机坐标之间,结果为x3=-f(X/Z)+u0y3=f(Y/Z)+v0

无论我尝试哪种坐标系,都不是x=f(X/Z)+u0y=f(Y/Z)+v0的形式,这些是由一些简历教科书提供的。

此外,由于相同的原因,在(x2,y2) - 坐标或(x3,y3)坐标上的投影结果也是不合理的:在(+ X,+ Y,+ Z)区域中的对象相机坐标应“出现”在相机拍摄的图像的左半平面上。

有人能表明我误解了什么吗?

2 个答案:

答案 0 :(得分:7)

我终于找到了这个问题并证明了我的解释是正确的,通过实施Z. Zhang的论文,通过从未知方位观看飞机的灵活摄像机校准。国际计算机视觉会议(ICCV'99),希腊科孚岛,第666-673页,1999年9月

让我从头开始解释一切。 下图是原始针孔相机型号和图像传感器上的投影结果。但是,这不是我们应该在“图像”上看到的。

figure1

我们应该看到的是

figure2

比较图1和图2,我们应该注意到这张照片是上下左右。 我在CMOS传感器公司工作的朋友告诉我,有内置功能可以自动翻转感知图像。

由于我们想要模拟图像坐标和世界坐标之间的关系,我们应该直接将图像传感器视为投影平面。令我困惑的是,投影总是局限于投影面,这误导我几何理解推导。

现在,我们应该从图像传感器的“背面”看作蓝色(View Perspective)箭头。

结果如图2所示.x1-y1坐标现在分别向右和向下,因此方程

x1=-f(X/Z)
y1=-f(Y/Z)

现在,就x-y坐标而言,方程是

x=f(X/Z)+u0
y=f(Y/Z)+v0

这是论文描述的内容。

现在,让我们来看一下在现实世界中不存在但有助于视觉解释的等效模型。

enter image description here

原则是一样的。 从投影中心向图像平面看。 结果是

figure 4

其中投影的“F”是右侧左侧。 方程是

x1=f(X/Z)
y1=f(Y/Z)

现在,就x-y坐标而言,方程是

x=f(X/Z)+u0
y=f(Y/Z)+v0

这是论文描述的内容。

最后但并非最不重要的是,由于世界坐标中的单位是mm或英寸而图像坐标中的单位是像素,因此有一些缩放因子,其中一些书籍描述为

x=a*f(X/Z)+u0 
y=b*f(Y/Z)+v0

x=fx(X/Z)+u0
y=fy(Y/Z)+v0

其中fx=a*ffy=b*f

答案 1 :(得分:1)

它实际上要简单得多:对象的坐标应该在相机世界坐标中,这是一个坐标系,其x轴和y轴平行于相应的轴上。像平面,例如在这里:http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/OWENS/LECT9/node2.html