码迷,mamicode.com
首页 > 其他好文 > 详细

投影矩阵求逆

时间:2020-02-11 00:05:23      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:一点   方向   ase   逆矩阵   begin   投影   坐标   摄像机   范围   

什么是投影矩阵的逆矩阵呢?从几何意义上来讲,就是把投影到NDC的坐标转化为观察空间下的坐标。

假设y方向的视域角\(\alpha\),视域的宽高比为\(r\),投影平面距离摄像机的距离为\(d\),视域的宽为\(w\),高为\(h\),近剪裁面距离摄像机的距离为\(n\),远剪裁面距离摄像机的距离为\(f\)。首先有:
\[ r= \frac{w}{h} \]

\[ tan\frac{\alpha}{2} = \frac{h}{d} \]

假设任一点\(P\),投影后的坐标为\((x, y, z)\),观察空间下的坐标为\((x', y', z')\),那么有:
\[ \dfrac{x'}{wx} = \dfrac{z'}{d} \]

\[ \dfrac{y'}{hy} = \dfrac{z'}{d} \]

这里,分别给\(x\)\(y\)乘以\(w\)\(h\)是因为NDC的坐标是归一化过的,要先还原到\([-w, w]\)\([-h, h]\)的取值范围。

综合上式,求出\(x'\)\(y'\)
\[ x' = \dfrac{z'wx}{d} = z'rtan(\dfrac{\alpha}{2})x \]

\[ y' = \dfrac{z'hy}{d} = z'tan(\dfrac{\alpha}{2})y \]

注意到上述求得的\(x'\)\(y'\)里的分母中均包含\(z'\),为了用矩阵形式来表达逆投影变换,必须要借助齐次坐标,对\((x',y',z',1)\)各除以\(z'\),即转换为\((\dfrac{x'}{z'}, \dfrac{y'}{z'}, 1, \dfrac{1}{z'})\)。 有:
\[ [x, y, z, 1] \cdot \begin{bmatrix} rtan\dfrac{\alpha}{2} & 0 & 0 & 0 \\ 0 & tan\dfrac{\alpha}{2} & 0 & 0 \\ 0 & 0 & 0 & A \\ 0 & 0 & 1 & B \end{bmatrix} = [\dfrac{x'}{z'}, \dfrac{y'}{z'}, 1, Az+B] \]
由投影变换可知,\(z\)可以写成:
\[ z = \dfrac{\dfrac{f}{f - n}z' + \dfrac{nf}{n - f}}{z'} \]
由此可知,解得\(\dfrac{1}{z'}\)
\[ \dfrac{1}{z'} = \dfrac{n - f}{nf}z + \dfrac{1}{n} \]
也就有:
\[ \begin{cases} A = \dfrac{n - f}{nf} \B = \dfrac{1}{n} \end{cases} \]
最终得到投影矩阵的逆矩阵为:
\[ \begin{bmatrix} rtan\dfrac{\alpha}{2} & 0 & 0 & 0 \\ 0 & tan\dfrac{\alpha}{2} & 0 & 0 \\ 0 & 0 & 0 & \dfrac{n - f}{nf} \\ 0 & 0 & 1 & \dfrac{1}{n} \end{bmatrix} \]

投影矩阵求逆

标签:一点   方向   ase   逆矩阵   begin   投影   坐标   摄像机   范围   

原文地址:https://www.cnblogs.com/back-to-the-past/p/12293520.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!