崔金鹏,周 洋,殷海兵,黄晓峰,陆 宇
(杭州电子科技大学通信工程学院,浙江杭州 310018)
目前三维(Three Dimension,3D)视频日渐获得人们的关注与喜爱,为此国际标准化组织推出了高性能3D视频编码标准(3D High Efficiency Video Coding,3DHEVC)来对3D视频数据进行高效压缩.然而压缩后的3D数据包在无线信道下传输时易发生数据包丢失,进而造成解码出错[1].错误隐藏技术是利用码流帧间和帧内的冗余性来重建丢失帧信息,但由于传统二维视频编码主要基于IPPP预测结构,其相应的错误隐藏方法对于基于分层B帧预测结构(Hierarchical B Prediction,HBP)的3D视频适用性较差.
根据编码中有无深度信息,3D视频数据格式主要分为无深度信息的多视点视频与多视点视频加深度序列两类.针对多(或双)视点视频传输中的整帧丢失,文献[2,3]利用相邻视点运动矢量(Motion Vector,MV)的相似性来重建当前视点的丢失帧,文献[4]利用MV外推技术来恢复丢失帧.但文献[2,3]是基于传统IPPP预测结构,未面向HBP预测结构的多视点视频.文献[4]中的运动矢量外推技术更适用于IPPP编码结构,在双向分层编码的HBP结构下难取得良好的效果.针对多视点视频中部分宏块(Macro Block,MB)丢失的错误隐藏,主要方法有宏块分类修复法[5]、数据隐藏[6]、贝叶斯滤波法[7].但文献[5~7]只能解决单帧图像中的部分块出错并未面向整帧丢失的问题.此外,文献[2~7]都是基于H.264/AVC(Advanced Video Coding)编码标准压缩后的视频流进行错误隐藏,未针对目前流行的H.265/HEVC压缩视频流.
多视点视频加深度的错误隐藏除了利用视点内时空相关性与视点间相关性外,还可采用深度信息来提升重建质量.其中,深度序列的时域平滑度[8]、视点间两对应块间的深度值差异[9]以及重建块与周边块之间的深度差[10]等常被用于丢失块的MV和视差矢量(Disparity Vector,DV)恢复上.面向视频帧整帧丢失,Tai等[11]采用高精度运动估计和深度图信息外推来重建丢失帧.Khattak等[12]采用一致性模型来对中间视点整帧丢失进行错误隐藏.Lin等[13]利用深度差对参考像素进行加权来恢复丢失帧.此外,针对深度图出错问题,近来常用方法有基于模糊推理的自适应错误隐藏法[14]、结合轮廓曲线拟合的三步错误隐藏法[15]、采用像素聚类的空洞隐藏法[16]、绘制驱动的多模式隐藏法[17].但是,文献[8~16]是针对H.264/AVC标准压缩后的视频流进行错误隐藏,且大多数码流都是基于IPPP编码结构的,尚未针对基于HBP编码结构的3D-HEVC标准展开研究.文献[14~17]都是面向深度图丢失的隐藏算法,无法有效地重建丢失的彩色图.
当3D视频在传输中发生彩色图整帧丢失时,首先由于没有相邻块作为参考信息,无法利用基于空域的邻块信息来恢复丢失块,因此面向部分宏块丢失的错误隐藏算法不能直接应用于整帧丢失中;其次,如果依靠对应的深度图信息进行重建,由于彩色图整帧丢失不能准确地提取深度图与彩色图之间的相关性,导致其恢复效果不够理想;最后由于3D-HEVC编码标准在编码端采用双向分层预测的HBP结构,解码端的错误隐藏方法也需基于HBP结构来设计.
针对上述存在的问题,本文基于3D-HEVC编码标准,提出了一种结合立体视觉显著性的彩色图整帧丢失错误隐藏方法.不同于先前算法,本文算法是首个基于3D-HEVC编码标准的多视点视频加深度格式的3D视频彩色图整帧丢失错误隐藏算法;同时,结合了3D视频的视觉显著性,根据整帧丢失图像各编码单元的显著性等级不同进行分区错误隐藏.
首先提取丢失图像的分块显著性图,然后根据各丢失区域的视觉显著性等级不同采用不同的错误隐藏方法.图1所示为分块显著性图提取总体流程框图,先分别求出运动显著性图、深度显著图和深度边缘显著图,然后将运动显著图和深度显著图相互融合获取运动深度显著图,最后将块化后的运动深度显著图与块化后深度边缘显著图相互融合,获取最终的块化显著等级图.
图1 分块显著性图提取流程框图
运动显著性图能反映视频序列中物体的运动显著性[18].将相邻可用视点作为参考视点,在时域上获取当前丢失帧Fn的前向参考帧Fn,t-k和后向参考帧Fn,t+k,并在视点域上获取当前时刻的相邻视点参考帧Fn-1,t,求得丢失帧中像素p的运动显著性Sm(p)如下:
其中下标n表示视点位置,t表示时域位置,pn,t-k,pn,t+k和pn-1,t分别表示在Fn,t-k,Fn,t+k和Fn-1,t与p同位置的像素值.
通常来说,深度图中像素值大的前景区域对人眼产生的视觉刺激大,像素值小的背景区域产生的视觉刺激小.但深度像素值并不能直接决定物体的显著程度,有时距离相机较近的物体的显著程度不一定高,比如地面.物体的显著程度还与深度值变化快慢有关,图像中深度值变化大的区域一般是显著程度高的区域[19].
考虑到深度图只包含一路反映拍摄景物距离远近的灰度信息,而彩色图携带包含丰富纹理信息的Y/U/V三路通道的信息,深度图编码后的比特流要远小于彩色图的编码比特流,因此在无线传输中深度图发生数据包丢失的概率也低.当彩色图发生整帧丢失时,可假设其对应的深度图未丢失.深度图显著性求取分两步,先对深度图进行加权预处理:
其中,z是深度图中与p同位置的像素点,dz表示深度图中z点像素的深度值表示深度图中z点所在行的平均像素值,d'z表示处理后z点的深度值.
然后再结合深度图的深度值对比度来提取显著性,基于区域对比度[20]的像素点z的深度显著性Sd(z)计算公式如下:
其中,C(r)表示预处理后深度图中像素值为r的像素点出现频率,即C(r)=m/(W×H),m表示深度值为r的像素点个数,W、H分别为视频图像的宽度和高度.
物体的边缘区域是前景与背景的分界,其深度差较大,往往更受人眼的关注[21].提取深度边缘显著性是采用Sobel梯度算子来计算深度图各像素点的边缘梯度.设输入深度图为Id,将它分别与Sobel横向、纵向算子作卷积:
其中,Gx和Gy分别代表水平梯度值和垂直梯度值.深度图中每个像素点z的梯度幅值G(z)为
考虑到处于背景区域的物体边缘和深度值变化平缓的边缘并不显著,需要对各像素点的边缘梯度幅值进行阈值化处理.将边缘梯度幅值大于阈值t1的深度像素点所对应的像素值设为255,其余设为0,得到像素z处的边缘显著性值Se(z)为
其中,二值化阈值t1是综合6种不同测试序列的平均实验结果获得,在本文实验中t1值设定为120.
先将深度显著图与运动显著图相互融合得到运动深度显著性图,再将块化后的运动深度显著性图与块化后的深度边缘显著性图相融合得到最终显著性图.
目前融合算法主要有最大值融合和乘性融合两种方法.实验发现采用最大值融合后的显著性图中像素值大的像素点比较稀疏,这会导致块化过程中阈值选取存在误差,而乘性融合后的显著图的像素点十分密集,不易受阈值选取误差的影响,因此本算法采用乘性融合法.将运动显著性图中各像素值与深度显著性图中对应同位置像素值相乘,并做二值化处理(乘积大于阈值t2的像素值设为128,其余设为0),得到运动深度融合显著性图Smd,其融合后像素z处的显著性值为
对于运动深度融合显著性图Smd中每个尺寸为64×64的编码单元块(CTU),如果有超过t3个像素值为128的像素点,则将该CTU内全部像素点的像素值都设为128,得到块化后的显著性图SmdB.
同理,对深度边缘显著性图Se进行块化处理.对于Se中的各个CTU,如果有超过t3个像素值为255的像素点,则该CTU的像素值都设为255,得到块化SeB.在这里,阈值t2和t3是在3D-HEVC标准组织推荐的6种多视点测试序列上,通过实验结果比较后将t2和t3值分别设为50和10.
融合SmdB和SeB得到最终的块化显著性图SB:
然后将SB中像素值为255的区域设为高显著等级区域,像素值为0的区域设为低显著等级区域,像素值为128的区域设为中显著等级区域.各显著图计算结果见图2.
图2 各维显著性图与块化后的显著性图
图2(f)所示为最终显著性图,图中灰色区域是中显著等级区域,该区域没有显著物体的边缘,属于人眼较为关注区域,白色区域是人眼最关注的高显著等级区域,即深度边缘显著性图与融合显著性图重合的区域,剩下的黑色区域是人眼不关注的低显著等级区域.
低显著等级区域一般由静止块或背景块构成,可采用传统的时域像素拷贝法便能达到良好的重建效果,因此本算法选取当前视点后向参考帧的同位置像素来填补处于低显著等级区域的丢失块.
中等显著等级区域中的丢失块多为前景块或运动块.考虑到运动块的运动特征,本算法对均匀运动块和非均匀运动块,分别采用时域搜索像素法和视点间搜索像素法进行填补.先将丢失帧中每个尺寸为64×64的丢失块以树形编码结构的方式划分为4个32×32的子块,下文仅以一个丢失子块U为例进行说明.
3.2.1 时域搜索像素填补
如果丢失块U的运动是均匀的,那么对U设定一个时域搜索值,经过子像素精度搜索总能在当前视点前向参考帧和后向参考帧中找到同尺寸的匹配块Uf和Ub.通过计算Uf和Ub内像素的平均绝对差值的最小值来确定最优搜索值:
其中(x,y)表示丢失块内像素的坐标,xs和ys分别为水平和垂直方向的搜索值,通过实验设定xs和ys的范围为[-16,16],(xs0,ys0)为最优搜索值,N×N表示U的尺寸.
求得两块内像素的平均绝对差值的最小值为D,将D和运动阈值t4进行比较.若D<t4,则认为对应的块Uf和块Ub相似.其中,阈值t4取值由实验得到,当t4为3时获得的平均实验结果相对最优.
根据时域相关性,丢失块U与Ub和Uf也相似,因此丢失块U中的像素值可由两块像素的加权平均值填补:
3.2.2 视点间搜索像素填补
若求得的最小差值D≥t4,则搜索到的Ub与Uf不相似,说明丢失块U的运动是不均匀的.本算法利用视点间相关性在视点域搜索匹配块进行隐藏.图3所示为非均匀运动示意图,对Uf设定一个视点间搜索值df,在参考视点R的前向参考帧中搜索匹配块UR,f,同理对Ub设定搜索值db,在后向参考帧中寻找匹配块UR,b;然后根据相对最优的视点间搜索值(视差值)计算出丢失块U的视点间匹配块UR.
图3 非均匀运动示意图
由于平行排列的多视点相机主要是水平视差,只需在水平方向搜索,因此视点间搜索范围可适当扩大,df和db的取值范围可设为[-64,64].计算块Uf和块UR,f内像素值的平均绝对差值Df:
求得前向视点间最优搜索值df0和Df的最小值Df0,即:
同理,计算Ub与UR,b的像素值平均绝对差值Db:
记录最优后向搜索值db0和最小值Db0:
若Db0≥Df0,采用df0做视差补偿得到丢失块U的视点间匹配块UR,并用UR中的像素值填充丢失块U:
否则,采用db0作视差补偿得到匹配块UR,并填充丢失块U:
高显著等级区域是人眼最关注的前景物体或者运动物体的边缘区域,若单纯采用视点间搜素像素填补,当参考视点前后参考帧的搜索块与当前视点前后参考帧的搜索块相似度不高时,产生的误差会对最终重建帧的主观质量造成较大影响.因此本算法在视点间两块相似时,采用视点间搜索法进行重建;当视点间两块不相似时,进一步提出了一种新的MV选择方法进行运动补偿重建丢失块.
3.3.1 视点间搜索像素填补
若Df0和Db0都小于视点间块相似阈值t5时,则认为视点间两匹配块相似,否则两块不相似,其中t5的取值由实验比较获得,t5取值为2.当视点间匹配块Uf与UR,f相似,Ub与UR,b相似,那么块U与块UR也相似;则采用节3.2.2中的视点间搜索像素填补法重建U中的像素.
3.3.2 新型MV运动补偿
若视点间匹配块不相似,先计算丢失块U的视点间对应块URC的初始坐标:
其中x0、xR,f0、xR,b0和xR,0分别为块U、UR,f、UR,b和URC左上角像素的水平坐标.
令(xR,0,yR,0)为块URC的左上角像素坐标,而URC必隶属于参考视点当前帧中64×64(CTU大小)的编码单元块C.设块C左上角像素坐标为(xn,yn),获取C中16个4×4块(HEVC最小处理单元)的MV并构建候选运动矢量集,记为u1,u2,…,u16,如图4所示(蓝色区域表示块URC,灰色区域表示编码单元块C,标号1至16的小块为所选4×4块).将32×32大小的块URC划分为4个16×16的子块,记为块a,b,c和d.虽然存在yR,0=yn和yR,0=yn+32两种情况,但两种情况的处理方法相似,下面仅以yR,0=yn为例说明.
图4 URC与C关系示意图
首先,当xR,0=xn时,根据HEVC中运动矢量的选取方法,块a、b、c、d应分别采用2、4、10、12号块的运动矢量u2、u4、u10、u12进行重建;当xR,0=xn+32时,采取6、8、14、16号块中的运动矢量u6、u8、u14、u16进行重建.考虑到URC是通过估计得到,其位置会在块C中水平移动,还需分四种情况进行运动补偿:
(1)0<xR,0-xn<16:块a、b、c、d分别选用2、5、10、13号块的运动矢量u2、u5、u10、u13进行运动补偿.
(2)16≤xR,0-xn<32:块a、b、c、d分别选用4、7、12、15号块中的运动矢量u4、u7、u12、u15进行运动补偿.
(3)32≤xR,0-xn<48:块a、b、c、d分别选用6号、14号的运动矢量u6、u14和右相邻C块中1号、9号位置块的运动矢量u1、u9进行运动补偿.
(4)48≤xR,0-xn<64:块a、b、c、d分别选用8号、16号块中的运动矢量u8、u6,以及右相邻的C块中3号、11号块的运动矢量u3、u11进行补偿.
其中,运动补偿采用3D-HEVC中基于亚像素插值的运动补偿法,对URC的四个子块分别进行运动补偿后得到UR,并用UR中的像素值填补丢失块U.
为了客观评价算法性能,本文算法被嵌入至HTM16.1平台,测试数据集为Lovebird1、PoznanStreet、BookArrival、Newspaper、Kendo和Balloons这六种 不 同类型的MVD视频序列,其中PoznanStreet的分辨率为1920×1088 px,其余序列为1024×768 px.主机配置为:Intel Corei5-3407,3.20 GHz处理器,4.00 GB内存.实验环境设置如下:(1)各测试序列采用HBP预测结构进行编码,视频编码组(Group Of Picture,GOP)长度设置为8;(2)量化参数(Quantization Parameter,QP)设置为25、28和30;编码帧率为25 f/s,每个序列共测试了97帧;(3)实验对比采用逐帧比较的方法.在实验中,考虑到I帧是每个GOP的起始帧,也是视频编码中的关键帧,在传输过程中采用高等级不等错保护,因此假设I帧不出错,非关键帧发生整帧丢失.
基于HBP编码结构的3D-HEVC视频流整帧丢失错误隐藏算法尚未见报道,本文选用了四种典型的3D视频错误隐藏算法进行性能比较.(1)Jeon[22]:将Jeon等提出的基于HEVC标准的整帧丢失错误隐藏算法扩展到多视点视频错误隐藏中,把参考视点的MV映射到当前视点图像块上;(2)Song[23]:将Song等提出的基于H.264标准的多视点错误隐藏方法延伸到HEVC标准下的整帧丢失错误隐藏中,设计时域搜索、视点间搜索、多假设错误隐藏三种方法,最后根据模式选择最优准则自适应恢复;(3)Liu[24]:一种结合3D-warping和运动矢量共享的整帧丢失错误隐藏方法,将该算法从IPPP编码结构移植到HBP编码结构;(4)Lin[13]:一种结合深度差异信息的彩色帧整帧丢失错误隐藏算法,将它移植到3D-HEVC平台上进行比较.
本文采用PSNR和SSIM作为各算法重建图像客观质量的评估标准.表1统计了QP值分别为25、28和30时,对各测试序列使用不同的错误隐藏算法后重建B帧图像的平均PSNR值.图5所示为不同算法对PoznanStreet第4视点序列重建PSNR值的逐帧比较折线图.
表1 经不同错误隐藏方法后的PSNR值
图5 PoznanStreet第4视点某GOP中间帧丢失逐帧折线图
从表1和图5可以看出,本文算法对不同序列丢失帧的重建效果都有明显提升:在QP=25时,综合6个测试序列,本文算法与Jeon算法、Song算法、Liu算法和Lin算法相比,平均PSNR值能分别提高1.41 dB、2.37 dB、0.99 dB和1.57 dB.对于运动较为剧烈的多视点序列,如PoznanStreet,本文方法相比以上四种算法平均PSNR值 能 分 别 提 升2.26 dB、3.63 dB、1.77 dB和2.67 dB;对于运动不剧烈的Balloons和Newspaper序列,本文方法相比Jeon算法、Song算法、Liu算法和Lin算法,平均PSNR值能分别提高0.29和0.60 dB、0.66和1.04 dB、0.21和0.28 dB、0.43和0.63 dB.
在QP=28时,综合6个测试序列,本文算法与Jeon算法、Song算法、Liu算法和Lin算法相比,平均PSNR值能分别提高1.32 dB、2.23 dB、0.95 dB和1.49 dB.在QP=30时,综合6个测试序列,本文算法与Jeon算法、Song算法、Liu算法和Lin算法相比,平均PSNR值能分别提高1.26 dB、2.08 dB、0.89 dB和1.41 dB.
同时,重建SSIM值也有着较为显著的提升(如表2所示).综合6个测试序列,在QP=25时,本文算法与Jeon算法、Song算法、Liu算法和Lin算法相比,平均SSIM值分别能提高0.0075、0.0122、0.0053和0.0080.在QP=28时,本文算法与上述四种算法相比,平均SSIM值能分别提高0.0071、0.0118、0.0052和0.0077.在QP=30时,本文算法与Jeon算法、Song算法、Liu算法和Lin算法相比,平均SSIM值分别提高0.0068、0.0112、0.0049和0.0073.
表2 经不同错误隐藏方法后的SSIM值
本文算法相比对比算法重建效果提升明显.这是由于Jeon算法是将参考视点当前帧信息映射到当前视点丢失帧中进行重建,但在HBP编码结构下运动物体的运动信息估计不够准确,映射关系会存在误差.Song算法由于在HBP编码结构下视频的播放顺序与解码顺序不同,时域上前后参考帧有时相隔较远或在视点域上搜索误差过大,导致难以搜索到匹配的像素值,其重建效果也不理想.Liu所提算法采用3D-warping与运动矢量共享相结合的方法,但有时通过共享获取的运动矢量并不准确,其恢复结果存在一定的失真.Lin算法是面向IPPP预测结构的,由于新标准下的HBP编码结构是采用分层双向预测的,连续帧的运动矢量并不相似,因此在HBP编码结构下不能取得良好的效果.本文算法相比于Jeon算法,它认为运动物体及其边缘具有高视觉显著性,更加注重运动物体边缘的恢复;相比于Song算法,本算法优化了时域和视点域的像素搜索,并针对两种搜索方法都不适用的情况,提出了新的MV补偿方法;相比于Liu算法和Lin算法,本算法不使用3D-warping也获得了良好的重建质量.
在差错传播方面上,本算法的性能也优于其他三种对比算法.图6所示为GOP中间帧丢失的差错传播图,Liu算法基于3D-warping,参考帧的误差对整个GOP的影响相对较小.本文算法不仅利用了参考视点当前时刻的视频帧,而且用到了参考视点前后向参考帧,重建图像质量最佳,因此整个GOP受到的差错影响最小.
图6 PoznanStreet第4视点GOP中间帧丢失差错传播图
图7所示PoznanStreet序列第4视点第11帧整帧丢失时通过不同错误隐藏算法得到的重建图及其部分区域的细节放大图.Jeon算法重建结果及其区域放大如图7(b)和7(g)所示,对于时域跨度较大的运动物体,时域参考帧中视点间映射关系不一定是当前帧的视点映射关系,某些运动区域会被映射入误匹配信息,导致部分重建区域严重块失真.Song算法是通过前后参考帧的匹配像素SAD值搜索重建像素,但时域搜索的准确性受到丢失帧与参考帧的参考距离约束,跨度越大搜索所得的像素值越不准确,导致重建效果不理想,如图7(c)和7(h)所示.Liu算法对车尾后的背景区域恢复效果较差,这是由于车尾部分是3D-warping产生的空洞区域,采用MV共享法进行重建,MV获取不准确导致车尾后的背景区域被车尾区域填补.Lin算法是基于IPPP结构实现的,移植到HBP结构中后重建的丢失块运动矢量并不准确,导致有些运动区域重建模糊.本文算法车尾和轮胎的边缘区采用视点像素搜索以及基于视点域的MV补偿,重建主观质量优于其他四种算法,同时图像其它区域也取得了较佳的重建效果,如图7(f)和7(k)所示.
图7 PoznanStreet视点4第11帧各算法重建结果及其放大图
图8表示当Newspaper序列发生整帧丢失时采用不同算法的重建图.该帧运动状态较为静止,主要比较人手与杯子形成的区域.本文算法重建效果优于其他算法,如图8(b)~(f)所示,Jeon算法中手与杯子采用了相邻块的运动矢量从而造成了手指的部分重叠,Song算法中杯子附近人衣处的像素采用了杯子像素与衣服像素的加权值,Liu算法由于遮挡关系在warping过程中会产生细微的伪影,其手与杯子部分比较模糊,Lin算法由于其运动矢量估计并不准确,其移动的手和杯子部分比较模糊.
图8 Newspaper第4视点第33帧各算法重建效果图
本文通过各测试序列在不同算法下的平均解码时间来评价各算法的复杂度,计算方法如下:
其中N为实验一共加入的丢失帧数目,Ti表示解码第i个丢失帧所需要的时间.测试结果如表3所示,Liu算法和Lin算法都使用了3D-warping,绘制时间比普通解码时间长;Jeon算法对每个图像块都采取视点映射方法填补,因此相比Song算法,Jeon算法的解码时间稍长;本文算法与Song的解码时间相近,但是综合考虑重建图像的主观质量与客观质量,本文算法的性能是最优的.
表3 各算法重建单帧平均所需的解码时间 s
针对MVD视频流在传输中发生彩色图整帧丢失的问题,提出了一种基于3D-HEVC编码标准的视频整帧丢失错误隐藏算法.该算法在隐藏过程中结合了人类视觉的感知特性,将丢失帧各区域划分为不同的显著等级,进而提出相适应的隐藏方法进行各区域重建,实验结果表明本文算法取得了良好的性能,可应用于基于3D-HEVC编码标准的MVD视频流错误隐藏中.