前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >全景图转小行星视角投影原理详解

全景图转小行星视角投影原理详解

作者头像
一棹烟波
发布2018-12-07 16:00:04
2.1K0
发布2018-12-07 16:00:04
举报
文章被收录于专栏:一棹烟波一棹烟波

全景图是2:1比例的图片,一般是多张图像拼接而成。全景图2:1的比例可以很方便的映射到球面,而球坐标可以很方便的实现各种有趣的投影。比如小行星,水晶球,局部透视投影等。

今天来说说怎么将全景图投影到小行星视图:

首先,要有一副2:1的全景图,如下:

风景秀丽是不是。

然后,将全景图按照经纬展开法重新贴到球面,图像的宽就是纬度0-2π,图像的高就是经度0-π。

接下来,需要一种下面这样的投影。将一个球面上的坐标投影到平面上。投影中心在球心到球面之间。

从百度百科上盗的图,各位将就着看。

这种投影方式中,下半球面会全部投影在平面图中的一个圆内,上半球面会全部投影到圆的外面,并且分布越来越稀疏。

投影过程可以理解为:

1. 首先建立球坐标系,将经纬度的全景图贴到球面上,这个过程我之前的一篇博客中鱼眼图转经纬图讲过,原理一样。只不过是逆过程。

2. 设定投影中心点的坐标,然后连接投影中心点和球面上一点,得到一条直线。当然此时需要设置一个视场角FOV,即选择投影的视场角是多大。视场角越大,最后得到的小行星视图中间图像被挤压的越厉害。

3. 建立投影平面,以上图为例,该投影平面与球面相切与南极点。计算该直线与该投影平面的交点,即可得到投影后的平面坐标。

4. 上述三步均在球坐标系下完成,得到各个球面点的平面坐标后,根据具体想要得到的平面图像尺寸,将平面坐标转换为图像坐标。至此完成。

上述是正向投影过程,如果采用反向投影,原理类似,不过倒过来从原全景图像素点取值即可。

上述过程可以很方便用C++代码实现,读取图像的操作可以用OpenCV:

投影后得到的小行星视图如下,FOV和投影中心位置都会影响小行星在图像中的大小:

这个是投影点在北极点,FOV设置的120度

投影点在北极点,FOV=170度,则如下:

投影点在北极点与球心的中点,FOV=120度,则如下:

同样道理,如果投影点在南极点,投影平面放在北极,则如下图:

同理,如果在球体内随意移动投影点,投影得到的效果也会不同,可以实现不同视角的小行星。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-11-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档