360视频简介及ERP投影
360°视频,也称全景视频、VR视频,是一种立体视频格式,和普通的2D视频在平面上展开不同,360视频是在球体上展开,JVET成了了专门的工作组研究360视频的编码。
JVET还提供了360Lib参考软件用于360视频的投影格式转换和质量评价等。360Lib用c++写成,可以单独用于360视频的投影格式转换和质量评价处理,也可集成到HM和VTM中,这样在进行360视频编码时就不需要存储中间投影的YUV序列。
360视频投影
360视频是立体视频,而传统视频是2D的矩形平面视频,如果想对360视频编码就需要先将其转换为2D平面视频,即格式投影。
图1 360Lib XYZ坐标系
360视频可用图1球体表示,它是一个3D XYZ坐标系,坐标原点在球心,X轴指向球的前面,Y轴指向球的上面,Z轴指向球的右面。整个坐标系符合右手系。球面上的点可以用经度ϕ和纬度θ 表示,经度 ϕ取值范围为[−π,π],纬度θ取值范围为 [−π/2, π/2]。其中经度 ϕ定义为沿X轴逆时针旋转的角度,纬度θ定义为从赤道开始向Y轴旋转的角度。
在单位球体(即球半径为1)上,坐标(X,Y,Z)和 (ϕ, θ)的相互转换关系如下:
投影的目的即是将在球面上的像素映射到二维平面(uv平面),即(X,Y,Z)坐标转换为(u,v)坐标。
图2 uv平面坐标系
360视频映射为2D视频可能会映射到1个面上,也可能映射到多个面上,所以每个uv平面都有一个索引f标识,每个面对应一个2D的uv平面。uv平面上的坐标用(m,n)表示,如图2中橘色圆圈所示。360视频投影实际上就是(X,Y,Z)和(f,m,n)间的坐标相互转换。在360Lib中通过map2Dto3D()和map3Dto2D()接口实现(X,Y,Z)和(f,m,n)间的相互转换。
360Lib提供了14种投影方式,在接下来的文章中会逐步介绍:
表1 360Lib中的投影格式
ERP等距柱状投影
等距柱状投影(Equirectangular Projection,ERP)是最常用的球面投影方式,世界地图的绘制就是采用ERP投影。
ERP是360Lib默认采用的投影方式,投影后只有1个面,即整个球面投影到1个矩形平面上。
图3 ERP投影
由于球体是单位球体,投影后的uv平面也是单位平面,即u和v的取值范围为[0,1]。
对于2D到3D的转换,首先对于uv平面上的坐标(m,n)计算对应的(u,v):
利用(u,v)可以计算经纬度:
最后可以根据公式(1)(2)(3)由经纬度计算(X,Y,Z)。
对于3D到2D的转换,首先根据公式(4)(5)由(X,Y,Z)计算得到(ϕ, θ),再由公式(8)(9)就是得到(u,v),最后根据公式(6)(7)计算得到(m,n)。
3D视频可以通过上面ERP投影变成2D视频,然后按照正常的视频编码方法进行编码。码流解码后得到的2D视频再通过逆投影变成3D视频。
ERP投影最大的优势就是其直观的投影方式,完全线性的变换公式使得其易于操作。但是极低的投影复杂度带来的是采样均匀性的降低,每条纬线上采样点的数量相同导致两极处的像素采样密度大于赤道。
上面的投影后的2D视频的左右边界在球面上其实是同一条边,为了减少在接缝处的失真在编码前可以对左右边界进行填充。
图4 ERP边界填充
如图4,在编码前对图像边界进行填充,填充部分为A2和B1。解码后视频通过后处理去除填充部分,有两种后处理方法,第一种是直接裁剪掉填充部分如图4右边部分。第二种就是"blending",如图4左边部分,处理后的A'由A1和B1根据距离加权得到,B'由B2和A2根据距离加权得到。
/**************************************-180 180
90 0|v|
-90 10 ----------u-----------------1
***************************************/
Void TEquiRect::map2DTo3D(SPos& IPosIn, SPos *pSPosOut)
{ POSType u, v;//u = IPosIn.x;u = IPosIn.x + (POSType)(0.5);v = IPosIn.y + (POSType)(0.5);if ((u < 0 || u >= m_sVideoInfo.iFaceWidth) && ( v >= 0 && v < m_sVideoInfo.iFaceHeight)) {u = u < 0 ? m_sVideoInfo.iFaceWidth+u : (u - m_sVideoInfo.iFaceWidth);}else if (v < 0){v = -v; u = u + (m_sVideoInfo.iFaceWidth>>1);u = u >= m_sVideoInfo.iFaceWidth ? u - m_sVideoInfo.iFaceWidth : u;}else if(v >= m_sVideoInfo.iFaceHeight){v = (m_sVideoInfo.iFaceHeight<<1)-v; u = u + (m_sVideoInfo.iFaceWidth>>1);u = u >= m_sVideoInfo.iFaceWidth ? u - m_sVideoInfo.iFaceWidth : u;}pSPosOut->faceIdx =IPosIn.faceIdx;POSType yaw = (POSType)(u*S_PI*2/m_sVideoInfo.iFaceWidth - S_PI);POSType pitch = (POSType)(S_PI_2 - v*S_PI/m_sVideoInfo.iFaceHeight);pSPosOut->x = (POSType)(scos(pitch)*scos(yaw)); pSPosOut->y = (POSType)(ssin(pitch)); pSPosOut->z = -(POSType)(scos(pitch)*ssin(yaw));
}//The output is within [0.0, width)*[0.0, height) in sampling grid;
Void TEquiRect::map3DTo2D(SPos *pSPosIn, SPos *pSPosOut)
{POSType x = pSPosIn->x;POSType y = pSPosIn->y;POSType z = pSPosIn->z;pSPosOut->faceIdx = 0;pSPosOut->z = 0;//yaw;pSPosOut->x = (POSType)((S_PI-satan2(z, x))*m_sVideoInfo.iFaceWidth/(2*S_PI));pSPosOut->x -= 0.5;POSType len = ssqrt(x*x + y*y + z*z);//pitch;pSPosOut->y = (POSType)((len < S_EPS? 0.5 : sacos(y/len)/S_PI)*m_sVideoInfo.iFaceHeight);pSPosOut->y -= 0.5;
}
AEP投影
AEP(Adjusied equal-area projection)投影是EAP的改进,和ERP类似,投影后也只有一个uv平面,其uv和经纬度的转换方式如下:
其中beta=1/1.4,是经验参数。
感兴趣的请关注微信公众号Video Coding
360视频简介及ERP投影相关推荐
- 360视频:金字塔棱台投影TSP
金字塔棱台投影(Truncated square pyramid projection format,TSP)投影模型是棱台.TSP的投影平面如图1所示,投影后的六个面组成矩形平面,矩形内的坐标(x, ...
- 360视频:CMP和ACP投影
CMP投影 立方体投影格式(Cubemap projection format,CMP)是通过将球面内容投影在立方体模型上后将各个面展开,然后拼接为矩形的一种投影方式. 和ERP不同,CMP采用正方体 ...
- 360°视频的视频编解码器性能评估中的常见测试条件和软件参考配置
这几天一直阅读提案,发现状态不是很好,就把几篇我觉得很有用的提案摘录到这里.带(*)标识的地方是我还没懂的地方= =. 首先这篇提案是JVET common test conditions and e ...
- 360视频质量评估标准:WS-PSNR及对应代码实现部分
本文转载自http://blog.csdn.net/lin453701006/article/details/78109934,在原作者的基础上修改了部分结构以及添加代码实现部分,在此对原作者表示感谢 ...
- 360视频云Web前端HEVC播放器实践剖析
360视频云前端团队围绕HEVC前端播放及解密实现了一套基于WebAssembly.WebWorker的通用模块化Web播放器,在LiveVideoStackCon2019深圳的演讲中360奇舞团We ...
- 精仿B站源码+自动采集360视频
介绍: 精仿B站源码+自动采集360视频 精仿哔哩哔哩还原度高达90% 响应式设计无需担心网页卡顿问题 整体简洁明了让你的视觉效果达到极致,追寻探索化的中心欢迎您的使用 采用了无数据库全本地化设计(无 ...
- 360视频加速器官方版
360视频加速器 v1.0 官方版 软件大小:42.3MB 软件语言:简体中文 软件类别:网络加速 软件授权:官方版 更新时间:2014-12-31 应用平台:/Win8/Win7/WinXP 360 ...
- unity 360视频_如何将360视频与Unity集成
unity 360视频 Since the introduction of the new Video Player component in Unity 5.6, we've had a lot o ...
- 360°视频相机调研
Google Jump 可以拍3d全景视频 16个摄像头环状分布 水平360°画面,垂直120°画面 omnidirectional stereo (ODS) video(全景立体视频) mosaic ...
- java erp 视频_Java开发ERP项目视频教程
本套视频是传智播客推出的一套传统企业级项目开发课程,该视频专门针对有一定java基础(熟悉SSH集成框架)和前端基础(HTML JS JQuery.). 隐藏内容,您需要满足以下条件方可查看 更新至第 ...
最新文章
- python同步异步_python中Tornado的同步与异步I/O的介绍(附示例)
- opencv在pycharm上没有函数提示?(需要安装opencv-contrib-python)
- ajax post提交数据_详解Ajax异步加载
- 如何设置Pycharm在打开Terminal终端时,自动进入虚拟环境?
- django+mysql+插入数据库网页展示内容
- What we find changes who we become.
- python编程(基于订阅模式的mvc实现)
- 【万里征程——Windows App开发】数据绑定——简单示例、更改通知、数据转换...
- YOLOv5:道路损伤检测
- 通信电子线路高如云pdf_通信电子线路 第三版 教学课件 高如云 封面及目录.pdf...
- spring事务传播级别
- java变量小明扑克牌_Java模拟扑克牌洗牌实现生成52张扑克的方法示例
- 大学选修计算机课程内容,《大学计算机基础》学大纲(公共课).doc
- java裁剪图片_Java实现图片的裁剪
- Android Studio通过模拟器联网
- redis修改密码(windows)
- YOLOv3目标检测算法——通俗易懂的解析
- VB实现excel自动拆分表格
- Elasticsearch-分布式搜索引擎介绍
- idea下 git无法提交空的文件夹
热门文章
- 计算机术语中cad代表,计算机术语中,CAD表示什么
- The server returned the following error: 无法与服务器建立连接(0x80072EFD)
- cad尺寸标注快捷键_CAD快速在尺寸标注后加上公差的方法有哪些?【AutoCAD教程】...
- 计算机原理(3)主板上的CPU,存储器,南桥北桥等的总结
- Linux中 ll 和 ls 区别
- 华为笔记本linux双系统,真的有必要吗?华为笔记本搭载双系统
- iOS打开应用提示未受信任的企业级开发者
- oracle rman optimization,Oracle rman备份的使用(转)
- 绕过微软WGA正版验证(蓝色五角星)的几则技巧
- Java的Integer与int互转