(2D)齐次坐标的归一化

时间:2014-02-12 20:36:46

标签: computer-vision

我一直在用均匀坐标(x,y,w)表示的2D点进行一些操作。有时其中一个坐标变得非常大,这很容易影响后续结果。

例如,可以使用向量x乘积容易地计算确定交叉点。这可以产生大量数字。例如。 (50,100,1)x(-100,50,1)=(50,-150,12500)

我觉得这些结果应该以某种方式归一化。在上面的例子中,简单地将所有坐标除以12500似乎是明智的。一般来说,我可以看到两种方式:

  1. 除以具有最大绝对值(可能不是w)的坐标,或
  2. 除以w(如果w!= 0),以便每个点都表示为(x,y,0)或(x,y,1)。
  3. 所以我的问题是,哪种方式更好,为什么?

    我正在使用带有float值的c#,如果这有任何实际意义。

1 个答案:

答案 0 :(得分:1)

按组件的最大绝对值缩小是所有正确组件中更安全的选项 - 只要最大值> gt,您就不必担心溢出。 1.0。除以w只需要转换为欧几里德点。

顺便说一下,使用浮点数在内部计算中很少是一个好主意,尽管存储与您测量的物理量相对应的最终结果可能是有意义的。在进行几何计算时,根据我的经验,即使使用条件良好的算法,截断误差通常也能够足够快地传播,从而使单个精度的计算结果变得毫无价值。