360视频简介及ERP投影

news/2024/11/24 13:27:43/

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


http://www.ppmy.cn/news/152016.html

相关文章

360视频:旋转球面投影RSP

旋转球面投影&#xff08;Rotated sphere projection&#xff0c;RSP&#xff09;将球体分为两个相同的部分&#xff0c;然后投影到平面上&#xff0c;宽高比3&#xff1a;2。 图1 RSP投影 球面上两部分的分割线类似于图2中网球上的分割线。 图2 网球分割示意图 Frame Packin…

360视频:正八面体投影OHP

CMP投影是将球体投影到正方体上&#xff0c;但是透视投影过程不改变立体角的大小&#xff0c;即对应于球面上等立体角的两点&#xff0c;投影到立方体上后会出现中心区域密度高而边缘区域密度低的现象&#xff0c;导致投影均匀性较差。当使用的投影体和球体越接近时投影的均匀性…

360Lib中的坐标系

360Lib是JVET设计的一个360视频投影格式转换和质量评估的工具&#xff0c;其中投影格式转换应该是在之前的PCT360&#xff08;JVET D0090&#xff09;基础上改进得到的&#xff0c;支持的格式如下图&#xff1a; 注意&#xff1a;其中4&#xff08;用于生成视窗&#xff09;…

XXX.7z.001002003文件该怎么合并及解压缩

前言&#xff1a;这两天下载了一点资料&#xff0c;结果文件是压缩格式7z的分卷格式&#xff0c;如 *.7z.001 *.7z.002,这种文件是不能直接用WinRaR或者360压缩直接打开的&#xff0c;需要先合并为一个文件&#xff0c;网上找的教程都解释的不明不白的&#xff0c;不过还是弄明…

常用z反变换公式表_高中三角函数公式推理amp;记忆

更新说明:为满足部分考研学子的需求,本次新增内容主要有反三角函数图像、性质、基本公式(不含推理,若感兴趣可以去了解)。(更新于:Oct 9,2020) 首先,本人做一下简要的自我介绍。 本科已毕业,经历过考研复习(没上战场,至于什么原因以后再论)。说到三角函数公式,不管是高考…

7z解压crc错误_.7z解压文件末端错误 如何解压分卷压缩包 - 电脑故障 - 服务器之家...

.7z解压文件末端错误 如何解压分卷压缩包 发布时间&#xff1a;2017-05-25 来源&#xff1a;服务器之家 【新手教程】:如何解压分卷压缩包 【新手疑问】:怎么解压分卷压缩包 【如何解决】:地图分卷压缩包怎么解压 【特别感谢】:oogps 【是否测试】:已测试 现在很多网盘会有限制…

iOS开发动画(Animation)图片360度不停旋转

最开始的想法是让旋转的弧度从0到2 * M_PI, 让动画不停的repeat&#xff0c;实验了一下&#xff0c;没有任何效果&#xff0c;系统动画的时候看到0与2 &#xff0a;M_PI是同一起一始点&#xff0c;所以没有效果。 后来想到一种办法&#xff0c;就是一个变量不断的累加变大&…

html怎么解压缩文件,压缩包7z如何解压

怎么才能让安卓手机可以解压7z格式,也就是快压的 可以下载软件ZArchiver,免费版或者捐献版都可以,都是解压和压缩支持7zip格式的。 打开需要解压的7z格式文件,然后在打开方式中选择用ZArchiver打开。 用ZArchiver打开文件后,点击选择文件解压的位置。 如何让安卓手机可以解…