均匀坐标是通过在摄像机成像中附加1的图像坐标来表示的

时间:2017-07-02 15:32:05

标签: opencv camera-calibration imaging perspectivecamera projective-geometry

在相机成像中,点坐标有几个术语。

世界坐标:物理单位中的[X,Y,Z]

图像坐标:像素中的[u,v]。

通过附加1,这些坐标是否成为齐次坐标? 有时在书籍和纸张中它由[x,y w]表示。什么时候使用w?何时使用1?

在函数initUndistortRectifyMap中,http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#void%20initUndistortRectifyMap(InputArray%20cameraMatrix,%20InputArray%20distCoeffs,%20InputArray%20R,%20InputArray%20newCameraMatrix,%20Size%20size,%20int%20m1type,%20OutputArray%20map1,%20OutputArray%20map2)

应用以下流程

enter image description here

坐标是否有一个术语[x y 1]? 我不明白为什么R可以应用于[x y 1]?在我看来,R是3D的转变。 [x y 1]是一个2d点还是一个3d点?

[u v] - > [x y] - > [x y 1] - > [X Y W] - > [x' ý'] 根据上述链处理坐标。它背后的原理是什么?

1 个答案:

答案 0 :(得分:7)

在二维透视几何中,有两组主要坐标;笛卡尔坐标(x,y)homogeneous coordinates由三(x,y,z)表示。这个三元组可能会令人困惑 - 它不像笛卡儿(x,y,z)这样的三维点。因此,一些作者对同类点使用了不同的表示法,例如[x,y,z](x:y:z),这种符号因我们稍后会遇到的原因而更有意义。

第三个坐标仅用于一个目的,即向域中添加一些点,即无穷远处的点。对于双(x,y),无法表示无穷大,至少不能表示数字和我们可以轻松操作的方式。但这对计算机图形学来说是一个问题,因为平行线当然非常普遍,欧几里德几何学的公理是平行线在无穷远处相遇。并行线很重要,因为计算机图形中使用的变换是线保留。当我们用单应性或仿射变换扭曲点时,我们以将线映射到其他线的方式移动像素。如果这些线碰巧是平行的,就像它们在欧几里德或仿射变换中一样,我们使用的坐标系需要能够代表它。

因此,我们使用齐次坐标(x,y,z)的唯一目的是将这些点包含在无穷大中,由三元组(x,y,0)表示。因为我们可以为每个笛卡尔对在这个位置加零,所以我们在每个方向上都有一个无穷远点(方向由该点的角度给出)。

但是,由于我们有第三个值,也可以是零以外的任何其他数字,所有这些附加点是什么? (x,y,2)(x,y,3)之间有什么区别?如果点(x,y,2)(x,y,3)不在无穷远处,则它们最好等于其他一些笛卡尔点。幸运的是,有一种非常简单的方法可以将所有这些同类三元组映射到笛卡尔对中,并且方式很好:简单地除以第三个坐标。然后(x,y,3)被映射回笛卡尔(x/3, y/3),并且(x,y,0)到笛卡尔的映射是未定义的 - 这是完美的,因为无穷远处的那个点不存在< / em>在笛卡儿坐标系中。

由于这个缩放因子,这意味着齐次坐标可以用无数种方式表示。您可以在同构坐标中将笛卡尔点(x,y)映射到(x,y,1),但您也可以将(x,y)映射到(2x, 2y, 2)。请注意,如果我们除以第三个坐标返回到笛卡尔坐标,我们最终会得到相同的起点。当你乘以任何非零标量时,这通常都是正确的。因此,这个想法是笛卡尔坐标由一对值唯一表示,而齐次坐标可以用无限多种方式表示。 是一些作者使用[x,y,z](x:y:z)的原因。方括号通常用于数学中以定义等价关系,对于齐次坐标,[x,y,z]~[sx,sy,sz]用于非零s。同样地,:通常用作比率,因此三个点的比率将等于任何标量s乘以它们。因此,无论何时您想要从齐次坐标转换为笛卡尔坐标,只需将最后一个数字除以它就像一个缩放因子,然后只需拉出(x,y)值即可。例如,请参阅我的回答here

所以进入齐次坐标的简单方法是追加1,但实际上,你可以追加1然后乘以任何标量;你不会改变任何事情。您可以将(x,y)映射到(5x,5y,5),应用转换(sx',sy',s) = H * (5x,5y,5),然后将{笛卡尔点]全部设为(sx',sy')/s = (x',y')