法律状态公告日
法律状态信息
法律状态
2013-08-21
未缴年费专利权终止 IPC(主分类):H04N7/26 授权公告日:20110202 终止日期:20120626 申请日:20090626
专利权的终止
2011-02-02
授权
授权
2010-02-03
实质审查的生效
实质审查的生效
2009-12-09
公开
公开
技术领域
本发明涉及基于H.264的多视点视频编码领域,尤其是涉及一种多视点视频编码中的运动和视差联合估计算法。
背景技术
多视点视频蕴涵了景物的深度信息,在自然场景的表征上更具真实感,在3D电视、自由视点电视、具有临场感的可视会议及虚拟现实等领域展现了广阔的应用前景[1]。具有“立体化”和“交互性”的多视点视频技术正越来越受到学术界和工业界的重视,并成为近年来研究的热点之一。
与传统的单视点视频相比,多视点视频需要处理的数据量随着相机数目的增加而成倍增加,这给传输和解码带来巨大的负担。因此,如何对海量的视频数据进行高效的压缩编码成为多视点视频面临实用化的一个重要问题。2001年,国际标准化组织(JVT/MPEG)成立了3D音视频的特别研究小组,以制定统一的多视点视频编码标准,将其作为H.264的一个增强部分。基于H.264标准,JVT提出了多视点视频编码校验模型(joint multiview video model,JMVM)作为多视点视频编码研究测试平台。
在多视点视频编码中,运动估计和视差估计过程大约占据了整个H.264编码器编码时间的95%,并且这个比例还会随着多视点视频编码结构的复杂度提高而增加。许多学者利用多视点视频序列相关性提出了新的编码算法。San[2]结合摄像机发射和极线的几何学特性提出了一种基于几何特性的快速视差估计算法,该算法能够大大减低视差补偿的复杂度,但是没有考虑摄像机间的位置关系。Guo等人[3]采用全局视差来表征相邻视点间的联系,引入“视点间的直接复制模式”,在解码端只需直接复制相邻视点对应块的信息来得到当前编码块的运动矢量,能够在一定程度上节省码率,但是全局视差矢量的计算增加了运算复杂度。Kim等人[4]利用多视点摄像机的几何特性以及视差矢量和运动矢量之间的联系提出一种自适应搜索窗口的快速运动和视差估计算法,设计了一个新的预测矢量作为预测矢量初值,并通过两个阈值来衡量预测矢量的可靠性,从而控制搜索窗口的大小。Ding等人[5]利用相邻视点对应块的高度相似性,通过视差估计来找到相邻视点参考帧中的对应块,已编码视点的模式和运动矢量等编码信息能够被再次使用,但是该方法只是针对运动估计,视差估计仍然采用全搜索方法。
综上所述,目前的这些快速算法运动估计和视差估计相对独立,并没有充分利用多视点视频的特性,结合相邻视点间的关系设计运动和视差联合估计算法,来同时降低运动估计和视差估计的复杂度。因此,编码的大多数时间还是浪费在运动估计和视差估计上面。为了达到高效压缩编码的目的,提高预测精度,结合运动估计和视差估计,设计一种联合估计的快速算法,在保证高压缩率的前提下大大减少编码复杂度,是非常有意义的。
附:参考文献
[1]SMOLIC A,MUELLER K,STEFANOSKI N,et al.Coding Algorithms for3DTV-A Survey[J].IEEE transactions on circuits and systems for video technology,2007,17(11):1606-1621.
[2]SAN X,CAI H,LOU J G.Multiview Image Coding Based on Geometric Prediction
[J].IEEE transactions on Circuits and Systems for Video Technology,2007,17(11):1536-1548.
[3]GUO X,LU Y,WU F,et al.Inter-View Direct Mode for Multiview Video Coding[J].IEEE transactions on circuits and systems for video technology,2006,16(12):1527-1532.
[4]KIM Y,KIM J,and SOHN K.Fast Disparity and Motion Estimation for Multi-viewVideo Coding[J].IEEE transactions on consumer electronics,2007,53(2):712-719.
[5]DING L F,TSUNG P K,CHIEN S Y,et al.Content-aware prediction algorithmwith inter-view mode decision for multiview video coding[J].IEEE transactions onMultimedia,2008,10(8):1553-1564.
发明内容
本发明的目的是提出一种运动和视差联合估计方法,在保证多视点视频编码质量的同时,降低运动和视差估计的计算复杂度。
本发明的技术思路特征为:
(1)在基于分层B帧的视点-时间预测结构中(见图1),当前视点Si的非锚定帧需要参考来自本视点和相邻视点的多个参考帧进行编码。在多视点视频编码校验模型JMVM中,采用传统的全搜索方法对其进行编码,运算复杂度极高。因此,必须充分利用多视点视频的时间和空间冗余,结合运动补偿预测和视差补偿预测技术对数据进行有效的编码和压缩。
(2)在一幅图像中,相邻块的运动矢量非常相似,很多运动/视差估计快速算法都采用中值矢量作为搜索起始点来进行预测,即,利用当前块的左边块A、上边块B和右上块C的运动/视差矢量中值来作为预测矢量初值(见图2),以这个初值点为中心,搜索得到最佳的预测矢量。由于多视点视频编码涉及视点和时间两个方向的多参考帧技术,中值矢量并不总是最优起始点。因此,本发明力求设计一个有效的预测矢量取代中值矢量作为预测初值。
(3)由于同一视点相邻时刻图像的视差矢量分布情况非常相似(见图3),因此,在本发明中,将相同视点相邻时刻图像内对应块的视差矢量作为当前编码块视差矢量的初值。同样的道理,将相邻视点同一时刻图像内对应块的运动矢量作为当前编码块运动矢量的初值。为了保证预测矢量初值的准确性,在选择运动/视差矢量初值时,将这个预测矢量与零矢量、左边块、上边块以及右上块的矢量值进行比较,从中选取使RDCost值最小的矢量作为当前编码块的运动/视差矢量初值。
(4)由于平行摆放的摄像机阵列拍摄得到的多视点视频序列,相邻图像的视差矢量和运动矢量存在着密切的几何联系(见图4)。因此,当前编码块的运动矢量和视差矢量可以通过相同视点相邻时刻图像对应块的视差矢量和相同时刻相邻视点图像对应块上的运动矢量来预测得到。
(5)本发明方法在搜索过程中,采用改进的搜索策略,分别在时间和视点方向的参考帧中设定一个至少2个像素的搜索窗口,进行多次运动和视差估计。该方法由前一次运动/视差估计来得到候选矢量来进行下一次视差/运动估计,通过判断RDCost值来不断更新当前的最优运动/视差矢量。其中,搜索窗口的大小直接影响到算法的效率,搜索窗口越小,表示在进行运动/视差矢量搜索时的搜索点数越少,运算速度也就越快,由于本发明方法选取的预测初值非常可靠,并且本发明方法反复利用相邻图像运动和视差矢量之间的密切联系进行多次迭代,不断修正运动/视差矢量,直至运动/视差矢量达到最优值,因此实验中采用2个像素的搜索窗口就足以保证搜索的准确性。
本发明的技术方案流程图参见图5、图6、图7。
首先令具有k+1台从左至右排列的平行摄像机系统拍摄得到的多视点视频表示为{S0,S1,S2…Sk},每路视点包含n个时刻的图像帧,令视点Si为当前视点,1≤i≤k-1,Si的参考视点为相邻的左视点Si-1和右视点Si+1,令视点Si中t时刻的帧为当前帧,T为当前帧和该路视点中的两个最相邻已编码帧之间的时间间隔,当前帧在时间方向的前向参考帧为视点Si中t-T时刻的已编码帧,当前帧在时间方向的后向参考帧为视点Si中t+T时刻的已编码帧,当前帧在视点方向的前向参考帧为视点Si-1中t时刻的已编码帧,当前帧在视点方向的后向参考帧为视点Si+1中t时刻的已编码帧,前向搜索是指当前帧通过参考前向参考帧进行前向运动和视差估计,后向搜索是指当前帧通过参考后向参考帧进行后向运动和视差估计,假设正在编码的块Pi,t为当前块,当前块已编码的左边块、上边块、右上块通称为当前块的相邻块,参考帧中与当前块位置相同的块称为对应块,当前块在参考帧中的最佳匹配块称为预测块,本发明方法包括以下步骤:
(1)判断当前帧是否为锚定帧,如果是锚定帧,则采用全搜索方法对该锚定帧中的所有块进行编码,并且保存每个块编码后的视差矢量DVt-T;如果当前帧为非锚定帧,则将当前帧视点方向参考帧的运动和视差矢量读入到缓存中,将该非锚定帧的第一个块作为当前块;
(2)开始前向搜索,求取当前块的前向运动矢量和前向视差矢量,将relation1描述的相邻图像的运动矢量和视差矢量的关系MVt+DVt-T=DVt+MVi-1定义为Relation,其中,MVi为当前块的前向运动矢量,DVt为当前块的前向视差矢量,DVt-T为当前块在时间方向的前向参考帧中的对应块的前向视差矢量,MVi-1为当前块在视点方向的前向参考帧中的对应块的前向运动矢量;
(3)将当前块在时间方向的前向参考帧中的对应块的前向视差矢量DVt-T设为当前块的前向视差矢量的初值;将当前块在视点方向的前向参考帧中的对应块的前向运动矢量MVi-1设为当前块的前向运动矢量的初值;
(4)将当前块的前向运动矢量初值MVi-1和当前块的前向视差矢量初值DVt-T分别与当前块的相邻块的预测矢量以及零矢量进行比较,选取使SAD值最小的矢量作为当前块的前向运动矢量预测值pMVi0和当前块的前向视差矢量预测值pDVt0,并在pMVi0附近设定一个至少2个像素的搜索窗口,
在这个搜索窗口内进行最佳运动矢量匹配,选取使率失真代价最小的矢量作为该区域内的最佳运动矢量MVi0,保存该最小率失真代价RDCostME0;在pDVi0附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的矢量作为该区域内的最佳视差矢量DVt0,保存该最小率失真代价RDCostDE0,其中,SAD按下式计算,
SAD(c,r(mv))表示当前块和预测块的绝对误差和,c[i,j]表示当前块的像素值;r[i-mvx,j-mvy]表示预测块的像素值,B1,B2分别表示块的水平和垂直像素数,运动估计和视差估计的率失真代价按下式计算,
RDCostME\DE=SAD(c,r(mv))+λ×R(mv-pred)
mv=(mvx,mvy)T表示当前块相对于预测块的运动/视差矢量;pred=(predx,predy)T表示当前块的运动/视差矢量的预测值;码率R(mv-pred)表示编码运动/视差矢量的差值所需的比特数,λ表示拉格朗日乘子;
(5)由上一步得到的运动/视差矢量来计算得到更准确的视差/运动矢量,由当前块Pi,t的位置和当前块的前向视差矢量DVt0相加得到当前块在视点方向的前向参考帧中的预测块Pi-1,t,即,Pi-1,t=Pi,t+DVt0,读取预测块Pi-1,t的前向运动矢量MVi-1,利用Relation描述的矢量关系,由pMVi1=DVt0+MVi-1-DVi-T得到一个新的当前块的前向运动矢量预测值pMVi1,其中,Dt-T为当前块在时间方向的前向参考帧中的对应块的前向视差矢量,MVi-1为当前块在视点方向的前向参考帧中的对应块的前向运动矢量,在pMVi1附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳运动矢量匹配,选取该区域内使率失真代价最小的运动矢量作为最佳运动矢量MVi1,保存该最小率失真代价RDCostME1;
由当前块Pi,t的位置和当前块的前向运动矢量MVi1相加得到当前块在时间方向的前向参考帧中的预测块Pi,t-T,即,Pi,t-T=Pi,t+MVi1,读取预测块Pi,t-T的视差矢量DVt-T,利用Relation描述的矢量关系,由pDVi1=MVi1+DVt-T-MVi-1得到一个新的当前块的前向视差矢量预测值pDVi1,其中,DVt-T为当前块在时间方向的前向参考帧中的对应块的前向视差矢量,MVi-1为当前块在视点方向的前向参考帧中的对应块的前向运动矢量,在pDVt1附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的视差矢量作为该区域内的最佳视差矢量DVt1,保存该最小率失真代价RDCostDE1;
(6)判断RDCostME1是否小于RDCostME0,RDCostDE1是否小于RDCostDE0,如果RDCostME1小于RDCostME0并且RDCostDE1小于RDCostDE0,则令DVt0=DVt1,MVi0=MVi1,RDCostME0=RDCostME1,RDCostDE0=RDCostDE1,跳转到步骤(5);否则,将MVi0,DVt0,RDCostME0,RDCostDE0保存为当前块的前向运动和视差估计结果;
(7)比较前向运动矢量和前向视差矢量的率失真代价,选取率失真代价较小的作为前向搜索的最佳预测矢量;
(8)开始后向搜索过程,首先判断当前帧是否有时间方向的后向参考帧,如果当前帧有时间方向的后向参考帧,则将relation2描述的相邻图像的运动矢量和视差矢量的关系定义为Relation,开始计算当前块的后向运动矢量和当前块的后向视差矢量;如果当前帧没有时间方向的后向参考帧,则将relation3描述的相邻图像的运动矢量和视差矢量的关系定义为Relation,跳转到步骤(14),开始计算当前块的后向视差矢量;其中,relation2如下式所示:DVt′+MVi+1′=MVi′+DVt+T′其中,MVi′为当前块的后向运动矢量,DVt′为当前块的后向视差矢量,DVt+T′为当前块在时间方向的后向参考帧中的对应块的后向视差矢量,MVi+1′为当前块在视点方向的后向参考帧中的对应块的后向运动矢量;relation3如下式所示:DVt′+MVi+1=MVi+DVt-T′其中,MVi为当前块的前向运动矢量,DVt′为当前块的后向视差矢量,DVt-T′为当前块在时间方向的前向参考帧中的对应块的后向视差矢量,MVi+1为当前块在视点方向的后向参考帧中的对应块的前向运动矢量;
(9)如果当前帧有时间方向的后向参考帧,将当前块在时间方向的后向参考帧中的对应块的后向视差矢量DVt+T′设为当前块后向视差矢量的初值;将当前块在视点方向的后向参考帧中的对应块的后向运动矢量MVi+1′设为当前块后向运动矢量的初值;
(10)将当前块的后向运动矢量初值MVi+1′和当前块的后向视差矢量初值DVt+T′分别与当前块的相邻块的预测矢量以及零矢量进行比较,选取使SAD值最小的矢量作为当前块的后向运动矢量预测值pMVi0′和当前块的后向视差矢量预测值pDVt0′,并在pMVi0′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳运动矢量匹配,选取使率失真代价最小的矢量作为该区域内的最佳运动矢量MVi0′,保存该最小率失真代价RDCostME0′;在pDVt0′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的矢量作为该区域内的最佳视差矢量DVt0′,保存该最小率失真代价RDCostDE0′;
(11)由上一步得到的运动/视差矢量来计算得到更准确的视差/运动矢量,由当前块Pi,t的位置和当前块的后向视差矢量DVt0′相加得到当前块在视点方向的后向参考帧中的预测块Pi+1,t,即,Pi+1,t=Pi,t+DVt0′,读取预测块Pi+1,t的后向运动矢量MVi+1′,利用Relation描述的矢量关系,由pMVi1′=DVt0′+MVi+1′-DVt+T′得到一个新的当前块的后向运动矢量预测值pMVi1′,其中,DVt+T′为当前块在时间方向的后向参考帧中的对应块的后向视差矢量,MVi+1′为当前块在视点方向的后向参考帧中的对应块的后向运动矢量,在pMVi1′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳运动矢量匹配,选取该区域内使率失真代价最小的运动矢量作为最佳运动矢量MVi1′,保存该最小率失真代价RDCostME1′;
由当前块Pi,t的位置和当前块的后向运动矢量MVi1′相加得到当前块在时间方向后向参考帧中的预测块Pi,t+T,即,Pi,t+T=Pi,t+MVi1′,读取预测块Pi,t+T的后向视差矢量DVt+T′,利用Relation描述的矢量关系,由pDVt1′=MVi1′+DVt+T′-MVi+1′得到一个新的当前块的后向视差矢量预测值pDVt1′,其中,DVt+T′为当前块在时间方向的后向参考帧中的对应块的后向视差矢量,MVi+1′为当前块在视点方向的后向参考帧中的对应块的后向运动矢量,在pDVt1′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的视差矢量作为该区域内的最佳视差矢量DVt1′,保存该最小率失真代价RDCostDE1′;
(12)判断RDCostME1′是否小于RDCostME0′,RDCostDE1′是否小于RDCostDE0′,如果RDCostME1′小于RDCostME0′并且RDCostDE1′小于RDCostDE0′,则令DVt0′=DVt1′,MVi0′=MVi1′,RDCostME0′=RDCostME1′,RDCostDE0′=RDCostDE1′,跳转到步骤(11);否则,将MVi0′,DVt0′,RDCostME0′,RDCostDE0′保存为当前块的后向运动和视差估计结果;
(13)比较后向运动矢量和后向视差矢量的率失真代价,选取率失真代价较小的矢量作为后向搜索的最佳预测矢量,结束当前块的后向搜索过程,跳转到步骤(18);
(14)如当前帧没有时间方向的后向参考帧,则将当前块时间方向的前向参考帧中的对应块的后向视差矢量DVt-T′设为当前块后向视差矢量的初值;
(15)将当前块的后向视差矢量初值DVt-T′与当前块的相邻块的预测矢量以及零矢量进行比较,选取使SAD值最小的矢量作为当前块的后向视差矢量预测值pDVt0′,在pDVt0′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的矢量作为该区域内的最佳视差矢量DVt0′,保存该最小率失真代价RDCostDE0′;
(16)由当前块Pi,t的位置和当前块的后向视差矢量DVt0′相加得到当前块在视点方向的后向参考帧中的预测块Pi+1,t,即,Pi+1,t=Pi,t+DVt0′,读取预测块Pi+1,t的前向运动矢量MVi+1,利用Relation描述的矢量关系,由pMVi1=DVt0′+MVi+1-DVt-T′得到一个新的当前块的前向运动矢量预测值pMVi1,其中,DVt-T′为当前块在时间方向的前向参考帧中的对应块的后向视差矢量,MVi+1为当前块在视点方向的后向参考帧中的对应块的前向运动矢量,在PMVi1附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳运动矢量匹配,选取该区域内使率失真代价最小的运动矢量作为最佳运动矢量MVi1;
由当前块Pi,t的位置和当前块的前向运动矢量MVi1相加得到当前块在时间方向前向参考帧中的预测块Pi,t-T,即,Pi,t-T=Pi,t+MVi1,读取预测块Pi,t-T的后向视差矢量DVt-T′,利用Relation描述的矢量关系,由pDVt1′=DVt-T′+MVi1-MVi+1得到一个新的当前块的后向视差矢量预测值pDVt1′,其中,DVt-T′为当前块在时间方向的前向参考帧中的对应块的后向视差矢量,MVi+1为当前块在视点方向的后向参考帧中的对应块的前向运动矢量,在pDVt1′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的视差矢量作为该区域内的最佳视差矢量DVt1′,保存该最小率失真代价RDCostDE1′;
(17)判断RDCostDE1′是否小于RDCostDE0′,如果RDCostDE1′小于RDCostDE0′,则令DVt0′=DVt1′,RDCostDE0′RDCostDE1′,跳转到步骤(16);否则,将DVt0′作为后向搜索的最佳预测矢量;
(18)根据前向搜索和后向搜索得到的结果,从中选取使率失真代价最小的矢量作为当前块的最优预测矢量,保存当前块的最佳编码信息,当前块的运动和视差估计过程结束;
(19)判断当前帧中是否还有未编码块,如果当前帧中还有未编码块,则跳转到步骤(2),开始编码当前块的下一块;如果当前帧中所有块都编码完毕,则判断当前视点中是否还有未编码帧,如果当前视点中还有未编码帧,则跳转到步骤(1),开始编码当前帧的下一帧;如果当前视点的所有帧都编码完毕,则对当前视点的编码过程结束。
与现有技术相比,本发明的优点在于:基于分层B帧的视点-时间预测结构,利用相邻图像运动和视差矢量间的几何联系,设计可靠的预测矢量作为预测矢量初值,并且改进搜索策略,分别在不同方向的参考帧内进行运动矢量和视差矢量的迭代,由前一次运动/视差估计得到候选矢量来进行下一次视差/运动估计,不断修正局部运动/视差矢量以得到最佳运动和视差矢量。本发明的方法能在保持编码质量的同时,极大降低运动估计和视差估计的复杂度,从而提高多视点视频编码系统的编码速度。
本发明方法编码性能与全搜索方法的编码性能相当,峰值信噪比变化在-0.01~-0.11dB之间,码率变化在-10.26%~+0.60%之间,并且本发明的方法极大地提高了编码效率,能节省约90%的运算时间。由于本发明方法只是针对非锚定帧,锚定帧仍然采用全搜索方法,因此,若去除锚定帧的全搜索方法时间,本发明方法能节省90%以上的运算时间。
附图说明
图1是基于分层B帧的视点-时间预测结构示意图;
图2是运动/视差估计示意图;
图3是测试序列ballroom视点S2中相邻时刻的两帧图像的视差矢量分布统计,其中xy平面表示视差矢量的大小,z轴表示宏块数目;(a)是T0时刻图像的视差矢量分布统计图,(b)是T12时刻图像的视差矢量分布统计图;
图4是相邻图像的运动矢量和视差矢量关系示意图;
图5是本发明采用方法的基本框图;
图6是本发明的快速运动和视差联合估计流程图;
图7是本发明的前向搜索过程的具体流程图;
图8是“Ballroom”多视点测试序列编码率失真性能比较曲线图;
图9是“Exit”多视点测试序列编码率失真性能比较曲线图;
图10是“Vassar”多视点测试序列编码率失真性能比较曲线图;
图11是不同编码方法运算复杂度比较示意图。
具体实施方式
多视点视频是指由k+1台从左至右排列的平行摄像机系统拍摄得到的k+1路视频序列{S0,S1,S2…Sk},每路视频包含从T0时刻至Tn时刻的n+1帧图像。图1为多视点视频的编码框架,垂直方向为视点方向,水平方向为时间方向。每一路视频的第一帧为锚定帧,如Si/T0的B0帧为锚定帧,其余各帧以图像组为单位进行编码。每个图像组由一个锚定帧和多个非锚定帧组成,令NGOP代表一个图像组包含的帧数,NGOP的取值为2的整数次幂,12或者15。在一个图像组中,通常位于图像组末端的帧为锚定帧,例如,图中NGOP=12时,S1/T12时刻的B0帧为锚定帧。在编码时,锚定帧首先独立编码,然后每一个非锚定帧按照分层结构进行编码,例如,图中视点Si内各帧图像的编码顺序为“B0 B0 B1 B2 B2 B3 B3 B3 B3 b4 b4 b4 b4…”。
令视点Si为当前正在编码的视点,1≤i≤k-1,Si的参考视点为相邻的左视点Si-1和右视点Si+1,Si中的非锚定帧在编码时不仅需要参考视点方向参考帧进行视差估计,还要参考时间方向的参考帧进行运动估计,例如,Si/T6时刻的B1帧,需要参考时间方向和视点方向的共4个参考帧进行编码。时间方向的参考帧为当前帧在同一视点内部时间序列中上层的两个最相邻已编码帧,例如,Si/T6时刻的B1帧,它时间方向的参考帧为Si/T0时刻的B0帧和Si/T12时刻的B0帧;Si/T3时刻的B2帧,它时间方向的参考帧为Si/T0时刻的B0帧和Si/T6时刻的B1帧;Si/T9时刻的B2帧,它时间方向的参考帧为Si/T6时刻的B1帧和Si/T12时刻的B0帧;Si/T2时刻的B3帧,它时间方向的参考帧为Si//T0时刻的B0帧和Si/T3时刻的B2帧,等等。视点方向的参考帧为当前帧在相邻视点相同时刻的参考帧,例如,Si/T6时刻的B1帧,它视点方向的参考帧为Si-1/T6时刻的B1帧和Si+1/T6时刻的B1帧;Si/T3时刻的B2帧,它视点方向的参考帧为Si-1/T3时刻的B2帧和Si+1/T3时刻的B2帧;Si/T9时刻的B2帧,它视点方向的参考帧为Si-1/T9时刻的B2帧和Si+1/T9时刻的B2帧,等等。参考帧又分为前向参考帧和后向参考帧,其中,对于时间方向的参考帧来说,假设当前帧位于t时刻,那么小于t时刻的参考帧为前向参考帧,大于t时刻的帧为后向参考帧;对于视点方向的参考帧来说,假设当前帧位于视点i,那么视点序号小于i的参考帧为前向参考帧,视点序号大于i的帧为后向参考帧。例如,Si/T6时刻的B1帧,它的前向参考帧为Si/T0时刻的B0帧和Si-1/T6时刻的B1帧,后向参考帧为Si/T12时刻的B0帧和Si+1/T6时刻的B1帧。前向搜索是指当前帧通过参考前向参考帧进行前向运动和视差估计,后向搜索是指当前帧通过参考后向参考帧进行后向运动和视差估计。
运动/视差估计示意如图2所示,对应块是指参考帧中与当前块位置相同的块;当前块已编码的左边块A、上边块B、右上块C统称为当前块的相邻块;运动/视差估计过程首先在参考帧中找到与当前块位置相同的对应块,然后在参考帧中,以对应块为中心,在其周围设定一个搜索窗口,在这个搜索窗口进行运动/视差矢量搜索,得到当前块在参考帧中的最佳匹配块,称为预测块。其中,搜索窗口的大小直接影响到算法的效率,搜索窗口越小,表示在进行运动/视差矢量搜索时的搜索点数越少,运算速度也就越快,由于本发明方法选取的预测初值非常可靠,并且本发明方法反复利用相邻图像运动和视差矢量之间的密切联系进行多次迭代,不断修正运动/视差矢量直至运动/视差矢量达到最优值,因此实验中采用2个像素的搜索窗口就足以保证搜索的准确性。
图3为同一视点相邻时刻图像的视差矢量分布情况,由于同一视点相邻时刻图像的视差矢量分布情况非常相似,在本发明中,将相同视点相邻时刻图像内对应块的视差矢量作为当前编码块视差矢量的初值。同样的道理,将相邻视点同一时刻图像内对应块的运动矢量作为当前编码块运动矢量的初值。为了保证预测矢量初值的准确性,在选择运动/视差矢量初值时,将这个预测矢量与零矢量、左边块、上方块以及右上方块的矢量值进行比较,从中选取使RDCost值最小的矢量作为当前编码块的运动/视差矢量初值。
图4表示视点i-1,i,i+1在时刻t-T,t,t+T的9个相邻图像运动矢量和视差矢量之间的关系。其中,Pm,l(m=i-1,i,i+1;l=t-T,t,t+T)为视点m在时刻l的图像中的一个编码块,T为当前帧和该时间序列中上层的两个最相邻已编码帧之间的时间间隔,假设Pi,t为当前块,Pi,t+T,Pi,t+T分别表示当前块在相同视点Si中t-T,t+T时刻的两个参考帧中的对应块,Pi-1,t,Pi+1,t分别表示当前块在相同时刻相邻视点Si-1和Si+1中的两个参考帧中的对应块。根据多视点视频的序列相关性,当前块Pi,t的运动矢量和视差矢量可以通过相同视点相邻时刻图像对应块的视差矢量和相同时刻相邻视点图像对应块上的运动矢量来预测得到。因此,可以得到以下关系,
MVi+DVt-T=DVt+MVi-1
MVi′+DVt=MVi-1′+DVt+T
MVi+1+DVt-T′=MVi+DVt′
MVi+1′+DVt′=MV′+DVt+T′
其中,MVi和MVi ′分别为当前块的前、后向运动矢量,DVi和DVi′分别为当前块的前、后向视差矢量,DVt-T为当前块在时间方向的前向参考帧(Si/t-T时刻的帧)中的对应块的前向视差矢量,DVt-T′为当前块在时间方向的前向参考帧(Si/t-T时刻的帧)中的对应块的后向视差矢量,DVt+T为当前块在时间方向的后向参考帧(Si/t+T时刻的帧)中的对应块的前向视差矢量,DVt+T′为当前块在时间方向的后向参考帧(Si/t+T时刻的帧)中的对应块的后向视差矢量,MVi-1为当前块在视点方向的前向参考帧(Si-1/t时刻的帧)中的对应块的前向运动矢量,MVi-1′当前块在视点方向的前向参考帧(Si-1/t时刻的帧)中的对应块的后向运动矢量,MVi+1为当前块在视点方向的后向参考帧(Si+1/t时刻的帧)中的对应块的前向运动矢量,MVi+1′当前块在视点方向的后向参考帧(Si+1/t时刻的帧)中的对应块的后向运动矢量。本发明中用到的相邻图像运动和视差矢量的关系relation1对应MVi+DVt-T=DVt+MVt-1,relaion2对应MVi+1′+DVt′=MV′+DVt+T′,relation3对应DVt-T′+MVi+1=MVt+DVt′。
本发明的技术方案流程图参见图5、图6、图7。图5是本发明采用方法的基本框图;图6是本发明的快速运动和视差联合估计流程图;图7是本发明的前向搜索过程的具体流程图。
令视点Si为当前正在编码的视点,1≤i≤k,Si的参考视点为相邻的左视点Si-1和右视点Si+1,Si/t表示视点Si中t时刻的图像帧,令Si/t时刻的图像帧为当前帧,T为当前帧和该路视点中上层的两个最相邻已编码帧之间的时间间隔,其中正在编码的块Pi,t为当前块,当前块已编码的左边块、上边块、右上块称为当前块的相邻块,当前块在参考帧中的最佳匹配块称为预测块,然后,具体实施按照以下步骤执行:
第一步:判断当前帧是否为锚定帧,如果是锚定帧,则采用全搜索方法来对该锚定帧中的所有块进行编码,并且保存每个块编码后的视差矢量DVt-T,其中,DVt-T为当前块在时间方向的前向参考帧(Si/t-T时刻的帧)中的对应块的视差矢量;如果当前帧为非锚定帧,则将当前帧的视点方向参考帧的运动和视差矢量读入到缓存中,将该非锚定帧的第一个块作为当前块,例如,当前帧(Si/t时刻的帧)视点方向的参考帧为Si-1/t时刻的帧和Si+1/t时刻的帧;
第二步:开始前向搜索,求取当前块的前向运动矢量和前向视差矢量,将relation1描述的相邻图像的运动矢量和视差矢量的关系MVi+DVt-T=DVt+MVi-1定义为Relation,其中,MVi为当前块的前向运动矢量,DVt为当前块的前向视差矢量,DVt-T为当前块在时间方向的前向参考帧(Si/t-T时刻的帧)中的对应块的前向视差矢量,MVt-1为当前块在视点方向的前向参考帧(Si-1/t时刻的帧)中的对应块的前向运动矢量;
第三步:读入当前帧的前向参考帧,例如,Si/T6时刻的B1帧,它的前向参考帧为Si/T0时刻的B0帧和Si-1/T6时刻的B1帧,其中,Si/T0时刻的B0帧为时间方向的前向参考帧,Si-1/T6时刻的B1帧为视点方向的前向参考帧;Si/T3时刻的B2帧,它的前向参考帧为Si/T0时刻的B0帧和Si-1/T3时刻的B2帧,其中,Si/r0时刻的B0帧为时间方向的前向参考帧,Si-1/T3时刻的B2帧为视点方向的前向参考帧;第四步:将当前块在时间方向的前向参考帧(Si/t-T时刻的帧)中对应块的前向视差矢量DVt-T设为当前块的前向视差矢量的初值;将当前块在视点方向的前向参考帧(如Si-1/t时刻的帧)中对应块的前向运动矢量MVi-1设为当前块的前向运动矢量的初值;
第五步:将当前块的前向运动矢量初值MVi-1和当前块的前向视差矢量初值DVt-T分别与当前块的相邻块的预测矢量以及零矢量进行比较,计算当前块和预测块的绝对误差和SAD,选取使SAD值最小的矢量作为当前块的前向运动矢量预测值pMVi0和当前块的前向视差矢量预测值pDVi0,并在pMVi0附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳运动矢量匹配,选取使率失真代价最小的矢量作为该区域内的最佳运动矢量MVi0,保存该最小率失真代价RDCostME0;在pDVt0附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的矢量作为该区域内的最佳视差矢量DVt0,保存该最小率失真代价RDCostDE0,其中,SAD按下式计算,
SAD(c,r(mv))表示当前块和预测块的绝对误差和,c[i,j]表示当前块的像素值;r[i-mvx,j-mvy]表示预测块的像素值,B1,B2分别表示块的水平和垂直像素数,运动估计和视差估计的率失真代价按下式计算,
RDCostME\DE=SAD(c,r(mv))+λ×R(mv-pred)
mv=(mvx,mvy)T表示当前块相对于预测块的运动/视差矢量;pred=(predx,predy)T表示当前块的运动/视差矢量的预测值;码率R(mv-pred)表示编码运动/视差矢量的差值所需的比特数,λ表示拉格朗日乘子;
第六步:由当前块Pi,t的位置和当前块的前向视差矢量DVt0相加得到当前块在视点方向的前向参考帧(Si-1/t时刻的帧)中的预测块Pi-1,t,即,Pi-1,t=Pi,t+DVt0,读取预测块Pi-1,t的前向运动矢量MVi-1,利用Relation描述的矢量关系,由pMVi1=DVt0+MVi-1-DVt-T得到一个新的当前块的前向运动矢量预测值pMVi1,其中,DVt-T为当前块在时间方向的前向参考帧(Si/t-T时刻的帧)中的对应块的前向视差矢量,MVi-1为当前块在视点方向的前向参考帧(Si-1/t时刻的帧)中的对应块的前向运动矢量,在pMVi1附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳运动矢量匹配,选取该区域内使率失真代价最小的运动矢量作为最佳运动矢量MVi1,保存该最小率失真代价RDCostME1;
第七步:由当前块Pi,t的位置和当前块的前向运动矢量MVi1相加得到当前块在时间方向的前向参考帧(Si/t-T时刻的帧)中的预测块Pi,t-T,即,Pi,t-T=Pi,t+MVi1,读取预测块Pi,t-T的视差矢量DVt-T,利用Relation描述的矢量关系,由pDVt1=MVi1+DVt-T-MVi-1得到一个新的当前块的前向视差矢量预测值pDVt1,其中,DVt-T为当前块在时间方向的前向参考帧(Si/t-T时刻的帧)中的对应块的前向视差矢量,MVi-1为当前块在视点方向的前向参考帧(Si-1/t时刻)中的对应块的前向运动矢量,在pDVi1附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的视差矢量作为该区域内的最佳视差矢量DVi1,保存该最小率失真代价RDCostDE1;
第八步:判断RDCostME1是否小于RDCostME0,RDCostDE1是否小于RDCostDE0,如果RDCostME1小于RDCostME0并且RDCostDE1小于RDCostDE0,则令DVt0=DVt1,MVi0=MVi1,RDCostME0=RDCostME1,RDCostDE0=RDCostDE1,跳转到第六步;否则,将MVi0,DVi0,RDCostME0,RDCostDE0保存为当前块的前向运动和视差估计结果;
第九步:比较前向运动矢量和前向视差矢量的率失真代价,选取率失真代价较小的作为前向搜索的最佳预测矢量;
第十步:开始后向搜索过程,求取当前块的后向运动矢量和后向视差矢量,首先判断当前帧是否有4个参考帧,如果当前帧的参考帧数目不等于4,例如,Si/Tn时刻的帧只有视点方向的2个参考帧和时间方向的1个前向参考帧,没有时间方向的后向参考帧,则将relation3描述的相邻图像的运动矢量和视差矢量的关系定义为Relation,跳转到第十八步;若当前帧有4个参考帧,则将relation2描述的相邻图像的运动矢量和视差矢量的关系定义为Relation;其中,relation2如下式所示:
DVt′+MVi+1′=MVi′+DVt+T′
其中,MVi′为当前块的后向运动矢量,DVi′为当前块的后向视差矢量,DVt+T′为当前块在时间方向的后向参考帧(Si/t+T时刻的帧)中的对应块的后向视差矢量,MVi+1′为当前块在视点方向的后向参考帧(Si+1/t时刻的帧)中的对应块的后向运动矢量;relation3如下式所示:
DVt-T′+MVi+1=MVi+DVt′
其中,MVi为当前块的前向运动矢量,DVi′为当前块的后向视差矢量,DVt-T′为当前块在时间方向的前向参考帧(Si/t-T时刻的帧)中的对应块的后向视差矢量,MVi+1为当前块在视点方向的后向参考帧(Si+1/t时刻的帧)中的对应块的前向运动矢量;
第十一步:读入当前帧的后向参考帧,例如,Si/T6时刻的B1帧,它的后向参考帧为Si/T12时刻的B0帧和Si+1/T6时刻的B1帧,其中,Si/T12时刻的B0帧为时间方向的后向参考帧,Si+1/T6时刻的B1帧为视点方向的后向参考帧;Si/T3时刻的B2帧,它的后向参考帧为Si/T6时刻的B1帧和Si+1/T3时刻的B2帧,其中,Si/T6时刻的B1帧为时间方向的后向参考帧,Si+1/T3时刻的B2帧为视点方向的后向参考帧;
第十二步:将当前块在时间方向的后向参考帧(Si/t+T时刻的帧)中对应块的后向视差矢量DVt+T′设为当前块的后向视差矢量的初值;将当前块在视点方向的后向参考帧(如Si+1/t时刻的帧)中对应块的后向运动矢量MVi+1′设为当前块的后向运动矢量的初值;
第十三步:将当前块的后向运动矢量初值MVi+1′和当前块的后向视差矢量初值DVt+T′分别与当前块的相邻块的预测矢量以及零矢量进行比较,计算当前块和预测块的绝对误差和SAD,选取使SAD值最小的矢量作为当前块的后向运动矢量预测值pMVi0′和当前块的后向视差矢量预测值pDVi0′,并在pMVi0′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳运动矢量匹配,选取使率失真代价最小的矢量作为该区域内的最佳运动矢量MVi0′,保存该最小率失真代价RDCostME0′;在pDVt0′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的矢量作为该区域内的最佳视差矢量DVt0′,保存该最小率失真代价RDCostDE0′;
第十四步:由当前块Pi,t的位置和当前块的后向视差矢量DVi0′相加得到当前块在视点方向的后向参考帧(Si+1/t时刻的帧)中的预测块Pi+1,t,即,Pi+1,t=Pi,t+DVt0′,读取预测块Pi+1,t的后向运动矢量MVi+1′,利用Relation描述的矢量关系,由pMVi1′=DVt0′+MVi+1′-DVt+T′得到一个新的当前块的后向运动矢量预测值pMVi1′,其中,DVt+T′为当前块在时间方向的后向参考帧(Si/t+T时刻的帧)中对应块的后向视差矢量,MVi+1′为当前块在视点方向的后向参考帧(Si+1/t时刻的帧)中对应块的后向运动矢量,在pMVi1′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳运动矢量匹配,选取该区域内使率失真代价最小的运动矢量作为最佳运动矢量MVi1′,保存该最小率失真代价RDCostME1′;
第十五步:由当前块Pi,t的位置和当前块的后向运动矢量MVi1′相加得到当前块在时间方向的后向参考帧(Si/t+T时刻的帧)中的预测块Pi,t+T,即,
Pi,t+T=Pi,t+MVi1′,读取预测块Pi,t+T的后向视差矢量DVt+T ′,利用Relation描述的矢量关系,由pDVi1′=MVi1′+DVt+T′-MVi+1′得到一个新的当前块的后向视差矢量预测值pDVt1′,其中,DVt+T′为当前块在时间方向的后向参考帧(Si/t+T时刻的帧)中对应块的后向视差矢量,MVi+1′为当前块在视点方向的后向参考帧(Si+1/t时刻的帧)中对应块的后向运动矢量,在pDVt1′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的视差矢量作为该区域内的最佳视差矢量DVt1′,保存该最小率失真代价RDCostDDE1′;
第十六步:判断RDCostME1′是否小于RDCostME0′,RDCostDE1′是否小于RDCostDE0′,如果RDCostME1′小于RDCostME0′并且RDCostDE1′小于RDCostDE0′,则令DVt0′=DVt1′,MVi0′=MVi1′,RDCostME0′=RDCostME1′,RDCostDE0′=RDCostDE1′,跳转到第十四步;否则,将MVi0′,DVt0′,RDCostME0′,RDCostDE0′保存为当前块的后向运动和视差估计结果;
第十七步:比较后向运动矢量和后向视差矢量的率失真代价,选取率失真代价较小的作为后向搜索的最佳预测矢量,跳转到第二十四步;
第十八步:读入当前帧时间方向的前向参考帧(Si/t-T时刻的帧)和视点方向的后向参考帧(Si+1/t时刻的帧);
第十九步:将当前块在时间方向的前向参考帧(Si/t-T时刻的帧)中对应块的后向视差矢量DVt-T′设为当前块的后向视差矢量的初值;
第二十步:将当前块的后向视差矢量初值DVt+T′与当前块的相邻块的预测矢量以及零矢量进行比较,计算当前块和预测块的绝对误差和SAD,选取使SAD值最小的矢量作为当前块的后向视差矢量预测值pDVt0′,在pDVt0′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的矢量作为该区域内的最佳视差矢量DVt0′,保存该最小率失真代价RDCostDE0′;
第二十一步:由当前块Pi,t的位置和当前块的后向视差矢量DVt0′相加得到当前块在视点方向的后向参考帧(Si+1/t时刻的帧)中的预测块Pi+1,t,即,Pi+1,t=Pi,t+DVt0′,读取预测块Pi+1,t的前向运动矢量MVi+1,利用Relation描述的矢量关系,由pMVi1=DVt-T′+MVi+1-DVt0′得到一个新的当前块的前向运动矢量预测值pMVi1,其中,DVt-T′为当前块在时间方向的前向参考帧(Si/t-T时刻的帧)中的对应块的后向视差矢量,MVi+1为当前块在视点方向的后向参考帧(Si+1/t时刻的帧)中的对应块的前向运动矢量,在pMVi1附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳运动矢量匹配,选取该区域内使率失真代价最小的运动矢量作为最佳运动矢量MVi1;
第二十二步:由当前块Pi,t的位置和当前块的前向运动矢量MVi1相加得到当前块在时间方向前向参考帧(Si/t-T时刻的帧)中的预测块Pi,t-T,即,Pi,t-T=Pi,t+MVi1,读取预测块Pi,t-T的后向视差矢量DVt-T′,利用Relation描述的矢量关系,由pDVt1′DVt-T′+MVi+1-MVi1得到一个新的当前块的后向视差矢量预测值pDVt1′,其中,DVt-T ′为当前块在时间方向的前向参考帧(Si/t-T时刻的帧)中的对应块的后向视差矢量,MVi+1为当前块在视点方向的后向参考帧(Si+1/t时刻的帧)中的对应块的前向运动矢量,在pDVt1′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的视差矢量作为该区域内的最佳视差矢量DVt1′,保存该最小率失真代价RDCostDE1′;
第二十三步:判断RDCostDE1′是否小于RDCostDE0′,如果RDCostDE1′小于RDCostDE0′,则令DVt0′=DVt1′,RDCostDE0′=RDCostDE1′,跳转到第二十一步;否则,将DVt0′作为后向搜索的最佳预测矢量;
第二十四步:根据前向搜索和后向搜索得到的结果,从中选取使率失真代价最小的矢量作为当前块的最优预测矢量,保存当前块的最佳编码信息,当前块的运动和视差估计过程结束;
第二十五步:判断当前帧中是否还有未编码块,如果当前帧中还有未编码块,则跳转到第二步,开始编码当前块的下一块;如果当前帧中所有块都编码完毕,则判断当前视点中是否还有未编码帧,如果当前视点中还有未编码帧,则跳转到第一步,开始编码当前帧的下一帧;如果当前视点的所有帧都编码完毕,则对当前视点的编码过程结束。
为了检验本发明所提出的方法的性能,将本发明的方法与全搜索方法进行比较。实验条件及参数如表1所示。所有实验均在Intel(R)Core(TM)2Duo 2.39GHz CPU,1G内存的PC机上独立执行。
表1实验条件
不同算法的峰值信噪比、码率以及运动和视差估计时间如表2所示。由表2的结果可以看出,本发明方法和全搜索方法相比,峰值信噪比基本相当,变化范围在-0.01~-0.09dB之间;码率比特略有节省,变化在-14.20%~+0.60%之间,本发明方法的编码质量略优于全搜索方法;并且,本发明的方法极大地提高了编码效率,能节省约90%的运算时间。由于本发明方法只是针对非瞄定帧,对于瞄定帧仍然采用全搜索方法,因此,若去除瞄定帧的全搜索方法时间,本发明方法能节省90%以上的运算时间。三种不同序列的编码率失真性能比较曲线示意图分别如图8-图10所示,在相同的码率下,本发明方法平均信噪比稍优于全搜索方法,这说明本发明方法选取的预测矢量比中值矢量更有效。图11为不同算法的运算复杂度比较,从中可以清楚地看出,与全搜索方法相比,本发明方法极大地降低了编码复杂度。
表2本发明方法与全搜索方法比较
其中,
ΔPSNR=PSNR本发明方法-PSNR参考方法
机译: 运动矢量估计方法,多视点视频编码方法,多视点视频解码方法,运动矢量估计设备,多视点视频编码设备,多视点视频解码设备,运动矢量估计程序,多视点视频编码程序,和多视点视频解码程序
机译: 运动矢量估计方法,多视点视频编码方法,多视点视频解码方法,运动矢量估计设备,多视点视频编码设备,多视点视频解码设备,运动矢量估计程序,多视点视频编码程序,和多视点视频解码程序
机译: 多视点视频编码的运动矢量预测和视差矢量预测方法