3D视频编码(3d打印技术介绍)

3D-HEVC编码框架3D-HEVC编码结构是对HEVC的扩展,每个视点纹理及深度图编码主要采用HEVC编码框架,但在其基础上增加了一些新的编码技术,使其更有利于深度图和多视点的编码。图13D-HEVC编码结构如上图所示,3D-HEVC编解码结构和MVC类似。图中所有输入的视频图像和深度图像是同一时刻,不同拍摄位置的场景,这些图像组成一个存取层。在同一个存取层中,首先对独立视点(基准视点…

大家好,又见面了,我是你们的朋友全栈君。

3D-HEVC编码框架

3D-HEVC编码结构是对HEVC的扩展,每个视点纹理及深度图编码主要采用HEVC编码框架,但在其基础上增加了一些新的编码技术,使其更有利于深度图和多视点的编码。

3D视频编码(3d打印技术介绍)

图1 3D-HEVC编码结构

如上图所示,3D-HEVC编解码结构和MVC类似。图中所有输入的视频图像和深度图像是同一时刻,不同拍摄位置的场景,这些图像组成一个存取层。在同一个存取层中,首先对独立视点(基准视点)编码,接着是该视点的深度图,再编码其他视点视频图像和深度图。原理上来说,每个视点的图像,包括视频图像和深度图像,均可以利用HEVC编码框架进行编码,输入的所有比特流复合形成3D比特流。

对于独立视点,利用未修正的HEVC编码结构,由于该视点的编码是独立的,不依赖于其他视点,因此其对应的比特流可以单独提取出来形成2D比特流,从而恢复出2D视频。由此可见,3D-HEVC兼容了2D视频的编解码。而其他视点和深度图采用修正的HEVC编码结构。如图中红色箭头表明可以利用视点间相似信息来去除视点间冗余,提高编码性能。


非独立视点编码技术

3D-HEVC在编码非独立视点时,除了使用独立视点编码所用的所有工具外,还用到了HEVC关于3D扩展的编码技术,使其更有利于多视点的编码。比如利用已编码的独立视点的信息来预测当前编码视点的信息,从而降低视点间冗余,提高编码效率。其中涉及的扩展技术主要是视差补偿预测,视点间运动预测和视点间冗余预测。

视差补偿预测

视差补偿预测(DCP)是非独立视点编码中一个重要的编码技术,视差补偿和运动补偿具有相似概念,均可理解为帧间预测的一种方法,但两者的参考帧存在本质区别。运动补偿预测(MCP)的参考帧是不同时刻,同一视点的编码帧,而DCP参考的是同一时刻,不同视点的已编码帧。由于DCP和MCP类似,因此DCP被添加到MCP列表中,作为MCP的一种预测模式。在宏块级的语法和解码过程中均没有修改,仅对高级语法元素进行了改进,从而可以将同一存取层已编码的视点图像加入到参考列表中。

3D视频编码(3d打印技术介绍)

图2 视差补偿预测和运动补偿预测

如上图所示,引用图像索引(R值)来区别MCP和DCP,即当R=1时表示DCP,其余表示MCP。

视点间运动预测

多视点视频是在同一时刻同一场景下,多个camera从不同角度拍摄的视频,不同视点呈现的物体运动具有相似性。因此可以利用同一时刻已编码视点的运动信息来预测当前视点的运动信息。

关于视点间运动预测的一种方法是一帧图像的所有块均使用恒定的视差矢量。为了更有效确定当前块与参考视点中相应块之间的关系,还可以利用深度图信息更准确的预测当前视点和参考视点之间的关系。

3D视频编码(3d打印技术介绍)

图3 基于参考视点的运动参数推导当前编码视点的运动参数

如上图所示,假设当前图像的深度图已给出或能够估计出,则将当前编码块的最大深度值转化成视差矢量。对于当前块的中心位置X加上已得到的视差矢量,从而得到参考视点中的位置XR,若XR是利用运动补偿预测进行编码的,则相关的运动矢量可以用作当前视点编码块运动信息的参考。同理,利用当前块的最大深度值推导出的视差矢量可以用于DCP。

视点间冗余预测

同一存取层的已编码图像的运动信息和冗余信息可以用来提高非独立视点的编码性能。为了利用视点间的冗余信息,在编码块之间的语法元素中添加一个标志信息用来表示该预测块是否利用了视点间冗余预测。视点间冗余预测过程和视点间运动矢量预测过程类似:

1.首先根据图3中的最大深度转化为视差矢量。

2.然后根据视差矢量确定在参考视点中的位置,得到该位置的冗余信息。

3.最后将当前块的冗余和预测的冗余差进行编码。若冗余信息是基于分像素的,则应该对参考视点的冗余信息进行插值滤波。

3D视频编码(3d打印技术介绍)

图4 视差冗余预测结构

如上图所示,Dc表示当前视点(View1)编码块,Bc和Dr分别表示同一时刻(Tj)参考视点(View0)对应的块和不同时刻(Ti)同一视点(View1)中对应的块,且VD是Dc和Dr之间的运动信息。由于Bc和Dc分别是同一时刻下,不同视点同一个物体的投射,因此两个块的运动信息应该是相同的。所以Bc的时域预测块Br可以通过VD进行确定,反之Bc的冗余信息和运动信息VD也可以通过加权因子映射到Dc


深度图编码

一般而言,所有用于视频图像的编码技术均可用作深度图编码,但是HEVC的设计目的是视频序列编码最优,对深度图的编码并不是最优。而与视频序列相比,深度图的特征是具有大块相同区域以及尖锐的边缘信息。

3D-HEVC的深度图帧内编码在视频编码的基础上增加了四种模式,分为两类:用直线分割的楔形分割法(Wedegelets)和用任意形状分割的轮廓分割法(Contours)。深度图编码将一个深度块分割为两个非矩形区域,每个区域用一个常数表示。为了能够表示出分割信息,至少应该确定两个元素参数,分别用于表示属于哪个区域的参数以及该区域恒定的常数。

3D视频编码(3d打印技术介绍)

图5 楔形分割模式

如上图所示,楔形分割和轮廓分割的主要区别在于分割的方式不同。对于楔形分割,一个深度块的两个区域是通过一条直线分割的,分割的两个区域分别为P1和P2,分割线由起始位置S和终止位置E表示。从图5中可得,对于模拟信号(左图),可以采用线性函数来表示分割线。而中间图则描述了离散信号的分割,该块是一个uB*vB大小的采样矩阵,起始点S和结束点E对应于采样矩阵的边界值,用于表示分割线的位置。对于编码过程中的楔形分割,分割模式将被存储下来,其存储的信息包括uB*vB大小的一个矩阵,矩阵中的每个元素是一个二进制信息,表示当前块的采样值属于P1还是P2。右图表示为分割好的预测块,其中白色部分表示P1区域,黑色部分表示P2区域。

3D视频编码(3d打印技术介绍)

图6 轮廓分割模式

如上图所示,轮廓分割法的分割线不能像楔形分割法一样能够用一个几何函数表示出来。而P1和P2可以是任意形状的,甚至可以分成多个部分。同时在分割方式上,轮廓分割和楔形分割很大程度上是相似的。

除了分割信息需要传输,还要求传送第i个分割号的区域深度值,每个分割的区域深度值是一个固定的数,该值最好的选择应该是该区域原始深度值的均值。

因此根据分割模式和传输信息不同,深度图新增的帧内编码模式分为四种方法:

1.明确的楔形法:在编码端确定最佳匹配的分割,并且在比特流中传输分割信息,利用传输的分割信息,解码端可以重建该块的信号。

2.帧内预测楔形法:通过相邻已编码的帧内块预测当前块的楔形分割,传输一个修正值。

3.元素间楔形法:当前块的分割信息通过重建块的co-located块,即该块和当前编码块在同一图像中,推导得到。

4.元素间轮廓法:通过重建的co-located块推导得到两个任意形状的区域分割

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129306.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月13日 下午5:00
下一篇 2022年4月13日 下午5:00


相关推荐

  • matlab做kmo检验的代码,急求 KMO测度和Bartlett 的球形度检验的计算原公式[通俗易懂]

    matlab做kmo检验的代码,急求 KMO测度和Bartlett 的球形度检验的计算原公式[通俗易懂]1、关于KMO公式,您从如下matlab源程序代码中不难得出,我已经用Excel就计算出来了,跟SPSS的计算结果完全一致。iX=inv(X);%X是原始数据的相关系数矩阵R,而inv表示求X的逆矩阵iXS2=diag(diag((iX.^-1)));%将iX的对角线的元素取倒数,其余元素都变为0,得到矩阵S2AIS=S2*iX*S2;%anti-image…

    2022年6月29日
    86
  • nano编辑器的详细使用教程

    nano编辑器的详细使用教程

    2026年3月17日
    2
  • IP地址和网段划分

    IP地址和网段划分IP 地址相当于我们的门牌号 IP 是一张网卡在网络中的唯一通讯地址 具有良好的寻址能力 那么 IP 地址有些什么规律呢 下面 我们来一起研究一下 首先 IP 的含义 IP 是 InternetProt 网际互连协议 的缩写 是 TCP IP 体系中的网络层协议 设计 IP 的目的是提高网络的可扩展性 一是解决互联网问题 实现大规模 异构网络的互联互通 二是分割顶层网络应用和底层网络技术之间的耦合关系 以利于两者的独立发展 根据端到端的设计原则 IP 只为主机提供一种无连接 不可靠的 尽力而为的数据包传输服务 IP

    2025年9月21日
    4
  • oracle存储过程回滚_sql事务回滚

    oracle存储过程回滚_sql事务回滚创建表createtableCourse (NoINT,Namenvarchar(10),Commentnvarchar(10))插入数据insertintocoursevalues(‘332′,’语言在’,’234′)insertintocoursevalues(‘332′,’语言在’,’234′)创建存储过程ALTER

    2022年10月21日
    5
  • ROS中使用A星算法进行路径规划[通俗易懂]

    ROS中使用A星算法进行路径规划[通俗易懂]ROS中使用A星算法进行路径规划前言python编写A星算法描述具体实现ROS结合A星算法描述具体实现实现结果前言由于本人这学期修了一门《智能工程》的课程,课程的大作业要求大家自主编写机器人导航程序,包括:路径规划、轨迹规划、控制器、机器人建模等相关程序,因此特在此写下一篇博客,记录开发过程。这是第一篇博客,用于记录如何将自己编写的A星算法用于ROS中。python编写A星算法描述先声…

    2022年10月6日
    5
  • 什么是螺旋式上升理论_否定之否定螺旋式上升

    什么是螺旋式上升理论_否定之否定螺旋式上升![](https://upload-images.jianshu.io/upload_images/10892560-417ca4f86b6b5b02.png)1.这个世界没有任何一条线是直线2.

    2022年8月5日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号