Math 针孔相机投影矩阵解释

Math 针孔相机投影矩阵解释,math,graphics,camera,projection,Math,Graphics,Camera,Projection,在阅读了一些关于针孔相机的资料以及它们的投影矩阵是如何设置的之后,我试图解决附加的问题,但我仍然不确定我是否理解所有的数学。 在随附的问题中,当我理解将相机的COP移动到-2Zp时,我基本上增加了相机的焦距视图,这基本上为我提供了与现在给出的矩阵相同的矩阵,第3行的第3个元素是1/3Zp而不是1/Zp,对吗 如果是这样,你将如何计算t的新位置,将它乘以我得到的新矩阵,得到(0,Yp,2/3)t。这是确保最后一个数字是1而不是2/3的解决方案,因此我得到(0,2Yp/3,1)。有人能解释一下在这种

在阅读了一些关于针孔相机的资料以及它们的投影矩阵是如何设置的之后,我试图解决附加的问题,但我仍然不确定我是否理解所有的数学。 在随附的问题中,当我理解将相机的COP移动到-2Zp时,我基本上增加了相机的焦距视图,这基本上为我提供了与现在给出的矩阵相同的矩阵,第3行的第3个元素是1/3Zp而不是1/Zp,对吗

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

除此之外,c非常清晰,我将得到一个正交投影。
有人能帮忙做d部分吗?

画一张图表可能会有帮助。通过忽略x坐标,可以使事情变得更简单,因为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.
距离d沿z轴的平移由下式给出:

    ( 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 )
找到原来是

    ( 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,所以我们有(x,y,z)坐标位于平面z=-a=-Zp上。这些与我们从图表中得到的一致。如果您愿意,您可以删除第三行的N.

好的,现在关于C和D。 在C中,我假设如果你把COP沿着Z轴移动到无穷远,你会得到一个正交投影。但我不确定矩阵是否为:

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


对于D,我不知道,你需要以某种方式保持比率,以便t以相同的方式投影,我知道你必须选择PP的Z坐标作为新COP的函数,但我不确定从这里开始到哪里。

谢谢,我想也许我必须使用翻译,但我不确定。那么b将矩阵应用于p,检查它是否保持不变,然后应用于t,c只是正交投影,那么d呢?我假设如果我的COP在变化,我想让t保持在相同的投影,我必须保持相同的比率或其他。我该怎么做呢?顺便问一下,关于a,让PP在3Zp或COP在-2Zp和PP在Zp有什么区别?还有一件事,如果你正确地使用了平移,这不是意味着M保持不变,所以它应该是1/Zp而不是1/3Zp吗?另外,我认为你不需要添加第四行,因为我知道你应该从3d到2d,因为Z在Zp是恒定的,从4个齐次坐标开始,你使用4X3矩阵,得到3个数字,其中最后一个不是Z,它是W,你必须除以它,所以它是1。这就是为什么如果你取点t,乘以问题中的矩阵,你会得到(0,Yp,2)t,如果你想在齐次坐标中显示它,你除以2,得到(0,0.5Yp,1)t,如问题中所述。对吧?我想中间步骤需要4X4矩阵。我认为问题中所述的投影矩阵是错误的。这应该是我修正后的答案。(删除之前的评论)啊,是的,我知道发生了什么。我完全误解了投影矩阵的含义。我想你会发现在中间步骤中使用4X4矩阵更容易,在最后一步中只会用到3D。你可以做同样的计算,但a=从原点到平面的距离,b=从COP到原点的距离。可以计算得到的投影矩阵。然后将极限设为b->无穷大。最终的解类似于第二个矩阵,但右下角的项仅为1。它必须是这样的,否则当你转换出齐次坐标时,你会得到一些缩放。对于第d部分)使用前面评论中的通用矩阵。然后将这个矩阵应用于t。然后你需要解a。
    ( 1   0    0    0 )
M = ( 0   1    0    0 )
    ( 0   0    0    Zp )