相关申请案的交叉参考
本专利申请案要求ye-kuiwang等人于2018年4月3日递交的发明名称为“将多个子图像视频码流轻量级重写为一个视频码流的约束条件(constraintsforlightweightrewritingofmultiplesub-picturevideobitstreamsintoonevideobitstream)”的第62/651,821号美国临时专利申请案的权益,其内容以引用的方式并入本文本中。
本发明大体上涉及用于虚拟现实(virtualreality,vr)的视频编码,并且具体涉及将vr图像码流编码为多个子图像码流以支持视角相关视频编码时的误差预防。
背景技术:
当数据要在带宽容量有限的通信网络中发送或以其它方式传输时,可能会比较困难,因为即使在视频较短的情况下也需要对大量视频数据进行描述。因此,视频数据通常要先压缩,然后在现代电信网络中传输。由于内存资源可能有限,当在存储设备上存储视频时,视频的大小也可能成为问题。视频压缩设备通常在信源侧使用软件和/或硬件,以在传输或存储之前对视频数据进行编码,从而减少用来表示数字视频图像所需的数据量。然后,在目的地侧视频解压缩设备接收压缩的数据。在有限的网络资源以及对更高视频质量的需求不断增长的情况下,需要改进压缩和解压缩技术,这些改进的技术在几乎不影响图像质量的情况下能够提高压缩比。
技术实现要素:
在一个实施例中,本发明包括一种在视频编码设备中实现的方法。所述方法包括:所述视频编码设备的处理器接收由多方向视频信号拼接的球形视频信号。所述方法还包括:所述处理器将所述球形视频信号映射到多个子图像视频信号中,每个子图像视频信号包括子图像序列。所述方法还包括:所述处理器将所述多个子图像视频信号编码为多个子图像码流,使得在解码端解码时,每个子图像中每个像素点的值与解码后的由所述子图像组成的整个图像中对应的像素点的值相等。所述方法还包括:所述处理器将所述多个子图像码流组成多个子图像轨迹,并指示所述子图像轨迹符合特定视频配置文件。所述方法还包括:所述视频编码设备的发送器向解码器发送所述多个子图像轨迹的集合以支持解码和显示虚拟现实视频视角。例如,编码器可以接收球形形状的虚拟现实(virtualreality,vr)视频序列并将该序列划分成子图像流。每个子图像流可以描述整个视频序列的子部分,并且可以单独编码。这有利于以较低分辨率编码和/或根本不发送用户看不到或实际上是背景的视频部分。当子图像流使用相邻子图像流中的像素点时,帧间预测相关的视频编码过程可能会有问题。例如,所述像素点可能不存在,或者由于乱序解码、分辨率差异、缺失某些子图像流等原因可能不包括期望的数据。本实施例确保编码器和解码器中的每个子图像中每个像素点的值与解码后的由所述子图像组成的整个图像中的对应像素点的值相等。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,将所述多个子图像视频信号编码为所述多个子图像码流包括:通过为每个当前子图像仅选择参考与当前子图像相同的子图像视频信号中的像素点的运动矢量,使用帧间预测对所述子图像码流进行部分编码。本实施例确保每个子图像流在帧间预测期间仅参考自己的像素点。确保了可以不参考相邻的子图像流而对每个子图像流进行解码,从而避免了在呈现期间子图像流之间出现帧间预测相关的伪影。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述特定视频配置文件是基于高效视频编码(highefficiencyvideocoding,hevc)视角相关的全向媒体格式(omnidirectionalmediaformat,omaf)视频配置文件。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,选择参考与所述当前子图像相同的子图像视频信号中的像素点的运动矢量,包括:选择参考所述相同子图像视频信号中整像素点位置的运动矢量;选择参考分数像素点位置的运动矢量,所述分数像素点位置仅使用所述相同子图像视频信号中的整像素点位置进行插值。只要可以通过仅根据公共子图像流像素点的插值重构分数像素点位置(例如,在所述子图像流的边缘处),就可以使用所述分数像素点位置。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,通过帧间预测对所述多个子图像视频信号进行编码还包括:针对每个当前子图像,从与所述当前子图像相同的子图像视频信号中的块中仅选择候选运动矢量。当应用基于合并模式的帧间预测时,产生合并子图像流时的另一个误差源。在合并模式中,创建候选运动矢量列表并将运动矢量作为索引编码到候选列表中。当从相邻的子图像流中选择候选索引时,可能会产生误差,因为所选候选索引可能在解码时不可用。本实施例限制了候选运动矢量,使其只从同一个子图像流中选择,从而避免了这个问题。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,通过帧间预测对所述多个子图像视频信号进行编码还包括禁用波前并行处理(wavefrontparallelprocessing,wpp)。hevc使用编码区块和wpp,但不可以一起使用,因为wpp会干扰在解码器中进行的合并。编码区块用于将视频序列划分成子图像流,因此可以禁用wpp以符合hevc。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,禁用wpp包括将entropy_coding_sync_enabled_flag设置为0,其中所述entropy_coding_sync_enabled_flag包括在用于所述球形视频信号的图像参数集(pictureparameterset,pps)中。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,约束所述子图像轨迹可以为:每个子图像轨迹包括的媒体像素点数量相同。每个子图像流包括在不同的轨迹中。为了保证所述子图像流能够在解码器中合并,在每个轨迹中以相同的速率对所述媒体像素点进行编码/解码。这有利于轨迹合并,并且不会发生时间不匹配。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,约束所述子图像轨迹还可以为:所述子图像轨迹包括公共呈现时间。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,约束所述子图像轨迹还可以为:约束所述子图像轨迹,使得具有所述公共呈现时间的媒体像素点被指定在所述子图像轨迹上具有普通图像顺序编号值。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,将所述球形视频信号映射到所述多个子图像视频信号:包括为每个子图像视频信号设置宽度和高度,其中所述宽度为64个像素的整数倍,所述宽度大于或等于256个像素,所述高度大于或等于256个像素。
在一个实施例中,本发明包括一种非瞬时性计算机可读介质,包括被视频编码设备使用的计算机程序产品,所述计算机程序产品包括存储在所述非瞬时性计算机可读介质中的计算机可执行指令,当处理器执行所述计算机可执行指令时,所述视频编码设备执行任一上述方面所述的方法。
在一个实施例中,本发明包括视频编码设备,包括处理器,用于接收从多方向视频信号拼接的球形视频信号。所述处理器还用于将所述球形视频信号映射到多个子图像视频信号中,每个子图像视频信号包括子图像序列。所述处理器还用于将所述多个子图像视频信号编码为多个子图像码流,使得在解码器中解码时,每个子图像中每个像素点的值与解码后的由所述子图像组成的整个图像中对应的像素点的值相等。所述处理器还用于将所述多个子图像码流组成多个子图像轨迹,并指示所述子图像轨迹符合特定视频配置文件。所述视频编码设备还包括发送器,与所述处理器耦合,所述发送器用于向解码器发送所述多个子图像轨迹的集合以支持解码和显示虚拟现实视频视角。例如,编码器可以接收球形形状的虚拟现实(virtualreality,vr)视频序列并将该序列划分成子图像流。每个子图像流可以描述整个视频序列的子部分,并且可以单独编码。这有利于以较低分辨率编码和/或根本不发送用户看不到或有效背景的视频部分。当子图像流使用相邻子图像流中的像素点时,帧间预测相关的视频编码过程可能产生问题。例如,所述像素点可能不存在,或者可能不包括由于乱序解码、分辨率差异、某些子图像流的省略等的期望数据。本实施例确保编码器和解码器中的每个子图像中每个像素点的值与解码后的由所述子图像组成的整个图像中的对应像素点的值相等。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,将所述多个子图像视频信号编码为所述多个子图像码流包括:通过为每个当前子图像仅选择参考与当前子图像相同的子图像视频信号中的像素点的运动矢量,使用帧间预测对所述子图像码流进行部分编码。本实施例确保每个子图像流在帧间预测期间仅参考自己的像素点。确保了可以不参考相邻的子图像流而对每个子图像流进行解码,从而避免了在呈现期间子图像流之间出现帧间预测相关的伪影。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述特定视频配置文件是基于hevc视角相关的omaf视频配置文件。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,选择参考与所述当前子图像相同的子图像视频信号中的像素点的运动矢量,包括:选择参考所述相同子图像视频信号中整像素点位置的运动矢量;选择参考分数像素点位置的运动矢量,所述分数像素点位置仅使用所述相同子图像视频信号中的整像素点位置进行插值。只要可以通过仅根据公共子图像流像素点的插值重构分数像素点位置(例如,在所述子图像流的边缘处),就可以使用所述分数像素点位置。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,通过帧间预测对所述多个子图像视频信号进行编码还包括:针对每个当前子图像,从与所述当前子图像相同的子图像视频信号中的块中仅选择候选运动矢量。当从相邻的子图像流中选择候选索引时,可能会产生误差,因为所选候选索引可能在解码时不可用。本实施例限制了候选运动矢量,使其只从同一个子图像流中选择,从而避免了这个问题。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,通过帧间预测对所述多个子图像视频信号进行编码还包括禁用wpp。hevc使用编码区块和wpp,但不可以一起使用,因为wpp会干扰在解码器中进行的合并。编码区块用于将视频序列划分成子图像流,因此可以禁用wpp以符合hevc。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,禁用wpp包括将entropy_coding_sync_enabled_flag设置为0,其中所述entropy_coding_sync_enabled_flag包括在用于所述球形视频信号的pps中。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,约束所述子图像轨迹可以为:每个子图像轨迹包括的媒体像素点数量相同。每个子图像流包括在不同的轨迹中。为了保证所述子图像流能够在解码器中合并,在每个轨迹中以相同的速率对所述媒体像素点进行编码/解码。这有利于轨迹合并,并且不会发生时间不匹配。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,约束所述子图像轨迹还可以为:所述子图像轨迹包括公共呈现时间。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,约束所述子图像轨迹还可以为:约束所述子图像轨迹,使得具有所述公共呈现时间的媒体像素点被指定在所述子图像轨迹上具有普通图像顺序编号值。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,将所述球形视频信号映射到所述多个子图像视频信号:包括为每个子图像视频信号设置宽度和高度,其中所述宽度为64个像素的整数倍,所述宽度大于或等于256个像素,所述高度大于或等于256个像素。
在一个实施例中,本发明包括视频编码设备,包括视频信号接收模块,用于接收从多方向视频信号拼接的球形视频信号。所述视频编码设备还包括映射模块,用于将所述球形视频信号映射到多个子图像视频信号中,每个子图像视频信号包括子图像序列。所述视频编码设备还包括编码模块,用于将所述多个子图像视频信号编码为多个子图像码流,使得在解码器中解码时,每个子图像中每个像素点的值与解码后的由所述子图像组成的整个图像中对应的像素点的值相等。所述视频编码设备还包括组成模块,用于将所述多个子图像码流组成多个子图像轨迹,并指示所述子图像轨迹符合特定视频配置文件。所述视频编码设备还包括发送模块,用于向解码器发送所述多个子图像轨迹的集合以支持解码和显示虚拟现实视频视角。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述视频流接收模块、映射模块、编码模块和发送模块还用于执行上述方面中任一方面所述的方法。
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述限制还包括:所述轨迹上具有相同像素点数的媒体像素点中携带的子图像的图像顺序编号值相等。
为清楚起见,上述任一实施例可以与上述其它任一或多个实施例结合以创建本发明范围内的新实施例。
这些和其它特征将结合附图和权利要求书从以下详细描述中更清楚地理解。
附图说明
为了更透彻地理解本发明,现参阅结合附图和具体实现方式而描述的以下简要说明,其中相同附图标记表示相同部分。
图1为基于vr视频编码的示例性系统的示意图。
图2为将vr图像码流编码为多个子图像码流的示例方法的流程图。
图3为对包括子图像视频信号的视频信号进行编码的示例性方法的流程图。
图4为用于视频编码的示例性编解码(编解码器)系统的示意图。
图5为可对子图像码流进行编码的示例性视频编码器的示意图。
图6为可对子图像码流进行解码的示例性视频解码器的示意图。
图7为从vr图像视频流中划分的多个子图像视频信号的示意图。
图8为单向帧间预测的示例的示意图。
图9为双向帧间预测的示例的示意图。
图10为基于块的视频编码机制的示例的示意图。
图11为用于传输视频编码的示例性国际标准组织(internationalstandardorganization,iso)基本媒体文件格式(isobasemediafileformat,isobmff)的示意图。
图12为对子图像码流进行编码的示例性方法的流程图。
图13为示例性视频编码设备的示意图。
图14为可对子图像码流进行编码的示例性视频编码设备的示意图。
图15为对子图像码流进行编码的另一示例性方法的流程图。
具体实施方式
首先应理解,尽管下文提供一项或多项实施例的说明性实现方式,但本发明所公开的系统和/或方法可使用任何数目的技术来实施,无论该技术是当前已知还是现有的。本发明决不应限于下文所说明的说明性实现方式、附图和技术,包括本文所说明并描述的示例性设计和实现方式,而是可在所附权利要求书的范围以及其等效物的完整范围内修改。
本发明涉及vr,vr也可以称为全向媒体、沉浸式媒体和360度媒体。vr是在模拟环境中产生的采用视觉、音频和/或触觉反馈的交互式记录和/或计算机生成的体验。对于视觉角度,vr提供球体(或球体的子部分)成像,用户位于所述球体的中心。所述球体成像可由头戴式显示器(headmounteddisplay,hmd)来呈现。具体地,hmd向用户提供球体的视场角(fieldofview,fov),也称为视角。因此,用户能够通过视角查看球体的子部分,并且移动用户头部以动态地改变视角的位置。这给人一种处于球体定义的环境中的效果。用户的每只眼睛看到的是以偏移的方式呈现的球体,为用户提供三维空间的感觉。每张图像(也称为帧)包括用户fov内的球体区域和用户fov外的球体区域。因此,vr帧包括的数据比非vr视频图像明显更多。
为了生成vr视频流,多维摄像机阵列同时从所有相关角度记录球体。产生多方向视频信号,这些多方向视频信号组合形成一个用作vr视频流的球形视频信号。为了压缩vr视频流,可以将流的每个帧划分成预定义形状的子图像,例如矩形、正方形或其它形状。这些子图像产生子图像视频信号,然后这些子图像视频信号可以被编码并发送到用户进行解码、重构为vr视频流以及基于视角向用户显示。一种确保正确进行重构的机制以相同分辨率对每个子图像视频信号进行编码。但是,仍然会导致文件非常大。
视角相关编码是一种示例性压缩技术,可以进一步减小vr视频流的文件大小(例如,以支持基于vr的视频流)。视角相关编码使用以下概念:用户在任何时间都只查看视角中的球体部分。因此,用户fov以外的区域可以以较低分辨率传输(例如,和当前fov相比分辨率下降)。子图像视频信号的分辨率可以随着fov的移动而动态地增大或减小,例如,通过动态地选择不同分辨率的不同子图像视频信号表示。该方法通过降低用户看不到的球体区域(例如,和/或被认为是背景和在编码时不重要的区域)的视频质量来减小vr视频流的总文件大小。
在某些情况下,视角相关编码可能会产生视频编码误差。例如,可以通过使用帧间预测来对视频流(例如子图像视频信号)进行编码。在帧间预测中,可以将多个帧中的像素块(例如,表示一个对象)编码为从包括像素的不同帧中的当前块指向另一块的运动矢量。因此,可以对多个帧中的一个块编码一次(例如,通过帧内预测),然后一系列运动矢量都参考这个块,以便减少冗余,减小文件大小。帧间预测有多种模式。合并模式和高级运动矢量预测(advancemotionvectorprediction,amvp)模式等模式根据邻块生成当前块的候选运动矢量列表。在这些模式中,通过在候选列表中指示索引来指示选定运动矢量。这样,整个像素块可以编码为一个索引值。当应用于包括不同分辨率和/或帧率的相邻子图像视频信号时,使用候选列表的帧间预测可能会在视角相关编码中产生问题。具体地,第一子图像视频信号边缘的块的候选列表可以取决于相邻的第二子图像视频信号的对应边缘所使用的运动矢量。当第一子图像视频信号和第二子图像视频信号以不同的分辨率/帧率传输时,分辨率相关数据不匹配可能导致候选列表中包括非期望的运动矢量值(或缺失期望值)。这样导致解码器生成不正确的候选列表,从而导致对候选列表索引的错误解译。对候选列表索引的错误解译导致解码的子图像视频信号产生误差,从而导致显示给用户的vr视频流产生误差。如果一个子图像视频信号中的运动矢量参考另一个子图像视频信号中的像素点,则可能发生类似问题,因为该像素点可能不可用和/或分辨率降低。此外,视频编解码器可以使用波前并行处理(wavefrontparallelprocessing,wpp)来并行地对视频图像的块进行编码/解码。然而,wpp可影响块级编码机制,并且因此根据wpp以不同分辨率解码图像的不同部分可产生其它误差。
本文公开了一种机制,将帧间预测应用于根据视角相关编码机制编码的vr视频流的子图像视频信号时,这种机制用于减少在帧间预测中使用候选列表所产生的误差。例如,在对子图像视频信号进行编码时,子图像视频信号的子图像中的当前块只能参考同一子图像视频信号中整像素点位置的参考块中的参考像素点,因此不能参考其它子图像视频信号中的整像素点位置或分数像素点位置。帧内预测和帧间预测都适用。此外,只有当可以通过仅根据同一子图像码流中的整像素点位置和/或分数像素点位置进行插值来重新创建分数像素点位置中的像素点时,可以参考子图像视频信号中的分数像素点位置。此外,在进行帧间预测时,相邻子图像码流中的块的运动矢量不包括在候选运动矢量列表中。这些限制条件确保可以在不参考相邻子图像码流情况下对每个子图像码流进行解码,因此避免了分辨率不匹配情况。此外,wpp不能与子图像码流一起使用。例如,可以将每个图像参数集(pictureparameterset,pps)中的entropy_coding_sync_enabled_flag设置为0,为子图像视频信号禁用wpp。此外,通过确保包括子图像视频信号的轨迹具有相同的呈现时间,并确保公共vr图像中的每个像素点使用相同的图像顺序编号值,即使这些像素点被划分成不同的子图像码流或携带于不同轨迹中,也可以避免子图像码流之间的时序不匹配问题。
图1为基于vr视频编码的示例性系统100的示意图。系统100包括多方向摄像机101、包括编码器103的vr编码设备104、解码器107和呈现设备109。多方向摄像机101包括摄像机设备阵列。每个摄像机设备指向不同角度,使多方向摄像机101可以从多个角度获取周围环境的多方向视频信号。例如,多方向摄像机101可以将环境视频拍摄成球体,多方向摄像机101位于球体的中心。如本文中所使用,球体和/或球形视频既指几何球体又指几何球体的子部分,例如球缺、球形穹面、球截形等。例如,多方向摄像机101可拍摄180度视频以覆盖一半环境,使得制作人员能够保持在多方向摄像机101的后面。多方向摄像机101还可以在360度(或其任意子部分)内拍摄视频。然而,多方向摄像机101下的地面的一部分可以省略,导致视频小于正球体。因此,此处使用的术语“球体”是为了描述的清晰性而使用的通用术语,不应视为从几何立点进行限制。
将多方向摄像机101的视频转发给vr编码设备104。vr编码设备104可以是包括专用vr编码软件的计算系统。vr编码设备104可以包括编码器103。在一些示例中,编码器103也可以包括在独立于vr编码设备104的计算机系统中。vr编码设备104用于将多方向视频信号转换为包括所有相关角度的整个录制区域的一个多方向视频信号。这种转换可以称为图像拼接。例如,可以将同时捕获的每个视频流的帧拼接在一起以创建一个球形图像。然后,可以根据球形图像创建球形视频信号。为了描述的清晰性,应注意,除非特别说明,术语“帧”和“图像(picture/image)”在本文中可互换。
然后,球形视频信号可以转发给编码器103进行压缩。编码器103是能够将信息从一种格式转换为另一种格式的设备和/或程序,以便进行标准化、加速和/或压缩。标准化编码器103用于对矩形和/或正方形图像进行编码。因此,编码器103用于将球形视频信号的每个球形图像映射到预定义形状的多个子图像中,例如矩形、正方形或其它二维几何形状。虽然球形图像可以被映射到任何形状的子图像中,但是为了描述的清晰性和简洁性,子图像可以在下文中称为矩形。然而,不应认为这种矩形限制了无上下文指示的相反含义。在完成映射之后,可以将子图像放置在单独的子图像视频信号中。因此,每个子图像视频信号显示随时间从球形视频信号的子部分录制的图像流。然后,编码器103可以对每个子图像视频信号进行编码以将视频流压缩成可管理的文件大小。下文将更详细地讨论编码过程。一般而言,编码器103将每个子图像视频信号的每一帧分割成像素块,通过帧间预测和/或帧内预测来压缩像素块以创建包括预测块和残差块的编码块,对残差块应用变换以进一步压缩,并在块上应用各种滤波器。压缩块以及对应的语法以国际标准化组织基本媒体文件格式(internationalstandardizationorganizationbasemediafileformat,isobmff)和/或全向媒体格式(omnidirectionalmediaformat,omaf)等格式存储在码流中。
vr编码设备104可以将编码的码流存储在本地和/或服务器上的存储器中,以便按需与解码器107进行通信。数据可以通过网络105进行转发,网络105可以包括因特网、移动通信网络(例如,基于长期演进(longtermevolution,lte)的数据网络)或其它数据通信数据系统。
解码器107是位于用户位置的设备,用于进行编码过程的逆过程以从编码码流重构子图像视频信号。解码器107还合并子图像视频信号以重构球形视频信号。然后,可以将球形视频信号或其子部分转发给呈现设备109。呈现设备109是用于向用户显示球形视频信号的设备。例如,呈现设备109可以包括固定在用户头部并遮挡用户眼睛的hmd。呈现设备109可以包括用于每个眼睛的屏幕、摄像机、运动传感器、扬声器等,并且可以通过无线和/或有线连接与解码器107进行通信。呈现设备109可向用户显示球形视频信号的子部分。示出的子部分基于呈现设备的fov和/或视角。例如,呈现设备109可以通过采用运动跟踪传感器,根据用户头部移动来改变fov的位置。用户可以看到球形视频信号中根据头部运动的不同部分。此外,呈现设备109可以根据用户瞳距(interpupillarydistance,ipd)来调整每个眼睛的fov,以创建三维空间效果。
图2为例如通过采用系统100的组件将vr图像码流编码成多个子图像码流的示例性方法200的流程图。在步骤201中,使用多方向摄像机组(例如多方向摄像机101)来捕获多方向视频信号。多方向视频信号包括不同角度的环境视图。例如,多方向视频信号可以在平面(水平面)内围绕摄像机捕获360度、180度、240度等度数的视频。多方向视频信号还可以在垂直平面上围绕摄像机捕获360度、180度、240度等度数的视频,产生包括足以在一段时间内覆盖摄像机周围的球形区域的信息。
在步骤203中,多方向视频信号在时域上同步。具体地,每个方向视频流包括以对应角度拍摄的一系列图像。多方向视频信号通过确保从每个方向视频流中在同一时域位置捕获的帧一起处理而同步。然后,方向视频流中的帧可以在空域中拼接在一起以产生球形视频信号。因此,球形视频信号的每一帧都包括从所有方向视频流的帧中获取的数据,这些数据产生于公共时间位置。
在步骤205中,球形视频信号被映射到子图像视频信号(例如,矩形、正方形等)中。该过程也可以称为将球形视频信号投影到矩形子图像视频信号中。如上所述,编码器和解码器通常设计为对矩形帧和/或正方形帧进行编码。因此,将球形视频信号映射到矩形子图像视频信号会产生视频流,该视频流可以分别由非vr特定编码器和解码器进行编码和解码。应注意,步骤203和205是针对vr视频处理而言的,因此可以由专门的vr硬件、软件或其组合来执行。
在步骤207中,矩形子图像视频信号可以转发给编码器103等编码器。然后,编码器将子图像视频信号编码为对应媒体文件格式的子图像码流。具体地,编码器可以将每个子图像视频信号视为视频信号。编码器可以通过帧间预测、帧内预测等对每个子图像视频信号的每个帧进行编码。下文关于图3至图14详细地讨论编码和对应的解码以及编码器和解码器。在文件格式方面,子图像视频信号可以存储在isobmff中。例如,以指定分辨率捕获子图像视频信号。然后,可以将子图像视频信号下采样到各种较低分辨率进行编码。每个分辨率都可称为表示。质量越低,图像越不清晰,但文件大小却越小。因此,与伴随视觉质量损失的较高质量表示相比,可以使用更少的网络资源(例如,时间、带宽)向用户发送较低质量表示。每个表示可以存储在对应的轨迹集合中。因此,轨迹可以发送给用户,其中轨迹包括各种分辨率(例如,视觉质量)下的子图像码流。
在步骤209中,可以将子图像码流作为轨迹发送给解码器。在一些示例中,通过从相同表示传输轨迹,以相同质量传输所有子图像码流。这种方法的缺点是,最终vr视频流中不太受关注的区域以与所有其它区域相同的分辨率传输。视角相关编码可用于通过这种方法改进压缩。在视角相关编码中,通过选择质量较高的表示,以较高的分辨率发送包括用户fov中的数据的子图像码流的轨迹。通过选择质量较低的表示,可以以逐渐降低的分辨率发送包括用户fov以外的区域的子图像码流的轨迹。在一些示例中甚至可以完全省略某些区域。例如,在用户决定改变fov以包括这些区域的情况下,可以以略微降低的质量发送与fov相邻的区域。远离fov的区域可以以逐渐降低的质量发送,因为这样的区域进入fov的可能性逐渐变小,并且因此向用户呈现的可能性逐渐减小。轨迹可以包括相对短的视频片段(例如,大约3秒),因此针对特定视频区域选择的表示可以根据fov中的变化随时间变化。质量可以随着用户的fov变化而变化。视角相关编码可以明显减小发送给用户的轨迹的文件大小,而视觉质量不会明显受损,因为质量降低的区域不太可能被用户看到。
在步骤211中,解码器107等解码器接收包括子图像码流的轨迹。然后,解码器可以将子图像码流解码为子图像视频信号进行显示。解码过程涉及编码过程的逆过程(例如,使用帧间预测和帧内预测),并且下文关于图3至图14更详细地进行讨论。
在步骤213中,解码器可以将子图像视频信号合并到球形视频信号中,向用户呈现。具体地,解码器可以使用轻量级合并算法,该算法从在同一呈现时间产生的每个子图像视频信号中选择帧,并且根据与对应子图像视频信号关联的位置和/或角度将它们合并在一起。解码器还可以使用滤波器来平滑子图像视频信号之间的边缘、去除伪影等。然后,解码器可以将球形视频信号转发给呈现设备,例如呈现设备109。
在步骤215中,呈现设备呈现球形视频信号的视角以向用户呈现。如上所述,不呈现每个时间点的球形视频信号在fov之外的区域。因此,在视角相关编码中,低质量表示被有效地省略,因此在减小文件大小的同时,降低观看质量对用户体验的影响可以忽略不计。
应用于系统100和方法200的视角相关编码减小了文件大小,而不会给用户带来明显的视觉质量损失。然而,在某些情况下,该方法可能会产生视频编码误差。具体地,当子图像视频信号具有不同的表示时,扩展到子图像视频信号的边界上的帧间预测和帧内预测可能会产生伪影。这是因为较低质量的表示是有损的,并省略数据以减小文件大小。高质量子图像视频信号可以根据从相邻的低质量子图像视频信号中移除的数据对像素进行编码。因此,当这些数据已经从相邻的低质量子图像视频信号中移除时,高质量子图像视频信号可以被错误地解码。本发明包括限制对子图像视频信号进行编码以确保每个子图像视频信号是自包括的机制,因此当在解码器中应用轻量级合并算法时不会发生这种误差。图3至图10描述了应用于每个子图像视频信号编码过程和系统。图11至图13进一步描述可以应用以避免这种伪影的约束条件。
图3为对包括子图像视频信号的视频信号进行编码的示例性方法300的流程图。例如,方法300可从方法200的步骤205接收多个子图像视频信号。方法300将每个子图像视频信号视为视频信号输入。方法300将步骤301至317应用于每个子图像视频信号,以便实现方法200的步骤207至211。因此,方法300中的输出视频信号包括解码的子图像视频信号,可以根据方法200的步骤213和215合并和显示。
方法300在编码器中对视频信号(例如包括子图像视频信号)进行编码。编码过程通过使用各种机制来压缩视频信号以减小视频文件的大小。较小的文件大小有利于压缩视频文件传输给用户,同时减少相关的带宽开销。然后,解码器对压缩视频文件进行解码,以重构原始视频信号,向终端用户显示。解码过程通常与编码过程一样,有利于解码器一致地重构视频信号。
在步骤301中,将视频信号输入到编码器中。例如,视频信号可以是存储在存储器中的未压缩的视频文件。作为另一示例,视频文件可以由视频捕获设备(例如,摄像机)捕获,并且进行编码以支持视频的直播流。视频文件可以同时包括音频组件和视频组件。视频组件包括一系列图像帧,当按顺序观看时,这些图像帧给人以运动的视觉效果。这些帧包括根据光表示的像素(本文称为亮度分量(或亮度像素点))和颜色(称为色度分量(或颜色像素点))。
在步骤303中,将视频分割成块。分割包括将每个帧中的像素细分为正方形和/或矩形块以用于压缩。例如,在高效视频编码(highefficiencyvideocoding,hevc)(也称为h.265和mpeg-h第2部分)中,可以首先将帧分为编码树单元(codingtreeunit,ctu),这些编码树单元是预定义大小(例如,64个像素×64个像素)的块。ctu包括亮度像素点和色度像素点。如本文所使用,像素点(也称为像素)是对应位置处的图像的值(例如,亮度/光值或色度/颜色值)。可以使用编码树将ctu分成块,然后递归地细分这些块,直到获得支持进一步编码的配置。例如,可以细分帧的亮度分量,直到各个块包括相对均匀的照明值。此外,可以细分帧的色度分量,直到各个块包括相对均匀的颜色值。因此,视频帧的内容不同,分割机制就不同。
在步骤305中,使用各种压缩机制来压缩在步骤303中分割的图像块。例如,可以使用帧间预测和/或帧内预测。帧间预测旨在利用一个事实,即物体在一个公共场景中往往出现在连续的帧中。因此,无需在相邻帧中重复描述在参考帧中描绘对象的块。具体地,一个对象,如一张桌子,可以在多个帧中保持恒定的位置。因此,该桌子只描述一次,相邻帧可以回指参考帧。可以采用模式匹配机制来匹配多个帧中的对象。此外,由于对象移动或摄像机移动等,移动对象可以通过多个帧表示。在特定示例中,一个视频可以通过多个帧显示在屏幕上移动的汽车。运动矢量可以用来描述这种移动(或缺乏这种移动)。运动矢量是一个二维矢量,提供从帧中的对象的坐标到参考帧中的对象的坐标的偏移。因此,帧间预测可将当前帧中的图像块编码为运动矢量集合,指示与参考帧中的对应块的偏移。
帧内预测对公共帧中的块进行编码。帧内预测利用亮度分量和色度分量往往在帧中聚集这一事实。例如,一棵树的一部分中的一片绿色往往与几片类似的绿色相邻。帧内预测使用多方向预测模式(例如,hevc中的33个模式)、平面模式和直流(directcurrent,dc)模式。方向模式指示当前块与相邻块在对应方向上的像素点相似/相同。平面模式表示可以根据行边缘的邻块对行/列(例如平面)上的一系列块进行插值。实际上,平面模式通过在变化值中使用相对恒定的斜率来指示光/颜色在行/列之间的平滑过渡。dc模式用于边界平滑,指示块和方向预测模式的角方向关联的所有邻块的像素点关联的平均值相似/相同。因此,帧内预测块可以将图像块表示为各种关系预测模式值而不是实际值。此外,帧间预测块可以将图像块表示为运动矢量值而不是实际值。在这两种情况下,预测块在某些情况下可能不完全表示图像块。任何差异都存储在残差块中。可以对残差块进行变换以进一步压缩文件。
在步骤307中,可以应用各种滤波技术。在hevc中,根据环内滤波方案应用滤波器。以上讨论的基于块的预测可在解码器中创建块状图像。此外,基于块的预测方案可以对块进行编码,然后重构编码块,以供以后用作参考块。环内滤波方案迭代地将噪声抑制滤波器、去块滤波器、自适应环路滤波器和像素点自适应偏移(sampleadaptiveoffset,sao)滤波器应用到块/帧。这些滤波器减少了此类块伪影,以便可以准确地重构编码文件。此外,这些滤波器减少了重构参考块伪影,使得伪影不太可能在基于重构参考块编码的后续块中产生其它的伪影。
在步骤309中,一旦视频信号被分割、压缩和滤波,则将所得数据编码到码流中。码流包括上述数据以及任何期望支持解码器中适当的视频信号重构的信令数据(例如,语法)。例如,此类数据可以包括分割数据、预测数据、残差块和向解码器提供编码指令的各种标志。码流可以存储在存储器中,以便根据请求向解码器传输,例如作为isbbmff中的轨迹和/或轨迹片段。码流还可以向多个解码器广播和/或组播。码流的创建是一个迭代过程。因此,步骤301、303、305、307和309可以在多个帧和块上连续和/或同时发生。图3所示的顺序是为了描述的清晰性和讨论的简洁性而呈现的,并非旨在将视频编码过程限制于特定顺序。
在步骤311中,解码器接收码流并开始解码过程。例如,解码器使用熵解码方案将码流转换为对应的语法和视频数据。在步骤311中,解码器使用码流中的语法数据来确定帧的分割。所述分割应与步骤303中的块分割的结果匹配。现在描述可以在步骤311中使用的熵编码/解码。编码器在压缩过程中做出许多选择,例如根据输入图像中的值的空间定位从多个可能选择中选择块分割方案。指示确切的选择可能会使用大量的位元。本文中使用的位元是当作变量的二进制值(例如,根据上下文可能变化的比特值)。熵编码有利于编码器舍弃任何明显不适合特定情况的选项,从而留下一组可使用的选项。然后,为每个可使用的选项分配一个码字。码字的长度取决于可使用选项的数量(例如,一个位元对应两个选项,两个位元对应三个到四个选项)。然后,编码器对所选选项的码字进行编码。此方案减小了码字的大小,因为码字的大小与唯一指示从可使用的选项的小子集中的一个选项,而非唯一指示从所有可能选项的潜在大集中的选项所需要的码字一样大。然后,解码器通过以与编码器类似的方式确定可使用选项集来解码所述选项。通过确定可使用选项集,解码器可以读取码字并确定编码器做出的选择。
在步骤313中,解码器执行块解码。具体地,解码器进行逆变换来生成残差块。然后,解码器使用残差块和对应的预测块,根据分割来重构图像块。预测块可包括步骤305中在编码器中生成的帧内预测块和帧间预测块。然后,根据在步骤311中确定的分割数据将重构图像块放置在重构视频信号的帧中。步骤313的语法还可以通过上文讨论的熵编码在码流中指示。
在步骤315中,以类似于编码器在步骤307的方式对重构视频信号的帧执行滤波。例如,可以对帧使用噪声抑制滤波器、去块滤波器、自适应环路滤波器和sao滤波器以消除块伪影。一旦对帧进行滤波,可以在步骤317中将视频信号转发用于合并,并且输出到hdm等显示器以供终端用户查看。
本发明涉及一些修改,防止vr视频流中的子图像视频信号以特定分辨率编码,然后根据视角相关编码以不同分辨率解码时产生伪影。步骤305中的块压缩机制会产生这些伪影。因此,本发明改进了编码器在步骤305中的块压缩和解码器在步骤313中的块解码的功能。这样减小了文件大小,从而提高了编码效率,和/或提高了解码器中的所产生的解码vr视频流的视觉质量。
图4是用于视频编码的示例性编解码(编解码器)系统400的示意图。具体地,编解码系统400提供支持根据方法200和300对子图像视频信号进行编解码的功能。此外,编解码系统400可用于实现系统100的编码器103和/或解码器107。
广义地,编解码系统400用于描述编码器和解码器中使用的组件。如关于操作方法300中的步骤301和303所讨论,编解码系统400接收帧并对帧进行分割形成视频信号(例如,包括子图像视频信号),产生分割视频信号401。如关于方法300中的步骤305、307和309所讨论,当作为编码器时,编解码系统400将分割视频信号401压缩到编码码流中。如关于方法300中的步骤311、313、315和317所论述,当作为解码器时,编解码系统400从码流生成输出视频信号。编解码系统400包括通用编码器控制组件411、变换缩放和量化组件413、帧内估计组件415、帧内预测组件417、运动补偿组件419、运动估计组件421、缩放和逆变换组件429、滤波器控制分析组件427、环内滤波器组件425、解码图像缓冲器组件423、标头格式化和上下文自适应二进制算术编码(contextadaptivebinaryarithmeticcoding,cabac)组件431。这些组件如图所示相耦合。在图4中,黑线表示待编码/解码数据的运动,而虚线表示控制其它组件操作的控制数据的运动。编解码系统400中的组件都可以存在于编码器中。解码器可包括编解码系统400的中组件的子集。例如,解码器可以包括帧内预测组件417、运动补偿组件419、缩放和逆变换组件429、环内滤波器组件425和解码图像缓冲器组件423。现对这些组件加以说明。
分割视频信号401是已通过编码树分割成像素块的捕获视频序列。编码树使用各种划分模式将像素块细分为更小的像素块。然后,可以将这些块进一步细分为更小的块。所述块可以称为编码树上的节点。将较大的父节点划分成较小的子节点。节点被细分的次数称为节点/编码树的深度。在某些情况下,划分的块可以包括在编码单元(codingunit,cu)中。例如,cu可以是ctu的子部分,包括亮度块、红差色度(cr)块和蓝差色度(cb)块以及cu的对应语法指令。划分模式可以包括二叉树(binarytree,bt)、三叉树(tripletree,tt)和四叉树(quadtree,qt),用于将节点分别划分为形状不同的两个、三个或四个子节点,具体取决于所使用的划分模式。将分割视频信号401转发到通用编码器控制组件411、变换缩放和量化组件413、帧内估计组件415、滤波器控制分析组件427和运动估计组件421进行压缩。
通用编码器控制组件411用于根据应用约束条件做出与将视频序列的图像编码到码流中相关的决策。例如,通用编码器控制组件411管理码率/码流大小相对于重构质量的优化。可以根据存储空间/带宽可用性和图像分辨率请求做出此类决策。通用编码器控制组件411还根据传输速度管理缓冲器的利用率,以减轻缓存欠载和超载问题。为了管理这些问题,通用编码器控制组件411管理由其它组件进行的分割、预测和滤波。例如,通用编码器控制组件411可以动态增加压缩复杂度以增大分辨率和带宽利用率,或者降低压缩复杂度以降低分辨率和带宽利用率。因此,通用编码器控制组件411控制编解码系统400的其它组件来平衡视频信号重构质量与码率问题。通用编码器控制组件411创建控制数据,控制其它组件的操作。还将控制数据转发到标头格式化和cabac组件431,以在码流中编码,从而指示在解码器中解码的参数。
分割视频信号401还发送到运动估计组件421和运动补偿组件419进行帧间预测。可以将分割视频信号401的帧或片分为多个视频块。运动估计组件421和运动补偿组件419根据一个或多个参考帧中的一个或多个块对所接收视频块执行帧间预测编码以提供时间预测。编解码系统400可以执行多个编码过程,以便为每个视频数据块选择适当的编码模式,等等。
运动估计组件421和运动补偿组件419可以高度集成,但出于概念的目的单独说明。由运动估计组件421执行的运动估计是生成运动矢量的过程,运动矢量用于估计视频块的运动。例如,运动矢量可以指示编码对象相对于预测块的位移。预测块是被发现在像素差方面与待编码块紧密匹配的块。预测块也可以称为参考块。此类像素差可以通过绝对差和(sumofabsolutedifference,sad)、平方差和(sumofsquaredifference,ssd)或其它差度量确定。hevc使用若干编码对象,包括ctu、编码树块(codingtreeblock,ctb)和cu。例如,可以将ctu分成多个ctb,然后可以将ctb划分为多个cb包括在cu中。cu可以编码为包括预测数据的预测单元(predictionunit,pu)和/或包括cu的变换残差数据的变换单元(transformunit,tu)。运动估计组件421使用率失真分析作为率失真优化过程的一部分来生成运动矢量、pu和tu。例如,运动估计组件421可以确定当前块/帧的多个参考块、多个运动矢量等,并且可以选择具有最佳率失真特性的参考块、运动矢量等。最佳率失真特性平衡视频重构的质量(例如,压缩造成的数据丢失量)和编码效率(例如,最终编码的大小)。
在一些示例中,编解码系统400可以计算存储在解码图像缓冲器组件423中的参考图像的子整数像素位置的值。例如,视频编解码系统400可对参考图像的四分之一像素位置、八分之一像素位置或其它分数像素位置的值进行插值。因此,运动估计组件421可执行有关于整像素位置和分数像素位置的运动搜索,并输出具有分数像素精度的运动矢量。运动估计组件421通过比较pu的位置与参考图像的预测块的位置来计算帧间编码片中视频块的pu的运动矢量。运动估计组件421将计算的运动矢量作为运动数据输出至标头格式化和cabac组件431进行编码,将运动输出至运动补偿组件419。
由运动补偿组件419执行的运动补偿可涉及根据由运动估计组件421确定的运动矢量获取或生成预测块。同样,在一些示例中,运动估计组件421和运动补偿组件419可以在功能上集成。在接收当前视频块的pu的运动矢量之后,运动补偿组件419可以定位运动矢量指向的预测块。然后,通过从正在编码的当前视频块的像素值中减去预测块的像素值,产生像素差值,从而形成残差视频块。通常,运动估计组件421对亮度分量进行运动估计,运动补偿组件419将根据亮度分量计算的运动矢量用于色度分量和亮度分量。将预测块和残差块转发到变换缩放和量化组件413。
分割视频信号401还发送到帧内估计组件415和帧内预测组件417。与运动估计组件421和运动补偿组件419一样,帧内估计组件415和帧内预测组件417可以高度集成,但出于概念的目的单独说明。帧内估计组件415和帧内预测组件417根据当前帧中的块对当前块进行帧内预测,以替代如上所述的由运动估计组件421和运动补偿组件419在帧之间执行的帧间预测。具体地,帧内估计组件415确定用于编码当前块的帧内预测模式。在一些示例中,帧内估计组件415从多个测试的帧内预测模式中选择适当的帧内预测模式对当前块进行编码。然后,将所选择的帧内预测模式转发到标头格式化和cabac组件431进行编码。
例如,帧内估计组件415使用各种测试的帧内预测模式的率失真分析来计算率失真值,并在测试的模式中选择具有最佳率失真特性的帧内预测模式。率失真分析通常确定编码块和为了产生编码块进行编码的原始未编码块之间的失真(或误差)量以及用于产生编码块的码率(例如,比特数)。帧内估计组件415根据各种编码块的失真和速率计算比率,确定哪种帧内预测模式得到块的最佳率失真值。另外,帧内估计组件415可用于根据率失真优化(rate-distortionoptimization,rdo)使用深度建模模式(depthmodelingmode,dmm)对深度图的深度块进行编码。
当在编码器上实现时,帧内预测组件417可根据由帧内估计组件415确定的已选帧内预测模式从预测块中生成残差块,或者当在解码器上实现时,从码流中读取残差块。残差块包括预测块和原始块之间的值差,表示为矩阵。然后,将残差块转发到变换缩放和量化组件413。帧内估计组件415和帧内预测分量417可以对亮度和色度分量执行操作。
变换缩放和量化组件413用于进一步压缩残差块。变换缩放和量化组件413将离散余弦变换(discretecosinetransform,dct)、离散正弦变换(discretesinetransform,dst)等变换或概念上类似的变换应用于残差块,产生包括残差变换系数值的视频块。还可以使用小波变换、整数变换、子带变换或其它类型的变换。变换可将残差信息从像素值域变换到变换域,例如频域。变换缩放和量化组件413还用于根据频率等对变换残差信息进行缩放。这种缩放涉及对残差信息施加缩放因子,以便在不同的粒度上量化不同的频率信息,可能会影响重构视频的最终视觉质量。变换缩放和量化分量413还用于量化变换系数以进一步降低码率。量化过程可以减少与部分或全部系数关联的位深度。可以通过调整量化参数来修改量化程度。在一些示例中,变换缩放和量化组件413随后可对包括量化变换系数的矩阵进行扫描。将量化变换系数转发到标头格式化和cabac组件431,以编码到码流中。
缩放和逆变换组件429进行变换缩放和量化组件413的逆操作以支持运动估计。缩放和逆变换组件429进行反缩放、逆变换和/或反量化来重构像素域中的残差块,例如,后续用作参考块,该参考块可成为另一当前块的预测块。运动估计组件421和/或运动补偿组件419可以通过将残差块与对应预测块相加来计算参考块,以用于对后续块/帧进行运动估计。将滤波器应用于重构参考块,以减少在缩放、量化和变换过程中产生的伪影。当预测后续块时,这些伪影可能导致不准确的预测(并产生其它伪影)。
滤波控制分析组件427和环内滤波器组件425将滤波器应用于残差块和/或重构图像块。例如,缩放和逆变换组件429中的变换残差块可以与帧内预测组件417和/或运动补偿组件419中的对应预测块组合以重构原始图像块。然后,可以将滤波器应用于重构图像块。在一些示例中,可以将滤波器可以应用于残差块。与图4中的其它组件一样,滤波器控制分析组件427和环内滤波器组件425高度集成且可以一起实现,但出于概念的目的单独描述。应用于重构参考块的滤波器应用于特定空间区域,并且包括多个参数以调整如何应用此类滤波器。滤波器控制分析组件427分析重构参考块,以确定应在哪里应用这些滤波器并设置对应的参数。这些数据作为滤波器控制数据转发到标头格式化和cabac组件431进行编码。环内滤波器组件425根据滤波器控制数据应用这些滤波器。滤波器可以包括去块滤波器、噪声抑制滤波器、sao滤波器和自适应环路滤波器。这些滤波器可以根据示例应用于空间/像素域(例如,在重构像素块上)或频域中。
当作为编码器操作时,将滤波后的重构图像块、残差块和/或预测块存储在解码图像缓冲器组件423中,以供以后进行如上所述的运动估计。当作为解码器操作时,解码图像缓冲器组件423存储重构和滤波的块并向显示器转发重构和滤波的块,作为输出视频信号的一部分。解码图像缓冲器组件423可以是能够存储预测块、残差块和/或重构图像块的任何存储器设备。
标头格式化和cabac组件431从编解码系统400的各种组件接收数据并将这些数据编码到编码码流中以便向解码器传输。具体地,标头格式化和cabac组件431生成各种标头以编码控制数据,例如总体控制数据和滤波器控制数据。此外,包括帧内预测和运动数据的预测数据以及量化变换系数数据形式的残差数据均编码到码流中。最终码流包括解码器想要重构原始分割视频信号401的所有信息。此类信息还可以包括帧内预测模式索引表(也称为码字映射表)、各种块的编码上下文的定义、最可能的帧内预测模式的指示、分割信息的指示等。这些数据可以通过熵编码技术进行编码。例如,可以通过使用上下文自适应可变长度编码(contextadaptivevariablelengthcoding,cavlc)、cabac、基于语法的上下文自适应二进制算术编码(syntax-basedcontext-adaptivebinaryarithmeticcoding,sbac)、概率区间分割熵(probabilityintervalpartitioningentropy,pipe)编码或其它熵编码技术来对所述信息进行编码。在熵编码之后,编码码流可以传输到另一设备(例如,视频解码器)或存档以供稍后传输或检索。
本发明包括一些修改,防止vr视频流中的子图像视频信号以特定分辨率编码,然后根据视角相关编码以不同分辨率解码时产生伪影。根据帧内估计组件415和/或帧内预测组件417进行帧内预测和根据运动补偿组件419和/或运动估计组件421进行帧间预测的机制产生这种伪影。因此,本发明改进了编码器和/或解码器中的帧内估计组件415、帧内预测组件417、运动补偿组件419和/或运动估计组件421的功能。减小了文件大小,并且因此提高了编码效率,和/或提高了解码器中的所得解码vr视频流的视觉质量。
图5为可对子图像码流进行编码的示例性视频编码器500的框图。视频编码器500可用于实现编解码系统400的编码功能和/或实现方法300的步骤301、303、305、307和/或309。此外,可以使用编码器500来实现方法200的步骤205至209以及编码器103。编码器500对输入视频信号(例如,子图像视频信号)进行分割,产生和分割视频信号401基本相似的分割视频信号501。然后,通过编码器500的组件将分割视频信号501压缩和编码到码流中。
具体地,将分割视频信号501转发给帧内预测组件517进行帧内预测。帧内预测组件517可与帧内估计组件415和帧内预测组件417基本相似。分割视频信号501还转发到运动补偿组件521,用于根据解码图像缓冲器523中的参考块进行帧间预测。运动补偿组件521可与运动估计组件421和运动补偿组件419基本相似。将帧内预测组件517和运动补偿组件521中的预测块和残差块转发到变换和量化组件513以对残差块进行变换和量化。变换和量化组件513可与变换缩放和量化组件413基本相似。将变换和量化残差块和对应的预测块(以及相关控制数据)转发到熵编码组件531以编码到码流中。熵编码组件531可与标头格式化和cabac组件431基本相似。
变换和量化残差块和/或对应的预测块也从变换和量化组件513转发到逆变换和量化组件529以重构为参考块供运动补偿组件521使用。逆变换和量化组件529可与缩放和逆变换组件429基本相似。根据示例,也将环内滤波器组件525中的环内滤波器应用于残差块和/或重构参考块。环内滤波器组件525可与滤波器控制分析组件427和环内滤波器组件425基本相似。参考环内滤波器组件425,环内滤波器组件525可以包括多个滤波器。然后,将滤波块存储在解码图像缓冲器组件523中,以供运动补偿组件521用作参考块。解码图像缓冲器组件523可与解码图像缓冲器组件423基本相似。
编码器500接收从球形视频信号划分的子图像视频信号,与使用视角相关编码的vr系统一起使用。如上所述,当以不同的分辨率将子图像视频信号传输到解码器时,由于在降低用于较低质量的子图像视频信号的分辨率的过程中数据会丢失,可能会产生伪影。这是因为帧内预测和帧间预测都根据邻块的像素点(像素)对块进行编码。当参考块超过子图像视频信号边界时,由于相邻子图像视频信号中的数据丢失,参考块可能变得不准确。为了解决这些问题,编码器500的运动补偿组件521和帧内预测组件517对每个要自包括的子图像视频信号进行编码。具体地,运动补偿组件521和帧内预测组件517用于在编码时仅参考同一子图像视频信号中的整像素点位置。具体地,在对第一子图像视频信号进行编码时,防止编码器500从其它子图像视频信号中参考整像素点位置。帧内预测模式和帧间预测运动矢量都适用。
如上所述,像素点,也称为像素,是对应位置的值,其中值可以包括亮度/光值和/或一个或多个色度/颜色值。记录设备通过表示采样网格上的整数位置值来拍摄照片(并显示显示器)。采样网格上的整数位置称为整像素点位置,因为像素点值是在整像素点位置表示的。分数像素点位置位于采样网格上的非整数位置。当物体在帧之间的移动距离为非整数时,以及当执行滤波时,可以使用分数像素点位置。可以确定分数像素点位置的值为根据整像素点位置的值确定的加权值(例如,加权平均值)。只有当可以通过仅根据第一子图像码流中的像素点位置(例如,不参考任何其它子图像码流)进行插值而重构参考分数像素点位置的有效像素点值时,运动补偿组件521和帧内预测组件517可以参考第一子图像视频信号中的这些分数像素点位置。
此外,运动补偿组件521可以在进行帧间预测时为第一子图像码流生成运动矢量候选列表。然而,当运动矢量来自另一子图像码流中的块时,运动补偿组件521可以不在候选列表中包括运动矢量。这些限制条件确保可以在不参考相邻子图像码流情况下对每个子图像码流进行解码,因此避免了分辨率不匹配情况。
此外,视频编码可以使用并行化(例如wpp)来加速视频编码过程。只要当前块上方的块和当前块上方和右侧的块已经解码,wpp有助于对当前块(例如,ctu)进行编码。wpp可能会产生波,顶行的块编码在第二行的块之前的两个块,第二行的两个块是第三行之前的两个块,等等。在编码器中,子图像码流帧可以视为编码区块,并可合并所述编码区块以重构球形视频信号。存在编码区块时wpp无法操作,因为wpp立刻在整个帧(例如,球形视频信号中的帧)上操作,而不是以编码区块来操作。相应地,编码器500可以在对子图像码流进行编码时禁用wpp。例如,wpp使用entropy_coding_sync_enabled_flag。所述标志包括在每个图像的pps语法中。编码器500可以将entropy_coding_sync_enabled_flag设置为0以禁用子图像视频信号的wpp。
此外,编码器500可以通过在轨迹中对子图像视频信号进行编码并确保轨迹具有相同的呈现时间来避免子图像码流之间的时序不匹配问题。此外,编码器500可以确保公共vr图像(例如,球形视频信号中的帧)中的每个像素点使用相同的图像顺序编号值,即使这些像素点被划分成不同的子图像码流和/或携带在不同轨迹中。
图6为可对子图像码流进行解码的示例性视频解码器600的框图。视频解码器600可用于实现编解码系统400的解码功能和/或实现操作方法300的步骤311、313、315和/或317。此外,可以使用解码器600来实现方法200的步骤211至213以及解码器107。例如,解码器600从编码器500接收多个子图像码流,生成包括子图像视频信号的重构输出视频信号,将子图像视频信号合并成球形视频信号,并转发用于通过呈现设备向用户显示的球形视频信号。
码流由熵解码组件633接收。熵解码组件633用于实现熵解码方案,例如cavlc、cabac、sbac、pipe编码或其它熵编码技术。例如,熵解码组件633可以使用标头信息来提供上下文以解译在码流中编码为码字的其它数据。解码信息包括解码视频信号所需的任何信息,例如通用控制数据、滤波控制数据、分割信息、运动数据、预测数据和残差块的量化变换系数。将量化变换系数转发到逆变换和量化组件629以重构为残差块。逆变换和量化组件629可与逆变换和量化组件529基本相似。
将重构残差块和/或预测块转发到帧内预测组件617以根据帧内预测操作重构为图像块。帧内预测组件617可与帧内估计组件415和帧内预测组件417相似。具体地,帧内预测组件617使用预测模式来定位帧中的参考块,并将残差块应用于结果以重构帧内预测图像块。重构帧内预测图像块和/或残差块以及对应的帧间预测数据通过环内滤波器组件625转发到解码图像缓冲器组件623,解码图像缓冲器组件623和环内滤波器组件625可以分别与解码图片缓冲器组件423和环内滤波器组件425基本相似。环内滤波器组件625对重构图像块、残差块和/或预测块进行滤波,并且此类信息存储在解码图像缓冲器组件623中。将解码图像缓冲器组件623中的重构图像块转发到运动补偿组件621进行帧间预测。运动补偿组件621可与运动估计组件421和/或运动补偿组件419基本相似。具体地,运动补偿组件621使用参考块中的运动矢量来生成预测块,并将残差块应用于结果中以重构图像块。所得重构块还可以通过环内滤波器组件625转发到解码图像缓冲器组件623。解码图像缓冲器组件623继续存储其它重构图像块,这些图像块可以通过分割信息重构成帧。这些帧也可以按顺序放置。所述顺序作为重构输出视频信号向显示屏输出。
如上所述,解码器600对子图像码流进行解码以创建子图像视频信号。然后,解码器600可以使用轻量级合并算法将子图像视频信号合并成球形视频信号以供显示。轻量级合并算法包括从在公共呈现时间产生的并且因此是同一球形帧的一部分的每个子图像视频信号中选择子图像。然后,通过根据对应子图像视频信号关联的位置定位每个子图像来合并子图像。合并算法可以是轻量级算法,因为该方法可能不需要解码器600考虑子图像视频信号之间的相关性。相反,可以相对独立地对每个子图像视频信号进行解码,并且可以合并结果(例如,在子图像边界进行一系列滤波)。这种轻量级合并算法使用的处理资源比解码期间考虑子图像码流相关性使用的处理资源更少。此外,可以在向用户显示期间实时执行轻量级合并算法,而不是在显示之前的预处理中执行这种合并。因此,轻量级合并算法可以使视角相关编码成为可能,因为视角相关编码是在向用户显示期间实时执行。此外,由于如上所述在编码器500中使用的编码约束条件,可以在没有伪影的情况下执行轻量级合并算法。具体地,可以执行轻量级合并算法,因为每个子图像码流都是以自包括且不依赖于其它子图像码流的方式进行编码的。
前述附图描述对用于vr系统的子图像视频信号进行编码和解码的各种组件和方法。图7说明了从球形帧映射的子图像帧的示例性空间定位。图8至图11描述了进行运动矢量使用和候选列表生成等帧间预测使用的机制。这些附图说明图7中所述的当运动矢量超过子图像视频信号边界时可能产生的问题,以及说明可用于解决这些问题的约束条件。
图7为从vr图像视频流700中划分的多个子图像视频信号701和703的示意图。vr图像视频流700可以通过编码器103和/或vr编码设备104映射到子图像视频信号701和703。子图像视频信号701和703可以通过解码器107合并回vr图像视频流700中。因此,vr图像视频流700以及子图像视频信号701和703示出了方法200的步骤205和步骤213。例如,子图像视频信号701和703可以通过以下组件通过帧间预测进行编码和解码:运动估计组件421、运动补偿组件419、运动补偿组件521和/或运动补偿组件621。例如,子图像视频信号701和703还可以以下组件通过帧内预测进行编码和解码:帧内估计组件415、帧内预测组件417、帧内预测组件517和/或帧内预测组件617。因此,子图像视频信号701和703可以各自根据方法300进行编码和解码。
vr图像视频流700包括随时间呈现的多个帧。vr图像视频流700的帧可以各自细分为子帧,也称为子图像。因此,每个帧和对应的子图像包括时间位置(例如,图像顺序)作为时间表示的一部分。生成子图像视频信号701和703过程中,细分伴随着时间流式增长。这种一致细分产生子图像视频信号701和703,其中每个流包括相对于vr图像视频流700中的对应帧具有预定大小、形状和空间位置的子图像集。此外,子图像视频信号701和/或703中的子图像集的时间位置在呈现时间内发生变化。这样,子图像视频信号701和703的子图像可以根据时间位置在时域上对齐。然后,可以根据预定义的空间位置在空域中合并每个时间位置的子图像视频信号701和703中的子图像,以重构vr图像视频流700进行显示。
如本文所使用,子图像视频信号701可以称为第一子图像视频信号(和/或如果在编码上下文中,称为第一子图像码流)。呈现子图像视频信号703以说明与第一子图像视频信号701相邻的相邻子图像视频信号(和/或相邻子图像码流)。因此,为了讨论本文所公开的各种实施例,对子图像视频信号701和703进行区分,否则它们基本上相似。
图8为在块压缩步骤305、块解码步骤313、运动估计组件421、运动补偿组件419、运动补偿组件521和/或运动补偿组件621中执行以确定运动矢量(motionvector,mv)的单向帧间预测800的示例的示意图。例如,单向帧间预测800可用于确定子图像视频信号701和/或703中的子图像的块的运动矢量,因此在分别执行方法200的步骤207和211时可由编码器103和解码器107使用。
单向帧间预测800使用具有参考块831的参考帧830来预测当前帧810中的当前块811。如图所示,参考帧830可以在时间上定位在当前帧810之后(例如,作为后续参考帧),但在一些示例中,也可以在时间上定位在当前帧810之前(例如,作为之前参考帧)。当前帧810是在特定时间进行编码/解码的示例帧/图像。当前帧810包括当前块811中与参考帧830的参考块831中的对象匹配的对象。参考帧830是用作用于对当前帧810进行编码的参考的帧,参考块831是参考帧830中包括当前帧810的当前块811中也包括的对象的块。
当前块811是编码过程中在指定点进行编码/解码的任何编码单元。当前块811可以是整个分割块,也可以是仿射帧间预测情况下的子块。当前帧810与参考帧830之间间隔一定时间距离(timedistance,td)833。td833指示视频序列中当前帧810与参考帧830之间的时间量,并且可以以帧为单位进行测量。当前块811的预测信息可以通过指示各帧之间的方向和时间距离的参考索引来参考所述参考帧830和/或参考块831。在td833表示的时间段内,当前块811中的对象从当前帧810中的一个位置移动到参考帧830中的另一位置(例如,参考块831的位置)。例如,对象可以沿着运动轨迹813移动,该运动轨迹813是对象随时间移动的方向。运动矢量835描述对象在td833内沿着运动轨迹813移动的方向和幅度。因此,经编码的运动矢量835和参考块831提供足以重构当前块811并将当前块811定位在当前帧810中的信息。
图9为在块压缩步骤305、块解码步骤313、运动估计组件421、运动补偿组件419、运动补偿组件521和/或运动补偿组件621中执行以确定运动矢量(motionvector,mv)的单向帧间预测900的示例的示意图。例如,单向帧间预测800可用于确定子图像视频信号701和/或703中的子图像的块的运动矢量,因此在分别执行方法200的步骤207和211时可由编码器103和解码器107使用。应注意,编码器可以根据哪种方法为指定块提供最佳编码效率和/或重构质量,选择根据双向帧间预测900或单向帧间预测800(例如,作为rdo的一部分)对块进行编码。
双向帧间预测900与单向帧间预测800相似,但使用一对参考帧来预测当前帧910中的当前块911。因此,当前帧910和当前块911分别与当前帧810和当前块811基本相似。当前帧910在时间上位于在视频序列中当前帧910之前出现的之前参考帧920与在视频序列中当前帧910之后出现的后续参考帧930之间。之前参考帧920和后续参考帧930在其它方面与参考帧830基本相似。
当前块911与之前参考帧920中的之前参考块921以及后续参考帧930中的后续参考块931匹配。这种匹配指示,在视频序列的过程中,对象沿着运动轨迹913并经由当前块911从之前参考块921的位置移动到后续参考块931的位置。当前帧910与之前参考帧920间隔一定之前时间距离(td0)923,并与后续参考帧930间隔一定后续时间距离(td1)933。td0923以帧为单位指示视频序列中之前参考帧920与当前帧910之间的时间量。td1933以帧为单位指示视频序列中当前帧910与后续参考帧930之间的时间量。因此,对象在td0923指示的时间段内沿着运动轨迹913从之前参考块921移动到当前块911。对象还在td1933指示的时间段内沿着运动轨迹913从当前块911移动到后续参考块931。当前块911的预测信息可以通过一对指示各帧之间的方向和时间距离的参考索引来参考之前参考帧920和/或之前参考块921以及后续参考帧930和/或后续参考块931。
之前运动矢量(mv0)925描述对象在td0923内沿着运动轨迹913(例如,在之前参考帧920与当前帧910之间)移动的方向和幅度。后续运动矢量(mv1)935描述对象在td1933内沿着运动轨迹913(例如,在当前帧910与后续参考帧930之间)移动的方向和幅度。因此,在双向帧间预测900中,可以通过使用之前参考块921和/或后续参考块931、mv0925和mv1935来编码和重构当前块911。
如上所述,可以根据单向帧间预测800和/或双向帧间预测900对子图像视频信号701和/或703中的子图像中的块进行编码。例如,对象可以随着时间在子图像视频信号701和相邻的子图像视频信号703之间移动。在这种情况下,帧间预测可以将子图像视频信号701中的当前块中的像素点(例如,像素)与相邻子图像视频信号703中的参考块中的像素点匹配。然后,可以将当前块编码为参考相邻子图像视频信号703中的像素点的运动矢量。只要以相同的分辨率对子图像视频信号701和子图像视频信号703进行解码,该方法就能够正常工作。然而,在视角相关编码中,可以通过去除数据以进一步压缩子图像视频信号703中的子图像的有损过程来降低子图像视频信号703的分辨率。相应地,包括参考像素点的参考块可以被改变或甚至从子图像视频信号703中的子图像中移除。在这种情况下,经编码的运动矢量仍然可以指向正确的参考块,但是参考块中包括的像素点对于子图像视频信号701所使用的分辨率可能不再准确。此外,在某些情况下,甚至可以完全省略子图像视频信号703,这将导致运动矢量参考空数据。在上述任一情况下,从子图像视频信号701解码的当前块在可用时被低质量像素点所代替,或者甚至以取决于实现解码器的未定义的错误方式表示。应注意,虽然该问题是从帧间预测的角度来讨论的,但在帧内预测中也可能发生同样的错误。唯一的区别是,在帧内预测情况下,参考像素点与当前块在相同的时间位置上产生,在帧间预测情况下,参考像素点与当前块在不同的时间位置上产生。
为了避免这些问题,本文公开的编码器可以在对每个子图像视频信号(例如,包括子图像视频信号701和703)进行编码时受到约束。例如,第一子图像视频信号701中的块可以仅通过运动矢量或帧内预测模式参考同一第一子图像视频信号701中的整像素点位置进行编码,因此不能参考其它(例如相邻)子图像视频信号703中的像素点位置。此外,只有当仅根据同一第一子图像视频信号701的像素点位置进行插值来重构分数像素点位置中的像素点(例如,并且不以任何方式依赖于相邻子图像视频信号703中的数据)时,可以编码第一子图像视频信号701中的块参考子图像视频信号701中的分数像素点/像素位置。通过这种方式,可以独立对每个子图像视频信号701/703中的像素点进行编解码,相邻子图像视频信号703的分辨率变化不影响第一子图像视频信号701,反之亦然。
图10为基于块的视频编码机制1000的示例的示意图。例如,机制1000可用于帧内预测、单向帧间预测800和/或双向帧间预测900。因此,基于块的视频编码机制1000可用于在块压缩步骤305、块解码步骤313、帧内估计组件415、帧内预测组件417、运动估计组件421、运动补偿组件419、帧内预测组件517、运动补偿组件521、帧内预测组件617和/或运动补偿组件621中确定帧内预测模式或运动矢量。例如,对子图像视频信号701和/或703中的子图像的块进行编码时可以使用机制1000,因此在分别执行方法200的步骤207和211时该机制可由编码器103和解码器107使用。
机制1000根据同一帧中的之前编码块1002对当前块1001进行编码。在帧内预测情况下,当前块1001与编码块1002中的像素点匹配。然后,可以通过指示编码块1002中的像素点并预测当前块1001中的像素点的帧内预测模式,对当前块1001进行编码。如果当前块1001位于第一子图像视频信号701中,而编码块1002位于相邻的子图像视频信号703中,则视角相关编码可能由于分辨率差异而产生编码误差。因此,可以限制本文描述的编码器使用第一子图像视频信号701中的帧内预测模式,该帧内预测模式依赖于相邻子图像视频信号703中的像素点。
机制1000也可以用于某些类型的帧间预测。具体地,帧间预测可以使用各种模式,例如合并模式和amvp模式。在这两种模式中,可以根据编码块1002中的运动矢量来选择当前块1001的运动矢量。在合并模式下,从编码块1002中选择的运动矢量可以包括在候选列表中。候选列表还可以包括指示无移动的运动矢量、之前帧和/或后续帧中时间上相邻块的运动矢量、重复用于之前编码块的运动矢量等。然后从候选列表中选择当前块1001的运动矢量。然后,可以将当前块1001的运动矢量指示为候选列表索引。使得当前块1001可以通过一个索引值进行编码。解码器可以使用与编码器相同的过程生成当前块1001的候选列表,然后可以根据候选列表索引确定当前块1001的运动矢量。amvp模式与合并模式相似,但是当候选列表中的运动矢量均不表示当前块1001的正确运动矢量时,可以使用amvp模式。在这种情况下,amvp模式可以从候选列表中选择与当前块1001的正确运动矢量最匹配的运动矢量。然后,amvp模式编码所选候选运动矢量的候选列表索引以及所选候选运动矢量与当前块的正确运动矢量之间的差值。
当当前块1001位于第一子图像视频信号701中并且编码块1002位于相邻子图像视频信号703中时,合并模式和amvp模式都可能导致视角相关编码产生误差。例如,当相邻子图像视频信号703的分辨率降低时,相邻子图像视频信号703中编码块1002的运动矢量可能会发生变化。将在解码器中为当前块1001生成候选列表,该候选列表参考由于分辨率变化而改变的运动矢量。然而,编码器中生成的候选列表是在当前块1001和编码块1002使用相同的分辨率时生成的。因此,在这种情况下,候选列表不再匹配。当候选列表不匹配时,索引可以在解码器中指向错误的候选运动矢量。可以使解码器为当前块1001选择错误的参考块,并且因此显示当前块1001的错误像素点值。
为了解决这些问题,可以限制本文公开的编码器,使得第一子图像视频信号701中的当前块1001的候选运动矢量列表不包括相邻子图像码流703中的编码块1002的运动矢量。例如,在生成候选列表期间,其它相邻子图像码流703的此类运动矢量不会添加到候选列表中,因此在进行帧间预测时不能通过amvp模式或合并模式进行选择。该限制与防止参考其它子图像码流703中的像素点的限制确保了每个子图像码流701可以不参考相邻子图像码流703而进行解码,因此避免了分辨率不匹配情况。
图11为传输视频编码的示例性isobmff1100的示意图。例如,由编码器103、编解码系统400和/或编码器500生成的视频编码可以存储在isobmff1100中,以便由解码器107、编解码系统400和/或解码器600进行解码。因此,在方法200和300中,可以使用isobmff1100存储和发送数据。此外,可以将应用于子图像视频信号701和/或703中的子图像的单向帧间预测800和/或双向帧间预测900以及机制1000的结果存储在isobmff1100中。
isobmff1100包括一系列可包括其它盒子的盒子。盒子是由唯一类型标识符和长度定义的面向对象的构建块。盒子是isobmff1100中的基本语法结构,可以包括四个字符编码的盒子类型、盒子的字节数和有效载荷。例如,盒子可以是包括编码盒子类型、盒子的字节数和有效载荷的语法结构。在一些情况下,盒子可以包括符合高效率视频编码(highefficiencyvideocoding,hevc)文件格式的文件中的所有数据,并且文件中可以不包括不在盒子中的数据。因此,isobmff文件可以包括一系列盒子,而盒子可以包括其它盒子。例如,盒子的有效载荷可以包括一个或多个其它盒子。
编码码流中的数据,包括语法和编码媒体像素点,可以存储在isobmff1100中的预定盒子中。有利于解码器通过打开对应的盒子来查找相关数据。在顶层,isobmff1100包括文件类型(ftyp)盒子1101、电影(moov)盒子1103、电影片段(moof)盒子1105和媒体数据(mdat)盒子1107。moov盒子1103包括多个轨迹(trak)盒子1113。moof盒子1105包括一个或多个轨迹片段(traf)盒子1115。mdat盒子1107包括一个或多个媒体像素点1117。上述盒子可以包括其它子盒子。应注意,isobmff1100包括大量可用的盒子。相应地,图11中所示的盒子是示例性的,并且包括这些盒子来说明一些示例。本文公开的示例也可以使用其它isobmff1100盒子和/或配置。
ftyp盒子1101包括用于编码的文件兼容性信息。通常,ftyp盒子1101和任何子盒子包括指示能够显示所包括的视频数据的解码设备的数据。
moov盒子1103包括与编码相关的功能数据。例如,moov盒子1103可包括用于该文件的数字版权管理(digitalrightmanagement,drm)数据。moov盒子1103还可以包括指示应如何呈现视频的整体数据。例如,moov盒子1103包括多个轨迹盒子1113。每个trak盒子1113包括描述对应轨迹的数据。例如,轨迹可以包括视频的字幕、音轨以及各种表示。例如,以多个分辨率编码的视频可以包括用于每个分辨率的trak盒子1113。相应地,trak盒子1113可以包括向解码器指示应如何播放和/或显示对应轨迹的数据。此外,编码器和/或关联的存储设备可以仅向解码器发送相关轨迹。例如,解码器可以请求某些轨迹而不是其它轨迹,有利于解码器仅接收特定分辨率。有利于解码器根据客户端设备和/或网络的能力(例如根据用户呈现设备能力、可用网络带宽等)确定并获取适当的分辨率。在vr上下文中,不同的子图像码流可以存储在不同的轨迹中。在这种情况下,moov盒子1103可以包括每个表示(例如,分辨率)的每个子图像码流的trak盒子1113。
每个轨迹可以划分成多个媒体片段1118,也称为轨迹片段。媒体片段1118是预定时长的媒体序列,例如三秒的视频片段。将轨迹编码为一系列媒体片段1118有利于解码器根据用户输入和/或变化的网络需求,从不同的表示中获取数据。在基于vr的视角相关编码中,媒体片段1118有利于解码器根据用户转动vr呈现设备的视角的方向来获取不同分辨率的vr视频的不同空间部分。描述媒体片段1118的信息存储在moof盒子1105和对应的traf盒子1115中。例如,moof盒子1105可包括指示媒体片段1118的起始点和终止点以及媒体片段1118在存储器中的位置的数据。traf盒子1115可包括与媒体片段1118相关的时序数据。例如,traf盒子1115可包括媒体片段1118中每一帧的图像顺序编号1116。图像顺序编号1116指示帧在媒体片段1118中的顺序,因此解码器可以使用该图像顺序编号1116将媒体片段1118中的帧定位成合适的顺序进行显示。traf盒子1115还可以包括媒体呈现时间数据1119。媒体呈现时间数据1119指示媒体片段1118应该根据图像顺序编号1116、帧率等显示的时间长度。
mdat盒子1107是用于由traf盒子1115参考的媒体像素点1117的容器。因此,媒体像素点1117根据时间、类型(音频、字幕、视频等)、表示(例如,分辨率)以及在视角相关编码空间位置的情况下被组织成轨迹片段。因此,媒体像素点1117包括以各种分辨率从子图像视频信号701和703编码的子图像码流。这些媒体像素点1117可以转发到解码器以根据用户设备(例如,解码器)请求进行呈现和显示。
视角相关编码中可能存在误差的另一原因是呈现时间数据1119和/或图像顺序编号1116可以根据分辨率发生变化。由于该数据是针对子图像视频信号的,因此这种分辨率相关的变化可能导致vr视频的空间部分乱序显示。例如,球形视频帧的不同子图像部分可以以不同的速率显示,使用户在观看vr视频的部分与同一vr帧中vr视频的其它部分的顺序不一致。
为了解决这种时序不匹配问题,可以限制本文中的编码器以确保包括在媒体像素点1117中并由traf盒子1115和trak盒子1113描述的每个轨迹无论分辨率如何都具有相同的呈现时间1119。此外,限制每个轨迹的媒体像素点1117包括相同数量个媒体像素点1117(例如,相同数量的总帧)。此外,同一vr帧关联的每个轨迹片段的媒体像素点1117可以使用相同的图像顺序编号1116值。即使当这样的子图像划分成不同的子图像码流和/或携带在不同轨迹中时,也可以保持这种状态。当这些约束条件被强制执行时,不管分辨率如何,子图像都以相同的顺序和速率显示。因此,不同分辨率可以混合到一个球形视频信号中,而不会产生时序误差。
此外,如上所述,wpp可以通过改变解码顺序来改变块的解码方式。应用于从多个轨迹组合成基于vr的球形视频信号的一个帧的多个子图像时可能产生误差。本文公开的编码器可以通过改变每个子图像的pps中的数据来禁用wpp。例如,可以将每个pps中的entropy_coding_sync_enabled_flag设置为0,为子图像视频信号禁用wpp。在一些示例中,通过将pps包括在媒体像素点1117中,以带内方式存储pps数据。在其它示例中,pps数据可以存储在moof1105、traf盒子1115等中。
图12为编码子图像视频信号(例如,从球形视频信号划分的用作通过视角显示的vr视频的子图像视频信号701和703)的示例性方法1200的流程图。方法1200可以在isobmff1100中对这些子图像视频信号进行编码。方法1200可由编码器(例如编码器103、编解码系统400和/或编码器500)用于通过解码器(例如解码器107、编解码系统400和/或解码器600)中进行的视角相关编码来对子图像视频信号进行编码。此外,为了支持方法200和300,可以使用方法1200来实现视角相关编码。此外,方法1200可在视角相关编码中使用单向帧间预测800、双向帧间预测900和/或机制1000,不会因为子图像视频信号边界产生视觉伪影。
在步骤1201中,接收球形视频信号。球形视频信号可以从从摄像机阵列(例如多方向摄像机101)获取的多方向视频流拼接在一起。
在步骤1203中,球形视频信号映射到多个子图像视频信号,例如子图像视频信号701和703。每个子图像视频信号包括球形视频信号的子图像序列。例如,每个子图像视频信号可以包括球形视频信号的每个帧的指定空间部分,并且因此可以包括在视频流的长度上(例如,在时域上)球形视频信号的恒定空间部分。应注意,将球形视频信号映射到多个子图像视频信号中可以包括在空间域中为每个子图像视频信号设置宽度和高度。在一些示例中,对宽度的设置进行约束,使得宽度为64个像素的整数倍并且宽度大于或等于256个像素。此外,在一些示例中,对高度的设置进行约束,使得高度是64个像素的整数倍并且高度大于或等于256个像素。
在步骤1205至1213中,根据若干约束条件将多个子图像视频信号编码为多个子图像码流。在步骤1205中,可以将多个子图像视频信号编码为多个子图像码流。可以进行所述编码操作,使得在解码器中解码时,每个子图像中每个像素点的值与解码后的由所述子图像组成的整个图像中对应的像素点的值相等。例如,所述编码操作可以通过步骤1207至1213来完成。此外,作为编码过程的一部分,可以选择性地禁用wpp。禁用wpp的示例性机制包括将entropy_coding_sync_enabled_flag设置为0。entropy_coding_sync_enabled_flag包括在用于球形视频信号的pps中和/或用于子图像码流的pps中。
在步骤1207中,至少部分地通过帧间预测对多个子图像视频信号进行编码。在对每个子图像视频信号的每个当前子图像进行帧间预测时,选择运动矢量。然而,约束这种选择包括仅选择参考与当前子图像相同的子图像视频信号中像素点的运动矢量。因此,所选运动矢量不参考与当前子图像相同的子图像视频信号中不包括的子图像中的像素点。
在步骤1209中,还限制选择参考与当前子图像相同的子图像视频信号中的像素点的运动矢量包括选择参考相同子图像视频信号中的整像素点位置的运动矢量。可以选择参考与当前子图像相同的子图像视频信号中的分数像素点位置的运动矢量。然而,限制这种选择为仅选择可通过仅使用相同子图像视频信号中的整像素点位置进行插值而重构的分数像素点位置。
在步骤1211中,通过帧间预测对多个子图像视频信号进行编码受到进一步限制。具体地,可以为使用帧间预测的每个当前帧子图像选择运动矢量。然而,当使用候选运动矢量列表时,仅将与当前子图像相同的子图像视频信号中的块的候选运动矢量添加到候选列表中。因此,其它子图像视频信号中的块的运动矢量不会被添加到候选列表中,也不会被选择用于当前子图像。
在步骤1213中,例如,在isobmff中,通过对子图像视频信号进行编码而创建的子图像码流进一步组成多个子图像轨迹。当使用视角相关编码时,进一步限制子图像轨迹以防止时序不匹配。具体地,可以限制子图像轨迹,每个轨迹包括相同数量个媒体像素点。可以通过确保即使子图像视频信号包括在不同的子图像轨迹中,无论分辨率如何,所有子图像视频信号具有相同数量个子图像达到上述目的。此外,限制所有轨迹都包括公共呈现时间。可以通过无论分辨率如何,确保所有轨迹具有相同的帧率、相同的帧数和/或所有轨迹在相同的持续时间内播放达到上述目的。可以限制子图像轨迹使用一致的图像顺序编号值。具体地,可以为每个子图像视频信号中的每个子图像分配一个图像顺序编号值。此外,无论分辨率如何,可以为球形视频信号中的相同帧关联的子图像分配相同的图像顺序编号值。确保了媒体像素点在所有子图像轨迹上具有普通图像顺序编号值。由于通过步骤1205至1213避免了与帧间预测相关的各种时序不匹配和基于子图像视频信号的交叉误差,可以在子图像轨迹中包括指示,以指示子图像轨迹符合特定视频配置文件,例如omaf视频配置文件。
在步骤1215中,向解码器发送子图像轨迹集合,以支持解码和通过虚拟现实视角显示为视角相关虚拟现实视频流。如上所述,可以针对不同分辨率的球形视频信号的不同空间部分选择和传输子图像轨迹,甚至可以省略一些空间部分。有利于vr视频流/信号在用户视角中和周围的空间部分能够以高分辨率传输,同时省略和/或以较低分辨率传输用户视角外的空间部分(不太可能被观看)。这种方法导致在视频流上下文中发送给用户的文件大小显着减小。此外,上文采用的约束条件确保每个子图像视频信号/码流以自包括方式进行编码,并且无论子图像视频信号之间的分辨率差如何,都可以在没有伪影的情况下进行解码。
应注意,视角相关编码可以根据运动图像专家组(motionpictureexpertsgroup,mpeg)控制的全向媒体格式(omnidirectionalmediaformat,omaf)实现。方法1200可以通过将以下内容包括在omaf相关标准文档中来实现。
当未变换的像素点入口类型为“hvc2”时,轨迹应包括一个或多个“scal”参考轨迹。参考的轨迹应符合基于hevc的视角无关omaf视频配置文件或基于hevc的视角相关omaf视频配置文件,并且对于参考的轨迹中承载的每个子图像码流,适用以下约束条件。(1)帧间预测不应参考图像外的像素点值。(2)对于位于图像右下角右侧图像边界之外的最后一个预测单元,当cupredmode[xpb][ypb]等于mode_inter时,采用如下方式,其中(xpb,ypb)指定对应亮度预测块的左上角像素点相对于当前图像左上角像素点的关系。候选空间合并数numspatialmergecand的推导方式如下:
numspatialmergecand=availableflaga0+availableflaga1+availableflagb0+availableflagb1+availableflagb2
当availableflaga0、availableflaga1、availableflagb0、availableflagb1和availableflagb2是iso/iec23008-2第8.5.3.2.3条中规定的候选空间合并的推导过程的输出时,下文适用。如果numspatialmergecand等于0,则merge_flag[xpb][ypb]应等于0。否则(numspatialmergecand大于0),merge_idx[xpb][ypb]应在0到numspatialmergecand-1的范围内,包括0和numspatialmergecand-1。候选空间运动矢量预测值数numspatialmvpcand的推导方式如下:
其中availableflaglxa、availableflaglxb、mvlxa和mvlxb是从iso/iec23008-2第8.5.3.2.7条中规定的相邻预测单元的候选运动矢量预测值推导过程的输出,下文适用。如果numspatialmvpcand等于0,则mvp_10_flag[xpb][ypb]和mvp_l1_flag[xpb][ypb]应等于1。否则(numspatialmvpcand大于0),mvp_10_flag[xpb][ypb]和mvp_l1_flag[xpb][ypb]应在0到numspatialmvpcand-1的范围内,包括0和numspatialmvpcand-1。
注:第一约束条件限制了运动矢量指向图像中的整像素点位置和仅需要所述图像中的整像素点位置进行插值的分数像素点位置。应注意,在上述约束条件和前一句中,子图像变成了一个子图像码流的上下文中的图像。第二约束条件限制了当将参考的轨迹的子图像码流与其它参考轨迹上承载的其它子图像码流一起重构成一个符合条件的码流时,对整个重构码流进行解码。对于该子图像码流的子图像的块,不具有用于从“子图像”外的块推导出的时间运动矢量预测的候选运动矢量。(3)主pps中的entropy_coding_sync_enabled_flag的值应等于0。
此外,对于参考的轨迹,这些约束条件也适用。(1)轨迹应包括相同数量个媒体像素点。(2)轨迹上具有相同像素点数的像素点的呈现时间应相同。(3)轨迹上具有相同像素点值的像素点中携带的图像的图像顺序编号值应相同,例如picordercntval。在一些示例中,以下约束条件也适用。(4)每个子图像的宽度和高度必须是64的整数倍,宽度不小于256,高度不小于64。
图13为示例性视频编码设备1300的示意图。视频编码设备1300适用于实现本文所述的所公开示例/实施例。视频编码设备1300包括下行端口1320、上行端口1350和/或收发器单元(tx/rx)1310,收发器单元包括发送器和/或接收器,用于通过网络上行和/或下行进行数据通信。视频编码设备1300还包括处理器1330和用于存储数据的存储器1332,处理器1130包括逻辑单元和/或处理数据的中央处理单元(centralprocessingunit,cpu)。视频编码设备1300还可包括光电(optical-to-electrical,oe)组件、电光(electrical-to-optical,eo)组件、与上行端口1350和/或下行端口1320耦合用于通过光或无线通信网络进行数据通信的无线通信组件。视频编码设备1300还可以包括用于向用户和从用户发送数据的输入和/或输出(input/output,i/o)设备1360。i/o设备1360可以包括输出设备,例如用于显示视频数据的显示器、用于输出音频数据的扬声器。i/o设备1360还可以包括键盘、鼠标、轨迹球等输入设备,和/或用于与此类输出设备交互的对应接口。
处理器1330由硬件和软件实现。处理器1330可以实现为一个或多个cpu芯片、核心(例如,作为多核处理器)、现场可编程门阵列(field-programmablegatearray,fpga)、专用集成电路(applicationspecificintegratedcircuit,asic)和数字信号处理器(digitalsignalprocessor,dsp)。处理器1330与下行端口1320、tx/rx1310、上行端口1350和存储器1332进行通信。处理器1330包括编码模块1314。编码模块1314实现上述公开的实施例,例如方法200、300、1200和/或其组合。例如,编码模块1314可以实现编码器103、编解码系统400和/或编码器500等编码器,以便通过视角相关编码对子图像视频信号701和703等子图像视频信号进行编码。作为另一示例,编码模块1314可以实现用于对子图像视频信号进行解码的解码器,例如解码器107、编解码系统400和/或解码器600。编码模块1314可以在isobmff1100中对这些子图像视频信号进行编码/解码。此外,编码模块1314可在视角相关编码中使用单向帧间预测800、双向帧间预测900和/或机制1000,不会因为子图像视频信号边界产生视觉伪影。
具体地,编码模块1314可以根据约束条件对子图像视频信号进行编码和/或解码,以防止视觉伪影。例如,编码模块1314可以对子图像视频信号进行编码,使得块仅参考同一子图像视频信号中的整像素点位置,并且因此不能参考其它子图像视频信号中的像素点位置。只有当可以通过仅根据同一子图像码流中的分数像素点位置进行插值来重新创建分数像素点位置中的像素点时,编码模块1314可以使用子图像视频信号中的分数像素点位置对块进行编码。此外,编码模块1314可以确保相邻子图像码流中的块的运动矢量不包括在候选运动矢量列表中。编码模块1314可以应用这些限制条件来确保可以在不参考相邻子图像码流情况下对每个子图像码流进行解码,因此避免了分辨率不匹配情况。例如,编码模块1314还可以通过将每个pps中的entropy_coding_sync_enabled_flag设置为0来停止wpp。此外,编码模块1314可以通过确保包括子图像视频信号的轨迹的呈现时间相同,确保轨迹具有相同数量个媒体像素点(例如,帧),确保公共vr图像中的每个像素点的图像顺序编号值相等的方式,防止子图像码流间的时序不匹配。因此,编码模块1314使得视频编码设备1300以更高的编码效率和/或通过使用视角相关编码而使用更少的网络资源来操作,而不产生视觉伪影和/或降低通过呈现设备向用户显示的vr视频流的视觉质量。因此,编码模块1314改进了视频编码设备1300的功能并解决了针对视频编码技术的问题。此外,编码模块1314将视频编码设备1300变换到不同的状态。或者,编码模块1314可以实现为存储在存储器1332中并由处理器1330执行的指令(例如,存储在非瞬时性介质上的计算机程序产品)。
存储器1332包括一个或多个存储器类型,例如磁盘、磁带驱动器、固态驱动器、只读存储器(readonlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、快闪存储器、三态内容寻址存储器(temarycontent-addressablememory,tcam)、静态随机存取存储器(staticrandom-accessmemory,sram)等。存储器1332可用作溢出数据存储设备,以在选择执行程序时存储程序,以及存储程序执行时读取的指令和数据。
图14为可对子图像码流进行编码的示例性视频编码设备1400的示意图。视频编码模块1400实现上述公开的实施例,例如编码模块1314、方法200、300、1200和/或其组合。例如,视频编码设备1400的编码模块1314可以实现编码器103、编解码系统400和/或编码器500等编码器,以便通过视角相关编码对子图像视频信号701和703等子图像视频信号进行编码。视频编码设备1400可以在isobmff1100中对这些子图像视频信号进行编码。此外,视频编码设备1400可在视角相关编码中使用单向帧间预测800、双向帧间预测900和/或机制1000,不会因为子图像视频信号边界产生视觉伪影。
视频编码设备1400包括视频信号接收模块1401,用于接收由多方向视频信号拼接的球形视频信号。视频编码设备1400还包括映射模块1403,用于将所述球形视频信号映射到多个子图像视频信号中,每个子图像视频信号包括子图像序列。视频编码设备1400还包括编码模块1405,用于将所述多个子图像视频信号编码为多个子图像码流,使得在解码器中解码时,每个子图像中每个像素点的值与解码后的由所述子图像组成的整个图像中对应的像素点的值相等。视频编码设备1400还包括
组成模块1406,用于将所述多个子图像码流组成多个子图像轨迹,并指示所述子图像轨迹符合特定视频配置文件。视频编码设备1400还包括发送模块1407,用于向解码器发送所述多个子图像轨迹的集合以支持解码和显示虚拟现实视频视角。
图15为对子图像码流进行编码的另一示例性方法1500的流程图。根据方法1500,在步骤1501中,编码器通过确保帧间预测不参考子图像外的像素点值,对轨迹中的子图像码流中的图像进行编码。此外,在步骤1503中,编码器通过限制运动矢量指向子图像内的整像素点位置和仅使用所述子图像内的整像素点位置进行插值的分数像素点位置,对轨迹中的子图像码流中的图像进行编码。此外,在步骤1505中,编码器通过限制帧间预测来对轨迹中的子图像码流中的图像进行编码,使得用于时间运动矢量预测的候选运动矢量不会从子图像外的块推导出。应注意,为了讨论的清晰性,描述了步骤1501、1503和1505。然而,步骤1501、1503和1505可以以任何顺序执行,包括同时和/或基本上同时执行。同样,对轨迹中的子图像码流中的图像进行编码还可包括:当第一子图像码流中存在多个编码区块时,pps中的entropy_coding_sync_enabled_flag值对于对应轨迹上携带的每个子图像码流为0。此外,对轨迹中的子图像码流中的图像进行编码还可包括要求轨迹包括相同数量个媒体像素点。此外,对轨迹中的子图像码流中的图像进行编码还可包括要求在多个轨迹上具有相同像素点数的像素点的呈现时间相同。此外,对轨迹中的子图像码流中的图像进行编码还可包括:所述轨迹上具有相同像素点数的媒体像素点中携带的子图像的图像顺序编号值相等。
当第一组件和第二组件之间除了线、迹或其它介质之外没有其它中间组件时,第一组件直接与第二组件耦合。当第一组件和第二组件之间存在线、迹或其它介质之外的其它中间组件时,第一组件间接与第二组件耦合。术语“耦合”及其变体包括直接耦合和间接耦合。除非另有说明否则使用术语“约”是指以下描述的数字的±10%。
虽然本发明已提供多个实施例,但应当理解,所公开的系统和方法也可通过一些其它具体形式体现,而不会脱离本发明的精神或范围。本发明的示例应被视为说明性而非限制性的,且本发明并不限于本文本所给出的细节。例如,各种元件或组件可以在另一系统中组合或集成,或者某些特征可以省略或不实现。
此外,在不脱离本发明的范围的情况下,各种实施例中描述和说明为离散或单独的技术、系统、子系统和方法可以与其它系统、组件、技术或方法进行组合或集成。其它改变、替换、更替示例对本领域技术人员而言是显而易见的,均不脱离本文所公开的精神和范围。