三维投影

             

  • 本词条存在未完成的内容.

  1当我们在平面上画三维物体时,我们需要某种投影算法把物体上的每个点对应到平面上的一点.以下介绍两种常用的方法,一种是平行投影(parallel projection),另一种是透视投影(perspective projection)

1. 平行投影

   顾名思义,平行投影是指在空间中指定一个方向(如图未完成),将三维物体上的每一点沿着该方向投影到与该方向垂直的平面上.工程制图中的正视图,侧视图等都属于平行投影.这种投影的特点是,空间中的任意两条平行线的投影仍然是平行线.平行投影是线性的,即一个线段若伸长若干倍,那么它的投影也会按照同样的比例伸长.

2. 透视投影

   当人眼或相机观察一个三维物体时,使用的是透视投影.

  

未完成:用一张图介绍原理

   我们在平面后方取一个固定点 $F$ 称为焦点,要把物体上任意一点 $P$ 投影到平面上,先作直线 $PF$,该直线与平面的交点 $P'$ 就是投影后的点.我们在平面上建立直角坐标系,把平面上离焦点最近的点定义为平面坐标的原点.透视投影不是线性的,但可以保证直线的投影仍然为直线.

   为什么透视投影要这样定义?我们先思考一种非常简单的相机,即小孔成像相机.根据光的直线传播,物体上的某点发出的(或反射的)光线只有经过小孔才能投影到孔后面的平面.如果按照这个模型,我们在计算透视投影时应该把焦点定义在屏幕之前,然而这么做有一个缺点就是投影后平面上的像是倒像.所以为了方便起见,我们保持焦点不变,但是把屏幕平移到焦点之前(焦距也不变),容易看出这样做的唯一改变就是把倒像变为正像,即点 $P'$ 的两个平面坐标分别取相反数.

   如果我们将相机上的小孔改为焦距为 $f$ 的小凸透镜,并假设物距远大于焦距,那么根据成像公式,凸透镜和平面(即底片)的距离就是焦距 $f$.根据凸透镜成像原理,物体一点在底片上的像仍然会过凸透镜的中点,所以使用凸透镜的相机和使用小孔成像的相机得到的投影是相同的.至于人眼,人眼成像的原理和相机基本一致,虽然视网膜并不是一个平面,得到的成像是扭曲的,但大脑在处理图象是会自动纠正这种扭曲(例如我们看到的直线仍然是直的).

3. 计算方法

   无论是哪种投影,我们通常建立两个坐标系,一个是世界坐标系(world frame) $S$,一个是相机坐标系(camera frame) $S'$.一个基本的问题就是将一个系里面的坐标变换到另一个系中的坐标.这可以通过空间旋转矩阵,再加上一个平移完成(平移的矢量是两个坐标系原点之间的位移).

   把所有要投影的点 $P_i$($i = 1, \dots, N$)的在世界系中的坐标(假设已知)记为一个 3 行 $N$ 列矩阵,矩阵的第 $i$ 列就是列矢量 $ \boldsymbol{\mathbf{P}} _i = (x_i, y_i, z_i) ^{\mathrm{T}} $.将 3 乘 3 的旋转矩阵左乘该矩阵,再给每行加上常数进行平移即可.完成后,我们就得到了相机系中的坐标矩阵,每一列是 $ \boldsymbol{\mathbf{P}} _i' = (x_i', y_i', z_i') ^{\mathrm{T}} $

   当我们做平行投影时,可以令相机系的 $x$-$y$ 平面为投影平面,投影方向为 $- \hat{\boldsymbol{\mathbf{z}}} $.即 $(x_i', y_i', z_i')$ 投影后为 $(x_i', y_i')$.

   当我们做透视投影时,可以令原点为焦点,$(0, 0, f)$ 为平面的中点,平面与 $z$ 轴垂直.相机系中的某点 $(x_i', y_i', z_i')$ 投影后变为 $(x_i' f/z_i', y_i' f/z_i')$,即每个分量乘以 $f/z_i'$,使得 $z$ 分量等于 $f$.

  

未完成:另外开一篇文章分享平行投影和透视投影的 Matlab 代码

4. 3D 艺术画

   见 3D 艺术画


1. ^ 参考 Wikipedia 相关页面

致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择会员制,大量广告,内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 10 元,我们一个星期内就能脱离亏损, 并保证网站能在接下来的一整年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

广告位

投放详情

         

© 小时科技 保留一切权利