7

最近一直在研究针孔相机模型,但是被OpenCV提供的模型和《计算机视觉中的Multiple View geometry》教科书弄糊涂了。

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

在此处输入图像描述

但是,我真的很困惑,因为通常图像坐标是以下第四象限坐标的形式!

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

在此处输入图像描述

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

最后,我尝试在原始模型的基础上推导如下。

在此处输入图像描述

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

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

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

无论我尝试过哪个坐标系,都不是一些 CV 教科书提供的x=f(X/Z)+u0and的形式。y=f(Y/Z)+v0

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

谁能指出我误解了什么?

4

2 回答 2

8

我终于弄清楚了这个问题,并通过实施 Z. Zhang 的论文,通过从未知方向查看平面进行灵活相机校准来证明我的解释是正确的。计算机视觉国际会议 (ICCV'99),希腊科孚岛,第 666-673 页,1999 年 9 月

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

图1

我们应该看到的是

图2

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

由于我们要对图像坐标和世界坐标的关系进行建模,所以我们应该直接将图像传感器视为一个投影平面。以前让我感到困惑的是投影总是局限于投影的一面,这误导了我从几何上理解推导。

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

结果如图2。x1-y1坐标现在分别向右和向下,所以方程是

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

现在,就 xy 坐标而言,方程为

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

这就是论文所描述的。

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

在此处输入图像描述

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

图 4

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

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

现在,就 xy 坐标而言,方程为

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

这就是论文所描述的。

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

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

或者

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

其中fx=a*f,fy=b*f

于 2014-05-14T09:39:06.157 回答
2

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

于 2016-01-07T17:47:14.933 回答