在二维透视几何中,有两组主要坐标;笛卡尔坐标(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)
映射到笛卡尔不确定---这是完美的,因为在无限远点不存在在笛卡尔坐标系中。
由于这个缩放因子,这意味着齐次坐标可以表示为无限多种方式。您可以用齐次坐标将笛卡尔点(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')
完全相同。
感谢宝贵的答案。在图中,[u v]是图像平面中的图像坐标。可以附加1吗? [x y 1]是2d点还是3d点?为什么[x y 1]可以与R相乘? R是3d变换矩阵。 –
[此链接可能会解释一下](https://www.mathworks.com/help/vision/ug/camera-calibration.html)。我可能会编辑我的答案,以便更多地讨论这个问题---对不起,我想我有点回避你的主要问题,我没有意识到从二维到三维的转变,背后是混淆的主要观点。 –
从链接中,有三种坐标:世界坐标,相机坐标,图像坐标。我们应该怎么称呼[x y 1]?我还是不明白[x y 1]是一个2d点还是3d点。为什么[x y 1]可以与R相乘? R是3d变换矩阵。 –