Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 针孔相机模型的坐标系_Opencv_Camera_Calibration_Perspectivecamera - Fatal编程技术网

Opencv 针孔相机模型的坐标系

Opencv 针孔相机模型的坐标系,opencv,camera,calibration,perspectivecamera,Opencv,Camera,Calibration,Perspectivecamera,最近,我一直在研究针孔相机模型,但我对OpenCV和“计算机视觉中的多视图几何”教科书提供的模型感到困惑 我知道下面的照片是一个简化模型,它切换了图像平面和相机框架的位置。为了更好地说明和理解,并考虑到主点(u0,v0),两个帧之间的关系是x=f(x/Z)+u0和y=f(y/Z)+v0 然而,我真的很困惑,因为通常图像坐标是第四象限坐标的形式,如下所示 我可以直接将以下定义中的(x,y)替换为上述“等效”针孔模型吗?该模型并不具有说服力 此外,如果对象位于摄影机坐标(当然,Z>f)的区域(+

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

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

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

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

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

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

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

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

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

无论我尝试哪种坐标系,它们都不是一些CV教科书提供的
x=f(x/Z)+u0
y=f(y/Z)+v0
形式

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


有人能指出我误解了什么吗?

我最终解决了这个问题,并通过实现Zhang的论文证明了我的解释是正确的,这篇论文是通过从未知方向观察平面进行灵活摄像机校准。国际计算机视觉会议(ICCV'99),希腊科孚,第666-673页,1999年9月

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

我们应该看到的是

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

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

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

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

x1=-f(X/Z)
y1=-f(Y/Z)
x1=f(X/Z)
y1=f(Y/Z)
现在,根据x-y坐标,方程是

x=f(X/Z)+u0
y=f(Y/Z)+v0
x=f(X/Z)+u0
y=f(Y/Z)+v0
这就是论文所描述的

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

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

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

x1=-f(X/Z)
y1=-f(Y/Z)
x1=f(X/Z)
y1=f(Y/Z)
现在,根据x-y坐标,方程是

x=f(X/Z)+u0
y=f(Y/Z)+v0
x=f(X/Z)+u0
y=f(Y/Z)+v0
这就是论文所描述的

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

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


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

实际上要简单得多:对象的坐标应该在相机世界坐标中,这是一个坐标系,其x轴和y轴平行于图像平面上的相应轴,例如:这里:

这个问题似乎离题了,因为它是关于数学的,而不是一个编程问题。@Aurelius哪里是这个问题的好地方?我认为这是正确的地方-事实上,这个问题旨在描述opencv相机模型的实现,它正是针孔相机模型。欢迎来到这里!在这里,我们通常试图避免仅链接的答案,因此答案可以在这里托管,以防目标失败。你可以保留链接,但是你能总结一下链接中的一些要点吗?