谈谈我对投影的理解

投影的数学意义

A projection is the transformation of points and lines in one plane onto another plane by connecting corresponding points on the two planes with parallel lines.

投影的概念很简单,就是投射的影子。好比黑暗屋子有一处光,投到你伟岸的身躯,墙上必然会有影子,这个影子就是你的身体对应这面墙的投影。

如上图, 求向量y到平面W的最短距离。对于点y,沿着平面W的法线方向(垂直于平面W),和W相交于y’,此时误差z最小,就是我们要找的答案。因为该射线是垂直于该平面(perpendicular),因此称为正交(orthogonal)投影。现实生活中,从一大堆统计点中拟合出一条有规律的线,就需要用最小二乘法,其实就是正交投影的思路。对应的数学描述为:当W平面中Ax = y无解时,转换为Px= y的形式,使其有解。

当然,这样做有什么好处?大家对比一下自己的身体和身影的区别,答案就是把三维的问题变成了一个二维的问题,这就是一个降维的思想,也是投影的价值。为了简化问题,限定在某一范围内,就要进行必要的降维(消元),如果因此导致问题无解,通过合适的投影矩阵P找到解。

投影的现实意义

各种原因吧,很多时候我们都需要抽象到二维空间,方便理解,降低成本。比如,显示器明明是平的,如何带给我们“深度”的错觉;地球明明是圆的,可地图看起来是平的。

两者的区别如上,前者采用了透视投影,眼睛认知世界也是采用该投影方式,因此,我们可以通过“平”幕感觉出深度。而后者采用正交投影,无论远近大小都一样。但两者在数学理论上并无本质区别,都是矩阵P,只是P中的元素不同罢了。

这里主要看气质,我们并不详细给出两个投影矩阵的推导过程, 如上是透视投影的示意图,视锥体的任意一点(),求出在平面(z = -n)对应的点,就是一个相似三角形的过程。透视投影是一个点光源,而正交投影像一束平行光,但推算过程一致。

地图投影也没有本质区别,如上,在球心处一盏灯,地球投影到这个圆柱体侧面,然后展开,形成右图的效果。

投影的硬件加速

通过上面的介绍,虽然投影要理解的内容很多,但操作上非常简单,每个点只需要乘以投影矩阵P,就可以得到投影后的点。

在数值计算上,这有三个特点,第一是简单,每个点的计算过程都是独立的,可封闭的,并不和其他相邻点之间有关联。其次是粗暴,矩阵运算计算量很大,最后基本都是浮点运算。

比如动态投影,计算量巨大,特别是B/S应用,受限于客户端的计算能力,往往都是基于服务端做动态投影计算,然后将结果返回给客户端。但即使如此,对于C/S而言,动态投影的性能也是瓶颈。

相比CPU,GPU没有逻辑单元,且浮点运算能力突出,非常适合用并行的方式来解决这类简单粗暴的计算密集型问题。

这是一种很好的解决动态投影的方式,在性能、实时、资源消耗和兼容性上都表现出色。比如墨卡托投影转WGS,可以错误的理解为把图片1高度不变,长度拉伸2倍的过程。我们完全把投影转换的计算放到着色器中,通过GPU顶点和片元着色器实现。

从CPU到GPU的转移,看上去很完美的,但动态投影有一个效果上的问题,毕竟是对纹理的操作,难免会有一些位置上偏移缩放等。如果用肉眼仔细看,你还是会发现不如以前的纹理清晰。

Cesium在这个问题上有一个很精妙的办法,还是要进行动态投影的,只是转换的对象不是Texture,保证纹理信息不变,而是对Texture Coordinate进行转换。

如下是动态投影的效果对比。当然受限于现实,目前仅支持墨卡托和WGS之间的转换,但在理论上,只要是点对点的动态投影都可以采用这种思路,当然最后还得看效果和数据易用性等问题。

原文发布于微信公众号 - LET(LET0-0)

原文发表时间:2017-04-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与Python学习

长文 | LSTM和循环神经网络基础教程(PDF下载)

目录: 前言 前馈网络回顾 循环网络 时间反向传播BPTT 梯度消失与梯度爆炸 长短期记忆单元(LSTM) 多时间尺度和远距离依赖 门控循环单元GRU LSTM...

568100
来自专栏用户2442861的专栏

卷积神经网络CNN经典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning

欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld。  技术交流QQ群:433250724,欢迎对算法、技术感兴趣的同...

25810
来自专栏机器之心

教程 | 斯坦福CS231n 2017最新课程:李飞飞详解深度学习的框架实现与对比

选自Stanford 作者:李飞飞等 机器之心编译 参与:Smith、蒋思源 斯坦福大学的课程 CS231n (Convolutional Neural Ne...

33980
来自专栏机器之心

学界 | ImageNet 2017目标定位冠军论文:双路径网络

选自arXiv 作者:Yunpeng Chen等 机器之心编译 参与:蒋思源、Smith 最后一届 ImageNet 挑战赛刚刚落下帷幕,而新加坡国立大学参与的...

30070
来自专栏ATYUN订阅号

解决多标签分类问题(包括案例研究)

由于某些原因,回归和分类问题总会引起机器学习领域的大部分关注。多标签分类在数据科学中是一个比较令人头疼的问题。在这篇文章中,我将给你一个直观的解释,说明什么是多...

82360
来自专栏量子位

如何捕获一只彩色卓别林?黑白照片AI上色教程很友好 | 哈佛大触

21520
来自专栏AI科技评论

大会 | CVPR 2018论文解读:真实监控场景中的异常事件检测

AI 科技评论按:本文为上海交通大学林天威为 AI 科技评论撰写的独家稿件,未经许可不得转载。 安防作为近年最热门的计算机视觉研究落地方向,与视频分析研究有着很...

1K60
来自专栏CVPy

OpenCV 玩九宫格数独(二):knn 数字识别

我们现在要做的是要识别从九宫格图片中提取出来的印刷体的数字。本文从零开始做一遍数字识别,展示了数字识别的完整流程。从收集数据开始,到数据预处理,再到训练KNN,...

2.3K20
来自专栏PPV课数据科学社区

百度校园招聘数据挖掘工程师面试题集锦(2013)

一、简答题(30分) 1、简述数据库操作的步骤(10分) 步骤:建立数据库连接、打开数据库连接、建立数据库命令、运行数据库命令、保存数据库命令、关闭数据库连接。...

40350
来自专栏人工智能

C+实现神经网络之六—实战手写数字识别

之前的五篇博客讲述的内容应该覆盖了如何编写神经网络的大部分内容,在经过之前的一系列努力之后,终于可以开始实战了。试试写出来的神经网络怎么样吧。 数据准备 有人说...

25890

扫码关注云+社区

领取腾讯云代金券