关键名词

等圆柱映射: equirectangular projection

六面体映射: cube projection or cube map

当前360度的球形图像/全景图像,一般通过传统的等圆柱映射(equirectangular projection)来表示[1]。在这种等圆柱映射中,用缩放后的经度来表示图像的宽,用缩放后的纬度来表示图像的高。这里经度和纬度的缩放是等比例。因为经度的跨度为360度,而纬度的跨度为180度。所以,典型的等圆柱映射的全景图像的比例是2:1的。等圆柱映射的典型应用为世界地图。这种映射在赤道(图像水平方向的中心线)上图像无任何畸变。随着往两极方向的移动,畸变越严重,冗余信息也越多。到两极方向,两个极点则分别被完全展开成一条线。假设一个球的半径为r,则其表面积则为4*pi*r*r。而对应的等圆柱的面积则为2*pi*pi*r*r。相应的等圆柱的面积与球的表面积的比例为pi/2,约为1.57。即,一个球的等圆柱映射面积比球的表面积多57%的面积。如果反映在视频图像传输处理上,则需要多处理57%的数据。同时,在压缩等圆柱映射的全景视频图像时,畸变问题也会导致另外的问题。在越靠近极点位置的运动,在等圆柱映射图像上会演变成一种畸形的全局运动。在视频压缩中,为降低视频图像数据的巨大数据量,压缩技术采用了运动估计的预测算法,上述畸形的全局运动降低了运动估计算法的压缩效率。

为克服等圆柱映射的以上问题,CubeMap映射在很早以前就被引入到计算机图形领域。并被作为一种专用纹理被引入到OpenGL中[2],以在游戏中,用于制作天空盒等,加速游戏背景的渲染。采用六面体映射,原来的球形图像,可以用前、后、左、右、上、下六个正方形表示。每个面上的像素是球心的90度的FOV看到的球上的像素在面上的投影。可看出,采用六面体映射可以有效去除等圆柱映射的信息冗余以及运动畸变问题。

以前全景图像只是在本地计算机上生成,在显示器上渲染出来,很少面临互联网传输的问题。近几年来,随着虚拟现实的发展,全景视频图像得到了迅猛发展。当前的平面视频标清的分辨率为720x480只对应的是正面,如果用六面体来表示所有的面临的六个面,则至少需要6x480x480的大小,而在保持同等清晰度的前提下,采用等圆柱映射在需要8x480x480的大小。采用六面体映射可以比等圆柱映射降低1/4的数据量,同时又有着对视频压缩技术友好的特点。

在2015年末至2016年初,facebook在github上发布了能够将等圆柱映射视频转化为六面体映射等视频的滤波器模块transform[3]。该模块是作为ffmpeg的一个滤波模块来发布的。首次将六面体映射引入到虚拟现实领域(VR, Virtual Reality)领域。将该模块集成到ffmpeg后,利用ffmpeg可是直接将等圆柱全景视频转码成六面体全景视频。在观看互联网全景视频时,可以有效降低对网络带宽的占用,提升用户体验,降低企业运营成本。

该滤波模块是用C语言编写,运行在通用CPU上。将解码后的等圆柱视频图像数据,主要通过查表等方法,转换为相应的六面体映射视频数据。但由于视频数据量巨大,所采用的并行处理手段主要为行级并行的多线程处理,要求很多的线程数。同时,视频解码器、视频编码器在编解码视频过程中都要占用大量的线程。导致在4K等场合下,CPU上线程不足,即使应用很先进的通用处理器。同时对于实时场景,特别是高清晰度的全景视频(4096x2048等更高分辨率),该模块往往难以达到实时要求。且该滤波模块在初始化时进行建表处理,速度非常慢。这些问题很大程度上影响了其在视频直播等实时场景下的应用。

注:cube map中文中有翻译为六面体映射,也有翻译为立方体映射。其实这里只涉及到六个正方形的面,或许叫正六面体比较合适。这里姑且按照大家常用的六面体来指代这个cube吧。

1. https://en.wikipedia.org/wiki/Equirectangular_projection
2. http://www.nvidia.com/object/cube_map_ogl_tutorial.html
3. https://github.com/facebook/transform

