[0005] 本发明的目的是提供一种基于视差矢量外推的立体视频右视点B帧错误隐藏方法。
[0006] 本发明方法首先对立体视频右视点出错帧的同时刻的邻视点帧建立视差矢量场。所述的邻视点为左视点。根据左视点帧中块的类型不同,视差矢量的估计有两种情况:对于帧间编码块,根据帧中的运动预测信息在参考帧中找到帧间编码块对应的运动参考块,并根据运动参考块和搜索帧中的像素信息估计视差矢量;对于帧内编码块,根据周边相邻的帧间编码块的像素信息,计算像素信息最为相近的帧间编码块的视差矢量作为当前帧内编码块的视差矢量,块的大小为16×16像素。
[0007] 对出错帧对应左视点帧中的各个16×16大小的编码块建立视差矢量场,具体方法是:
[0008] (1).统计出错帧中未丢失的视点间预测块,出错帧的前向、后向参考帧中的视点间预测块的数目,统计这些视点间预测块的视差矢量的模的最大值Xmax和全局视差矢量Dvglobal;
[0009]
[0010] num为出错帧中未丢失的视点间预测块和出错帧的前向、后向参考帧中的视点间预测块的个数之和,Dvi表示出错帧中未丢失的各个视点间预测块以及出错帧的前向、后向参考帧中各视点间预测块的视差矢量,k=1,2,…,num。
[0011] (2).判断出错帧对应左视点帧中的块是否为帧间编码块:在左视点帧中,根据解码块的编码信息判断当前块是否属于帧间编码块;如果当前块属于帧间编码块,则对帧间编码块进行视差矢量估计;如果当前块属于帧内编码块,则等到处理完帧间编码块后,再对帧内编码块进行视差矢量估计;
[0012] (3).处理出错帧对应左视点帧中的帧间编码块:根据左视点帧中的帧间编码块的编码信息,将帧间编码块分为两类:单向编码块和双向编码块,所述的单向编码块为单向参考类型的帧间编码块,所述的双向编码块为双向参考类型的帧间编码块;单向编码块只参考前向参考帧或者后向参考帧中的一种,而双向编码块则会同时参考前向参考帧与后向参考帧;对两种不同类型的帧间编码块,分别采用如下处理方式:
[0013] 对于单向编码块:首先根据当前块的运动矢量大小,找到当前块在参考帧(前向参考帧或者后向参考帧)中的参考块,并在右视点中找到与参考块所属帧属于同一时刻的帧,即搜索帧;在搜索帧中找到与参考块的坐标相同的位置,即参考块在搜索帧中的绝对位置;以搜索帧中的参考块绝对位置为起点,在它的水平方向上搜索与参考块的像素值最接近的块,即最佳搜索块,搜索范围设定为(0,Xmax);将最佳搜索块所处位置与参考块绝对位置二者之间的距离作为左视点帧所求的16×16单向编码块的视差矢量,即:
[0014]
[0015] dvx为估计得到的最佳视差矢量,Pixelview0为参考帧在帧中某点的像素值,Pixelview1为搜索帧在帧中某点的像素值,(x0,y0)为参考块左上角像素点的坐标位置。
[0016] 对于双向编码块:首先根据帧间编码块的运动信息,分别找到帧间编码块在前向和后向参考帧中的前向参考块和后向参考块;
[0017] 对于前向参考块,首先在右视点中找到与帧间编码块的前向参考帧属于同一时刻的帧,即前向搜索帧;在前向搜索帧中找到前向参考块的绝对位置,以绝对位置为起点,在绝对位置的水平方向上搜索与前向参考块像素值最接近的块,即前向最佳搜索块,搜索范围与搜索方式与处理单向参考类型的帧间匹配块一致,记录前向最佳搜索块所处位置与前向参考块绝对位置二者之间的距离,即双向编码块在前向预测方向上的最佳视差矢量dvxpre;
[0018] 对于后向匹配块,首先在右视点中找到与帧间编码块的后向参考帧属于同一时刻的帧,即后向搜索帧;在后向搜索帧中找到后向参考块的绝对位置,以绝对位置为起点,在绝对位置的水平方向上搜索与后向参考块像素值最接近的块,即后向最佳搜索块,搜索范围与搜索方式与处理单向参考类型的帧间匹配块一致,记录后向最佳搜索块所处位置与后向参考块绝对位置二者之间的距离,即双向编码块在后向预测方向上的最佳视差矢量dvxnext;
[0019] 对记录下来的两个方向上的最佳视差矢量dvxpre和dvxnext进行加权平均,得到双向编码块的最佳估计视差矢量
[0020] (4).处理右视点出错帧的对应左视点帧中的帧内编码块:
[0021] 首先在帧内编码块的相邻块中搜索与帧内编码块像素值相差最小的块;
[0022] 如果此块与帧内编码块的像素值相差小于阈值Tpixel,则使用此块的视差矢量作为帧内编码块的视差矢量;
[0023] 如果此块与帧内编码块的像素值相差大于阈值Tpixel,则使用全局视差矢量Dvglobal作为帧内编码块的视差矢量;
[0024] Tpixel为像素阈值,用于判断帧内编码块与其相邻的帧间编码块的平均像素差是否满足要求,Tpixel=6;
[0025] 当视差矢量场建立后,根据所得到的各编码块的视差矢量信息,在出错帧的对应左视点帧和右视点出错帧之间进行视差矢量外推,具体方法如下:
[0026] ①.遍历出错帧的对应左视点帧中的16x16块,对每个块根据其坐标和其视差矢量,外推得到该块在出错帧中的位置:
[0027] (x,y)为外推至出错帧中的左上角坐标位置,x0′与y0′为外推块在左视点帧中的左上角坐标位置,DVx与DVy分别为外推块的视差矢量的水平分量与垂直分量;
[0028] ②.统计左视点当前块外推至丢失块位置后,外推块与丢失块所占区域的重叠面积;
[0029] ③.选取重叠面积最大的外推块作为丢失块的匹配块,并将匹配块的视差矢量取反后赋予给丢失块。
[0030] 完成矢量外推后,出错帧中的大部分丢失块均有外推块与其重叠,但有部分块因在估计视差矢量时不够精确,将没有外推块与其重叠,没有外推块与其重叠的丢失块为空洞块。此时要对这些空洞块进行视差矢量获取,在空洞块与左视点帧中的块间建立联系。
[0031] 空洞块的视差矢量获取方法如下:
[0032] 根据空洞块左右侧的块的分布,将空洞块分为三种情况:
[0033] a.空洞块左右侧均为外推块;
[0034] b.空洞块左右侧只有一侧为外推块,另一侧为丢失块或未丢失块;
[0035] c.空洞块左右侧无外推块;
[0036] A.对于情况a:首先计算空洞块左右两侧外推块的视差矢量差,设置阈值TDv用于判断左侧块的视差矢量的模与右侧块的视差矢量的模的差值大小,设TDv=16;当视差矢量差小于阈值TDv,则对两个视差矢量取均值作为空洞块的视差矢量;否则,根据空洞块左右两侧块的编码参考模式进行插值,插值过程如下:
[0037] 如果空洞块左右两侧块均为双向编码块或均为单向编码块,则比较对应参考模式下的运动矢量差,并设置阈值TMv用于判断相同参考模式下,左侧块的运动矢量的模与右侧块的运动矢量的模的差值大小,设TMv=16;当运动矢量差小于阈值TMv,则使用空洞块左右两侧块中视差矢量的模较小的视差矢量作为空洞块的视差矢量;如果运动矢量差大于阈值TMv,则进行下一步基于像素值的方式,即比较空洞块左右两侧块的像素值。
[0038] 如果空洞块左右两侧块参考模式不同或运动矢量差大于阈值TMv,比较空洞块左右两侧块的像素值。当空洞块左右两侧块的像素差值小于像素阈值Tpixel,设Tpixel=6,则使用空洞块左右两侧块中视差矢量的模较小的视差矢量作为空洞块的视差矢量;否则,则使用全局视差矢量Dvglobal作为当前空洞块的视差矢量;
[0039] B.对于情况b:在空洞块的非外推块这一侧的上方或下方寻找外推块;如果存在外推块,则使用非外推块侧上方或下方所找到的外推块和空洞块另一侧的外推块按照情况a进行处理;如果空洞块的非外推块侧的上下方均不存在外推块,则使用全局视差矢量Dvglobal作为空洞块的视差矢量;
[0040] C.对于情况c:在空洞块的左右两侧的上方或下方寻找外推块,如果空洞块的左右两侧的上方或下方均存在外推块,则按照情况a进行处理;
[0041] 如果空洞块的左右两侧只有一侧在上方或下方寻找的到外推块,则使用此块的视差矢量作为空洞块的视差矢量;
[0042] 如果空洞块的左右两侧的上方或下方均不存在外推块,则使用全局视差矢量Dvglobal作为空洞块的视差矢量。
[0043] 空洞块获取到对应的视差矢量后,右视点出错帧中的丢失块均能在出错帧的对应左视点帧中找到对应的匹配块,对丢失块进行错误隐藏,具体过程如下:
[0044] 首先根据丢失块的视差矢量找到其位于左视点帧中的匹配块,隐藏丢失块的方式根据匹配块的不同分为两种方式:右视点运动补偿和匹配块像素值拷贝;如果匹配块为帧间编码块,则使用右视点运动补偿方式来隐藏丢失块,具体方法是:首先拷贝匹配块的运动预测信息至丢失块,匹配块的运动预测信息包括参考帧索引和运动矢量信息,运动预测信息拷贝至丢失块后,丢失块首先根据匹配块的参考帧索引定位到右视点中参考帧所处的位置,丢失块再根据所拷贝的运动矢量信息,找到丢失块在右视点参考帧中所对应的最佳参考块的位置,寻找最佳匹配块的方法为: (x′,y′)为最佳参考块在右视点参考帧中的左上角坐标位置,(x0″,y0″)为丢失块在出错帧中的左上角坐标位置,MVx和MVy分别为丢失块拷贝的运动矢量的水平分量与垂直分量;在找到最佳参考块的位置后,将最佳参考块的像素值拷贝至丢失块中,最佳参考块的像素值拷贝方式如下:
[0045] Pixellost(x0″+i,y0″+j)=Pixelref(x′+i,y′+j),i,j=0...15;
[0046] Pixellost为丢失块中某点的像素值,Pixelref为最佳参考块中某点的像素值;最佳参考块的像素值拷贝完成后,完成对丢失块的右视点运动补偿。
[0047] 如果匹配块为帧内编码块,则使用匹配块像素值拷贝来隐藏丢失块;首先根据丢失块的视差矢量,找到丢失块位于左视点帧中的匹配块位置,在找到匹配块位置后,将匹配块的像素值拷贝至丢失块中,匹配块的像素值拷贝方式如下:
[0048] Pixellost(x0″+i,y0″+j)=Pixelmatch(x″+i,y″+j),i,j=0...15;
[0049] Pixelmatch为匹配块中某点的像素值,(x″,y″)为匹配块在出错帧左视点帧中的左上角坐标位置;像素值拷贝完成后,即完成对丢失块的匹配块像素值拷贝。
[0050] 本发明方法针对立体视频中右视点的B帧丢包问题提出了一种基于视差矢量外推的错误隐藏方法。本算法由四部分构成:在邻视点帧中建立视差矢量场、视差矢量外推、空洞块视差矢量获取、隐藏丢失块。其中,在邻视点帧中建立视差矢量场的过程中,考虑了邻视点帧中块的参考模式不同的问题,对于帧间编码块与帧内编码块,结合了空域信息和时域信息对不同参考模式下的块进行了不同的处理。在视差矢量外推的过程中,利用了立体视频的拍摄特性,解决了传统的运动矢量外推算法在HBP编码结构下适用性差的问题。在空洞块运动矢量获取的过程中,根据空洞块的分布情况分为了三种模式进行处理,相比于传统的运动矢量外推算法中对空洞块仅仅使用零矢量拷贝的方式相比,本算法中的空洞块视差矢量获取的过程结合了视差矢量,运动矢量和像素值三种信息,处理方式更为精细。在隐藏丢失块的过程中,对帧间编码块与帧内编码块提出了两种不同的隐藏方式,与传统的运动矢量外推算法中仅仅使用拷贝的方式相比,所提算法在边界上的处理更为连续平滑。