最近在研究透视投影,Twinsen大神的神贴有非常详细的推导过程(传送门),这里做一下学习笔记。

首先是两点基础的原理:

1.P经过矩阵M变换后得到P’点,如果知道P(x,y,z)和变换后的P’(x’,y’,z’),只要P’点的各个分量x’,y’,z’可以表示成原分量x,y,z的线性表示,那么就可以反推出变换矩阵M。如P(x,y,z),变换后的P’(2x+3y,7z,x+2y+3z),则可以推导出变换矩阵为:

2.为了方便裁剪,顶点最终会被变换到一个叫做规则观察体(CVV)中,它是一个x,y,z均为[-1,1]的立方体,由于透视投影的视景体是锥形,所以要将视景体与CVV进行映射,就需要一个线性插值的过程,将[left,right]变换到[-1,1],将[bottom,top]变换到[-1,1],将[near,far]变换到[-1,1],如图:

下面简单的写下推导的主要步骤。

图中P(x,y,z),投影平面为近平面,投影点P’(x’,y’,z’),那么根据相似三角形有x/z=x’/z’,其中z’=-N,所以可以求得x’=-Nx/z,同理得y’=-Ny/z,所以P’(-Nx/z,-Ny/z,-N)。

这里得到的P’点的z坐标为常量,它不是x,y,z的线性组合,无法构建变换矩阵。通过观察-Nx/z,-Ny/z,都与1/z成线性相关,所以如果z’也与1/z线性相关,则可以得到P’(-Nx/z,-Ny/z,-(az+b)/z),然后转换成齐次坐标P’(Nx,Ny,az+b,-z),这样就可以构建出变换矩阵了。

所以在我们作为矩阵的变换后,记得将齐次坐标转换成普通坐标才是最终结果,也就是透视除法。

当然上面得到的矩阵并不是最终的矩阵,还需要构建CVV。

Z方向上:

X和Y方向上:

所以最终的投影点为

同理P’各个分量乘以-z,得到

使得各个分量均为x,y,z的线性表达式,这样就可以推导出变换矩阵

=> 

同样要记得:顶点通过该矩阵变换后,还要经过透视除法才能得到最终投影的点。之前看书时说投影矩阵变换得到的顶点坐标各个分量的值域是[-w,w],原来是从这里反推的,也就明了。

透视投影变换矩阵推导学习笔记相关推荐

  1. 机器学习入门学习笔记:(2.3)对数几率回归推导

    理论推导   在以前的博客(机器学习入门学习笔记:(2.1)线性回归理论推导 )中推导了单元线性回归和多元线性回归的模型.   将线性回归模型简写为:y=ωTx+by = \omega^Tx+b:   ...

  2. 【六更完结!由于字数限制开新文章继续】零基础信号与系统学习笔记:复指数信号、傅里叶级数的系数推导、三角函数正交性、离散傅里叶变换、相位补偿、z变换表、逆变换表、常见序列及其作用

    零基础信号与系统学习笔记:复指数信号.傅里叶变换.三角函数正交性 基础1:复指数信号 复指数信号基础知识 复指数信号推导1 虚指数信号 虚指数信号特性和作用 直流信号 基础2:傅里叶级数 推导傅里叶级 ...

  3. 冈萨雷斯《数字图像处理》学习笔记(4)--图像复原与重建(含傅里叶切片定理推导)

    一.图像复原模型 若H是线性的,空间不变的过程,则退化图像在空间域通过下式给出: g(x,y)=h(x,y)∗f(x,y)+δ(x,y)g(x,y)=h(x,y)*f(x,y)+\delta(x,y) ...

  4. 【相机标定与三维重建原理及实现】学习笔记1——相机模型数学推导详解

    目录 前言 一.小孔成像模型 二.坐标系的变换 1.世界坐标系到相机坐标系的变换(刚体变换)[xw^→xc^\boldsymbol {\hat{x_{w}}}\rightarrow \boldsymb ...

  5. Python学习笔记 —— 独步天下推导式语法糖

    Python学习笔记 -- 独步天下推导式语法糖 前言 介绍 列表推导式 获取当月天数 字典推导式 模拟三条用户数据 结束语 前言 最近心血来潮,学习了一下Python,其中关于 推导式语法糖 感觉功 ...

  6. [视觉SLAM十四讲]学习笔记1-刚体运动之旋转矩阵与变换矩阵

    [视觉SLAM十四讲]学习笔记1-刚体运动之旋转矩阵与变换矩阵 1点.向量和坐标系 2 坐标系间的欧式变换 2.1 欧式变换之旋转 2.2 欧式变换之平移 3 变换矩阵与齐次坐标 4 Eigen库的简 ...

  7. 深度学习与智能故障诊断学习笔记(三)——RNN与LSTM推导详解

    1.RNN 1.1网络结构 标准神经网络的输入输出在不同例子中可能有不同的长度,在学习中并不共享从不同位置上学到的特征.因为标准神经网络的训练集是稳定的,即所有的特征域表达的内容是同一性质的,一旦交换 ...

  8. DX11龙书学习笔记---渲染管线

    DX11龙书学习笔记---渲染管线 1.输入装配阶段 - 顶点 - 图元拓扑 - 点列表 - 线带 - 线列表 - 三角形带 - 三角形列表 - 带有邻接信息的图元 - 控制点面片列表 - 索引 2. ...

  9. GAMES101 学习笔记 Lecture 1~6

    目录 GAMES101 学习笔记 Lecture 1~6 往期作业汇总帖 Lecture 01 Overview of Computer Graphics 笔记参考 其他教程 怎么判断一个画面是否优秀 ...

最新文章

  1. 解决SSH连接出现 Software caused connection abort 的问题
  2. PHP中常见的几种运行代码的方式
  3. HDU 1711 Number Sequence(算法验证)
  4. Array K-Coloring
  5. class.forname找不到类_自媒体情感类文章素材怎么找?
  6. Linux操作系统:文件和目录命令
  7. Hbuilder 跳转另一个app
  8. 使用 Kitten 开发一款趣味成语接龙游戏
  9. mysql 获取农历年份_ASP获取农历日期程序代码
  10. python 100days github_GitHub - 382982408/Python-100-Days: Python - 100天从新手到大师
  11. 黄太吉如何把煎饼卖到4000万估值
  12. 小程序swiper制作分门别类的轮播
  13. 对populate()方法的理解
  14. 转载英语词汇程序语言学习
  15. 编码与解码(encode、decode)
  16. 你应该知道的50个项目管理术语(上)
  17. python可视化数据分析-Python数据分析与可视化从入门到精通
  18. 一、HTTPS详解SSL TLS
  19. AT32F403A驱动复用PSRAM
  20. linux mysql5.6.24_MySQL 5.6.24/5.5.43 发布下载

热门文章

  1. 使用QTP/UFT进行功能测试
  2. psm倾向得分匹配法举例_倾向得分匹配法(PSM)举例及stata实现.pdf
  3. 班德尔服务器最新所在地,英雄联盟各区服务器IP及所在地2015年4月更新
  4. 苹果公司雇佣前ATI图形芯片设计师
  5. 三角函数和反三角函数的图形
  6. Robot Framework删除和文本框输入技巧积累
  7. iOS查看手机app本地存储的文件
  8. MySql行锁变表锁,性能下降?间隙锁(X,GAP),行锁(X,REC_NOT_GAP),区间锁(X)带你进阶。
  9. 一步一步搭建11gR2 rac+dg之DG 机器配置(七)
  10. realme V23配置怎么样 realme V23好不好