高效的六面体变换算法实现(一) —— 等圆柱映射 与 六面体映射相关推荐

  1. 高效的六面体变换算法实现(一) —— 等圆柱映射 与 六面体映射(MarkDown编辑器版)

    关键名词 等圆柱映射: equirectangular projection 六面体映射: cube projection or cube map 当前360度的球形图像/全景图像,一般通过传统的等圆 ...

  2. 图像迁移风格保存模型_CV之NS:图像风格迁移(Neural Style 图像风格变换)算法简介、关键步骤配图、案例应用...

    CV之NS:图像风格迁移(Neural Style 图像风格变换)算法简介.过程思路.关键步骤配图.案例应用之详细攻略 目录 图像风格迁移算法简介 图像风格迁移算法过程思路 1.VGG对比NS 图像风 ...

  3. Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示

    Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示 第一章:霍夫变换检测圆 ① 实例演示1 ② 实例演示2 ③ 霍夫变换函数解析 第二章:Python + openc ...

  4. 图解计算机图形学三维变换算法

    工程下载 http://pan.baidu.com/s/1o7OEMc6 tcddd.rar 此处为在Windows下运行的TC图形程序:使用了EasyX库: EasyX库可参考: http://bl ...

  5. CV之NS:图像风格迁移(Neural Style 图像风格变换)算法简介、过程思路、关键步骤配图、案例应用之详细攻略

    CV之NS:图像风格迁移(Neural Style 图像风格变换)算法简介.过程思路.关键步骤配图.案例应用之详细攻略 目录 图像风格迁移算法简介 图像风格迁移算法过程思路 1.VGG对比NS 图像风 ...

  6. [转载]SIFT(尺度不变特征变换)算法小结

    原文地址:SIFT(尺度不变特征变换)算法小结[转]作者:慕容天峰 最近一直在看SIFT算法.Sift是David Lowe于1999年提出的局部特征描述子,并于2004年进行了更深入的发展和完善.S ...

  7. 求多个数最大公约数、最小公倍数的一种变换算法

    令[a1,a2,..,an] 表示a1,a2,..,an的最小公倍数,(a1,a2,..,an)表示a1,a2,..,an的最大公约数,其中a1,a2,..,an为非负整数.对于两个数a,b,有[a, ...

  8. 求多个数最小公倍数的一种变换算法(未看)

    令[a1,a2,..,an] 表示a1,a2,..,an的最小公倍数,(a1,a2,..,an)表示a1,a2,..,an的最大公约数,其中a1,a2,..,an为非负整数.对于两个数a,b,有[a, ...

  9. 【人脸交换技术】:探索最高效的面部转换算法

    [人脸交换技术]:探索最高效的面部转换算法 随着计算机视觉和深度学习技术的飞速发展,人脸交换技术越来越成熟.人脸交换技术是指将一个人的面部特征转移到另一个人身上的技术.它可以应用于影视特效.表情包制作 ...

  10. 一个比较高效的素数判断算法

    一个比较高效的素数判断算法 高效素数判断算法 算法概述 规则详解 算法时间复杂度复杂度 Python代码实现 高效素数判断算法 算法概述 此算法将其他博主对基本素数算法的一些改进进行了整合,其中主要整 ...

最新文章

  1. android 重启后进入安全模式_图文详细教程:台式电脑或笔记本也可以运行Android系统,凤凰OS...
  2. android文件导出错误—— failed to pull a selection
  3. 第7章 Scrapy突破反爬虫的限制
  4. linux下4g显卡可以挖矿吗,文件不断扩大,ETH矿工即将面临重大抉择问题
  5. RHEL账号总结一:账号的分类
  6. linux 软链接_Linux软连接和硬链接
  7. 力扣-387 字符串中的第一个唯一字符
  8. 微型计算机控制技术王艳芳,基于单片机液位控制器的设计与实现最终版(样例3)...
  9. 上位机软件工程师_自动化项目如何做?PLC工程师教你几招!
  10. oracle 索引的整理
  11. 计算机管理系统的图片,图片管理软件哪个好用?5款好用的图片管理软件推荐...
  12. html5正在加载数据,JSP如何做正在加载数据,请稍等...这样的提示页面 loding。。。...
  13. 开源切片工具--TileStache
  14. 18.5.4 分布式恢复
  15. pycharm运行程序时在Python console窗口中运行
  16. iptables 设置端口转发/映射
  17. #创新应用#全球快递追踪:五次查询只需1KB!
  18. 通过js控制layui选择框checkbox的选中、取消选中,以及使用layui实现全选、取消全选的一种方式
  19. BlockCode 少儿编程 8《小兔子乖乖》
  20. 字节跳动暑期实习面试题准备

热门文章

  1. 11部门公布第三批111个国家新型城镇化综合试点名单和工作方案
  2. . mindoc linux amd64,linux安装Mindoc文档管理系统
  3. 怎么在苹果手机上添加无线网络连接服务器,如何通过苹果iOS设备管理无线网络(图文解析)...
  4. 关于JS跨域访问简述
  5. xtwpro2编程器_最近喜欢上折腾路由器了,买的XTW100编程器给大家看看
  6. 软件研发管理之版本管理
  7. 秒杀系统设计的关键点思考
  8. 【Idea+Vim】Idea安装Vim插件/IdeaVim剪切板
  9. 单片机需要数电模电基础吗?单片机要多少模电数电知识 ?
  10. 论文-公式对齐和右侧自动编号