针孔相机投影矩阵解释

3

enter image description here我在阅读有关针孔相机及其投影矩阵设置的材料后,尝试解决附加的问题,但仍不确定是否理解所有数学内容。

在所附的问题中,当将相机的COP移动到-2Zp时,我基本上增加了相机的焦距范围,从而得到与给定矩阵相同的矩阵,只是现在第3行的第3个元素是1/3Zp而不是1/Zp,这样是正确的吗?

如果是这样,如何计算t的新位置?将其乘以我得到的新矩阵会得到(0,Yp,2/3)T。解决方案是确保最后一个数字为1而不是2/3,以获得(0,2Yp / 3,1)。有人可以解释一下在这种情况下齐次坐标是如何工作的吗?

除此之外,c相当清楚,我将得到正交投影。有人可以帮忙解决d部分吗?

2个回答

1

可能会有所帮助,画一个图。忽略x坐标可以使一切变得更简单,这样就将所有内容放在二维平面上。在这个更简单的图中,要找到点t在平面PP上的投影,只需从针孔位置到该点画一条线即可。这使得从图中非常容易计算出每个点应该投影到哪里。您可以使用此方法检查矩阵计算结果。

如果我们在原点处有一个针孔,而平面距离为3Zp,则矩阵为一半的答案。

    ( 1   0   0     0   )
M = ( 0   1   0     0   )
    ( 0   0   1/3Zp 0   )

只有当针孔位于原点时,此方法才有效。在a)部分中,它并不是。

你需要进行平移操作。在a)情况下,将所有内容平移,使COP2位于原点,应用投影,然后应用平移的逆运算。如果我们向M添加第四行,事情会变得更容易。

    ( 1   0    0      0 )
M = ( 0   1    0      0 )
    ( 0   0    1      0 )
    ( 0   0    1/3Zp  0 ) Note modified form.

沿着z轴进行距离d的翻译如下:
    ( 1   0   0   0 )
T = ( 0   1   0   0 )
    ( 0   0   1   d )
    ( 0   0   0   1 )

逆操作将会简单地执行

    ( 1   0   0   0 )
T'= ( 0   1   0   0 )
    ( 0   0   1  -d )
    ( 0   0   0   1 )

要获得最终的投影矩阵,请找到:
T' M T.

最后,我们通过舍弃第三个坐标从4D(x,y,z,w)变为3D(x,y,w)。您可以通过乘以一个3X4矩阵来实现这一点。
请注意,正确的透视投影形式,请参见变换矩阵部分透视投影
为了使事情更加明确,假设a=Zp。翻译完成。
    ( 1   0   0   0    )
T = ( 0   1   0   0    )
    ( 0   0   1   -2 a )
    ( 0   0   0   1    )

在原点投影到平面3Zp上的结果是:
    ( 1   0    0        0 )
M = ( 0   1    0        0 )
    ( 0   0    1        0 )
    ( 0   0    -1/(3a)  0 )

找到将T'旋转的矩阵M,结果为:
    ( 1   0    0       0    )
N = ( 0   1    0       0    )
    ( 0   0   1/3    -2/3 a )
    ( 0   0  -1/(3a)  2/3   )

我们申请我们的两点。
    (  0  )   (  0  )    (  0  )
 N  (  Yp ) = (  Yp ) -> (  Yp )
    ( -a  )   ( -a  )    ( -a  )
    ( 1   )   (  1  )

    (  0  )   (  0     )    (  0      )
 N  (  Yp ) = (  Yp    ) -> (  3/4 Yp )
    ( -2a )   ( -4/3 a )    ( -a      )
    ( 1   )   (  4/3   )

最后一步是除以w,这样我们就得到了落在平面z = -a = -Zp上的(x,y,z)坐标。这与我们从图中得到的相符。如果您想,可以删除N的第三行。

谢谢,我以为可能需要使用翻译,但我不确定。所以 b 只是将矩阵应用于 p 并检查它是否保持不变,然后应用于 t,c 就是正交投影,那么 d 呢?如果我的 COP 改变并且我想要保持 t 在相同的投影下,我必须保持相同的比例或其他什么。我该怎么做? - Amit Ofer
另外,我认为您不需要添加第四行,因为我理解您应该从3D到2D,因为Z在Zp处保持不变,所以从4个齐次坐标开始,您使用4X3矩阵并获得3个数字,其中最后一个不是Z,而是W,您必须除以它,使其为1。这就是为什么如果您取点t并将其乘以问题中的矩阵,则会得到(0,Yp,2)T,如果您想以齐次坐标显示它,则除以2并得到(0,0.5Yp,1)T,如问题中所述。对吗? - Amit Ofer
我认为你需要使用4X4矩阵来进行中间步骤。我认为问题中给出的投影矩阵是错误的。应该按照我修改后的答案来计算。 - Salix alba
啊,我明白了发生了什么。我误解了投影矩阵的作用。我认为你会发现使用4X4矩阵进行中间步骤会更容易,只有在最后一步才转换为3D。 - Salix alba
我正在查看这个PPT,以了解投影矩阵的解释:http://courses.cs.washington.edu/courses/cse576/08sp/lectures/projection.ppt - Amit Ofer
显示剩余6条评论

0
好的,现在关于C和D的问题。 在C中,我假设如果你将COP沿着Z轴移动到无限远处,你会得到一个正交投影。但是我不确定矩阵应该是什么:
    ( 1   0    0    0 )
M = ( 0   1    0    0 )
    ( 0   0    0    0 )

或者

    ( 1   0    0    0 )
M = ( 0   1    0    0 )
    ( 0   0    0    Zp )

关于 D 我没有任何想法,你需要以某种方式保持比例,使得 t 以相同的方式被投影,我理解你必须选择 PP 的 Z 坐标作为新 COP 的函数,但我不确定接下来该怎么做。


你可以进行相同的计算,但是将a=原点到平面的距离,b=COP到原点的距离。你可以计算出结果的投影矩阵。然后取b->无穷大的极限。最终的解决方案类似于你的第二个矩阵,但右下角的项只是1。它需要这样,否则在转换出齐次坐标时会得到一些缩放。 - Salix alba
对于d部分,请使用上一个评论中的通用矩阵。然后将此矩阵应用于t。接下来需要解出a的值。 - Salix alba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接