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

Jog*_*ong 1 opencv imaging perspectivecamera projective-geometry camera-calibration

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

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

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

通过附加1,这些坐标是否成为齐次坐标?有时在书籍和纸张中它由[x,yw]表示.什么时候使用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)

应用以下过程

在此输入图像描述

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

[uv] - > [xy] - > [xy 1] - > [XYW] - > [x'y']根据上述链处理坐标.它背后的原理是什么?

alk*_*asm 8

在二维透视几何中,有两组主要坐标; 笛卡尔坐标(x,y)齐次坐标,由三元组表示(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)到笛卡尔是未定义的 - 这是完美的,因为在笛卡尔坐标中不存在无穷远处的那个点.

由于这种缩放因子,这意味着齐次坐标可以用无数种方式表示.您可以在直角坐标点映射(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)值.见我的答案在这里的例子.

因此,移入齐次坐标的简单方法是附加1,但实际上,您可以附加1然后乘以任何标量; 你不会改变任何东西.您可以映射(x,y)(5x,5y,5),应用转换(sx',sy',s) = H * (5x,5y,5),然后获得(sx',sy')/s = (x',y')相同的笛卡尔点.