本发明属于图像处理技术领域,涉及一种面向立体视频的频域视差相干水印方法。
背景技术:
自2009年3d电影《阿凡达》上映以来,立体视频技术受到了越来越多的关注,并被应用到了越来越多的领域。然而,立体数字视频的高经济价值引来盗版者的觊觎。从而使得立体数字视频的版权保护成为一个亟待解决的问题。数字水印是信息安全中内容安全分支的一个重要研究方向,是实现防伪溯源、保护数字产品版权的有效方法。本发明属于鲁棒数字隐水印和盲水印范畴。隐水印利用人视觉系统的特点和载体数字内容的冗余,通过特定的算法将水印信息嵌入片源载体,不影响嵌入水印后的载体数据的商业价值。相比非盲水印,盲水印在提取水印的过程中,不需要除待测试载体以外的其他辅助信息(主要是指原始无水印片源),因此应用更加方便。
立体视频的模式主要包括双目rgb视频,以及dibr(depthimagebasedrendering)类立体视频。前者存储左右两路视频数据,数据量大,在线下影院中用的较多。后者仅仅存储单路正视图和其深度图,可随时采用dibr技术生成其他视角的图像,从而为观察者提供双路或多视点观察的立体视频数据。近年来出现的自由视点电视(freeviewpointtelevision,简称ftv)也是基于dibr绘制。该技术允许用户在观看视频的过程中动态地选择观看视频的视点,从而带来立体感和沉浸感。dibr立体视频数据量小、可压缩程度高,被广泛用于因特网上。相比双目rgb视频,面向dibr视频的数字水印技术除不可见性和抵抗视频压缩等攻击的要求外,还需要应对dibr视图合成攻击:即在某个视点的单路视频中嵌入水印后,在dibr生成的新的视点数据中依旧能够提取出水印。由于两种数据可以互相转化,面向dibr视图的数字水印技术也可以应用在双目立体视频中。
现有针对立体视频的数字水印技术有多种。但到目前为止,已有的数字水印算法在处理上述不可见性和鲁棒性方面尚有许多局限。例如,张诗阳等人于2016年提交的专利申请(申请号:201610563291.4)“面向3d高清数字视频的鲁棒隐水印嵌入与提取方法”,借助视频帧间的运动和立体视频视差线索,充分利用人类视觉系统(humanvisionsystem,下简称hvs)对于图像视频不同区域视觉敏感度的差异,调整水印信息在视频中不同帧不同区域的嵌入强度,从而增强水印的不可见性和鲁棒性。此方法在双目立体视频中较为有效,难以应对dibr攻击。lee等人于2012年在proceedingsofspie-mediawatermarking,security,andforensics上发表的“stereoscopicwatermarkingbyhorizontalnoisemeanshifting”,将水印嵌入不同视图之间中的不变域中。在检测过程中,先将测试视频帧映射到不变域中再进行水印的检测。该方法可嵌入水印的容量较小且难以抵抗视频压缩等攻击。lin等人于2011年在ieeetransactionsonbroadcasting发表的“adigitalblindwatermarkingfordepth-image-basedrendering3dimages”。该方法依据左右视点和中间视点之间的对应关系预变换水印,并将变换后的水印嵌入中间视点。该方法对于视点关系已知的情况下能够有效抵抗dibr攻击,但在自由视点立体图像中难以奏效,且限于图像而非视频数据。burini等人于2014年在proceedingsofspie-theinternationalsocietyforopticalengineering上发表的“blinddetectionfordisparity-coherentstereovideowatermarking”利用视差和水印之间的相关性:嵌入到同一个三维点中的水印信息在dibr视图生成的过程中是不会变化的,只是像素点在不同的视图中发生了平移(视差),该点所嵌入的水印也会随之出现在平移后的位置,采用视差相干水印算法,成功应对了dibr视图生成过程对水印信息的影响。然而,该算法将水印嵌入在空间域中,应对视频压缩的鲁棒性较差。
技术实现要素:
鉴于目前立体视频水印算法方面的局限性,本发明提出一种面向立体视频的频域视差相干水印方法,能够保证嵌入后水印的不可见性,且有更好的抵抗h.264视频压缩和dibr攻击的鲁棒性。
为了实现上述目标,本发明采用以下的技术方案:
一种面向立体视频的频域视差相干水印方法,包括以下步骤:
步骤一、选择水印嵌入位置
将水印嵌入在视频帧亮度通道进行4*4dct变换后的dc分量中;
步骤二、水印生成
根据载体视频的尺寸(宽度为w,高度为h)和待嵌入的版权信息生成合适的水印,通过抽样生成取值分布符合标准正态分布的、w/4*h/4个数值,组成一个初始水印信息块,然后选择采用版权信息作为密钥对其进行置乱操作得到最终水印;
步骤三,水印嵌入
通过调制dct系数将水印嵌入载体视频中,给定一个宽度为w,高度为h的视频帧f,对其进行分块和dct变换后,每一个水印值嵌入一个dct块的dc系数中,根据dct变换的原理,dc系数实质上等于对应的原图中4*4块的像素亮度值的平均值,所以,在dct域对于dc系数的修改,可以等效地视为直接对空域数据进行如下修改:
fw(x,y)=f(x,y)+αw(x,y)(1)
其中,w是将水印块根据每个值拷贝4*4份的方式放大得到的、与视频帧尺寸一致的水印图像,(x,y)是像素坐标,fw为嵌入水印后的视频帧,α>0,是决定水印全局嵌入强度的参数,
由此便获得了嵌入水印的视频帧,并将这些视频帧重新编码即得到带有水印的视频;
步骤四、待检验水印的视频帧选取
获取待检测视频后首先要对视频进行解码,解码后会获取三个类型的视频帧:i帧、p帧和b帧,所述i帧是只使用帧内预测的帧,而p帧和b帧则使用了帧间预测;
步骤五,水印检测
采用盲水印算法,单纯给定待检测视频帧,即可提取水印,设左右视图,并在左视图中嵌入水印,为了提取左视图中的水印,依据定义检测子ρ如下:
其中,∈是一个代表待检验视频帧中是否包含水印的布尔值,w,h是视频帧的宽、高,当视频帧中不含有水印时,可以预测计算结果趋近于零;当视频帧中包含水印时,检测子的运算结果约为一个与嵌入水印强度α成正比的非零值,之后可以通过合理地设置阈值判断该视频帧是否被嵌入了水印;
对于右视图来说,记ws(x,y)=w(x+s,y)为水平偏移量为s的水印,
直接将检测子ρ应用于右视图时会得出如下结果:
其中,d0是视差值为零的像素占整个视图的比例。
作为优选,步骤二中,将水印嵌入在视频帧的某一通道进行4*4分块并dct变换后的频域中的,每一个4*4dct块中嵌入一个整型水印位,所以水印的宽和高应该恰好分别是视频宽、高的各1/4。
作为优选,步骤五中,针对于对视图合成的情况,设左右视图,左视图嵌入原水印,右视图嵌入变换后的视差相干水印,以下通过右图的水印提取说明方案,式(6)中检测子成功地获取了视差恰好为零部分的水印能量,因此也可以用同样的方式收集视差值恰好为s的水印能量,
其中,ds是视差值恰好等于s的像素占整个帧的比例,对于每一个可能的s值均计算一次检测子的值可得到响应值向量
获得了响应值向量ρ后,需要对其进行标量化,以便通过将结果与阈值对比判断视频是否被嵌入水印,考虑如下三种标量化的方式:
ρmax=maxsρ[s](8)
ρsum=∑sρ[s](9)
ρthr=∑|ρ[s]|>γρ[s](10)
本发明方法在水印嵌入部分,生成取值分布符合标准正态分布的水印信息块(其宽、高为视频帧宽、高的1/4),并以版权信息作为密钥对其进行约瑟夫置乱。规定水印的取值分布符合标准正态分布分布是为了保证水印在检测阶段可以实现盲检测。然后将待嵌入水印的视频解码为连续的序列帧,对每一个帧进行4*4的dct变换。之后将水印信息重复地嵌入每一个序列帧中。最后重新将序列帧编码为视频。在水印检测部分,给定一个待检测视频(可能是dibr生成的新视图),提取其中的i帧(i帧在h.264中仅仅执行帧内预测),通过统计每个i帧在每个视差上的水印能量,确定水印信息。整个水印检测过程只要待检测视频与目标水印对比即可,不需要其它任何辅助信息,即检测过程是全盲的。
与现有技术相比,本发明具有以下优点:本发明综合考虑了h.264编码高清数字影像的数据源特点和立体视频特有的视差等特性,融合dct域水印嵌入和视差相干水印嵌入策略,实现立体视频的水印嵌入与提取。相比现有方法,本发明所述方法能够保证嵌入后水印的不可见性,且有更好的抵抗h.264视频压缩和dibr攻击的鲁棒性。
附图说明
图1为本发明方法的流程图。
具体实施方式
下面结合附图和具体实施方式对本发明做进一步说明。
本发明的流程如图1所示,具体包括如下步骤:
步骤一,水印嵌入位置选择。
本算法将水印嵌入在视频帧亮度通道进行4*4dct变换后的dc(直流)分量中。鉴于baudry等人于2014年在proceedingsofspie-theinternationalsocietyforopticalengineering上发表的“blinddetectionfordisparity-coherentstereovideowatermarking”利用视差和水印之间的相关性,能够很好地应对视图合成问题,我们也基于这一原理设计水印算法(在水印提取过程中有更明确的体现)。不同之处在于,为了更好地应对视频压缩攻击,考虑了h.264的编码特性。h.264视频编码标准,其中一个重要的步骤便是4*4的dct变换。因此,为了同时应对视频编码和视图生成问题,相h.264视频编码过程那样,将视频帧切分成多个4*4的小块,然后将每个小块转换到dct频域中,选择其中不易被压缩过程影响的直流(dc)分量的系数进行信息隐藏。
考虑到盗版者可能会截取视频的片段而非整个视频,因此,对整个视频进行上述嵌入操作。h.264中预测帧有三个类型:i(intra-prediction)帧、p(prediction)帧和b(bi-prediction)帧。其中i帧只使用帧内预测而另外两种使用帧间预测。虽然在后续检测水印时通常只选取视频的i帧进行检测。但是,为了避免新的视频编码过程破坏原i帧水印,建议不仅选择i帧进行嵌入,而是对每一帧都嵌入同样的水印。
步骤二,水印生成。
首先,根据载体视频的尺寸和待嵌入的版权信息生成合适的水印。由于所提出算法将水印嵌入在视频帧的某一通道(本发明实验以亮度通道为例)进行4*4分块并dct变换后的频域中的,每一个4*4dct块中嵌入一个整型水印位,所以水印的宽和高应该恰好分别是视频宽、高的各1/4。例如,宽度为w,高度为h(基于h.264编码标准视频的分辨率宽和高均可被4整除)的一个视频帧,其所需水印块信息为w/4*h/4。
之后,通过抽样生成取值分布符合标准正态分布的、w/4*h/4个数值,组成一个初始水印信息块。在此基础上,可选择采用版权信息作为密钥对其进行置乱操作(本发明实验以约瑟夫置乱为例)得到最终水印。规定水印的取值分布符合标准正态分布分布是为了保证水印在检测阶段可以实现盲检测,具体原因将在水印检测部分介绍。而置乱则是可以实现水印与版权信息的直接关联,当然也可将非置乱的信息块作为嵌入的水印信息。
步骤三,水印嵌入。
此步骤中,通过调制dct系数将水印嵌入载体视频中。给定一个宽度为w,高度为h的视频帧f,对其进行分块和dct变换后,每一个水印值嵌入一个dct块的dc系数中。根据dct变换的原理,dc系数实质上等于对应的原图中4*4块的像素亮度值的平均值。所以,在dct域对于dc系数的修改,可以等效地视为直接对空域数据进行如下修改:
fw(x,y)=f(x,y)+αw(x,y)(1)
其中,w是本发明将水印块根据每个值拷贝4*4份的方式放大得到的、与视频帧尺寸一致的水印图像。(x,y)是像素坐标。fw为嵌入水印后的视频帧。α>0,是决定水印全局嵌入强度的参数。由此便获得了嵌入水印的视频帧,并将这些视频帧重新编码即得到带有水印的视频。
如果待保护视频拥有多个视图,则需要在不同视图中嵌入视差相干的水印。这是因为如果只对部分视图嵌入水印,例如,仅对双目立体视频中的左视图嵌入水印,则有可能发生盗版者获取无水印的右视图并根据这个右视图生成完整的无水印视频,导致版权保护丧失意义。另一方面,如果在两个视图中嵌入不相干的水印,则可能面临盗版者获取视频后利用左右两个视图生成新视图,而这些新的视图中的水印由于不相干而互相抵消,无法检测。我们采用baudry等人发表的论文中的方法进行视差相干水印的嵌入。以左右两视图为例,在左视图中按公式(1)嵌入水印,即:
其中,w是将水印块根据每个值拷贝4*4份的方式放大得到的、与视频帧尺寸一致的水印图像。α为水印嵌入强度。fl是未嵌入水印的左视图,
则对于右视图来说,嵌入时依据
其中,fr是未嵌入水印的右视图,
步骤四,待检验水印的视频帧选取。
获取待检测视频后首先要对视频进行解码,解码后会获取三个类型的视频帧:i帧、p帧和b帧。如前所述,i帧是只使用帧内预测的帧,而p帧和b帧则使用了帧间预测。因此,i帧对视频中原始数据的保留度最高。因此判断一个视频是否被嵌入过水印只需要在待检测视频中的i帧中找到水印信息即可。在实际应用中,为了提高准确性可以选取多个i帧提取,参考统计结果进行判断。
步骤五,水印检测。
本算法为盲水印算法,单纯给定待检测视频帧,即可提取水印。以下以左右视图,并在左视图中嵌入水印为例。为了提取左视图中的水印,依据定义检测子ρ如下:
其中∈是一个代表待检验视频帧中是否包含水印的布尔值,α是嵌入强度,(x,y)是像素坐标,w,h是视频帧的宽、高。fl表达左视图图像,w如前所述为放大后的水印图像。当视频帧中不含有水印时,可以预测计算结果趋近于零;当视频帧中包含水印时,检测子的运算结果约为一个与嵌入水印强度成正比的非零值。之后可以通过合理地设置阈值判断该视频帧是否被嵌入了水印。
对于右视图来说,记ws(x,y)=w(x+s,y)为水平偏移量,即视差,为s的水印。
直接将检测子ρ应用于右视图时会得出如下结果:
其中,fr是右视图,w意义如前,w0是视差为0的水印部分,ws是视差为s的水印部分,d0是视差值为零的像素占整个视图的比例,α是水印嵌入强度,∈是一个代表待检验视频帧中是否包含水印的布尔值。基于视频帧信号与嵌入水印内容相互独立的假设,第一项近似为零。除此之外,除了水平偏移量恰好为零的像素以外,偏移的水印与未偏移水印相互独立,因此公式中的第三项也接近于零。这就意味着这种检测器只能检测零视差部分的水印能量,也就是公式(6)只能检测与嵌入时同一个视图中的水印,而非不同视图。
公式(6)不能应对视图合成的情况,其中的原因在于水印的能量在视图合成过程中偏移而分散到了各个视差平面上。因此,在此步骤中通过收集散落的水印能量实现任意视图中的水印提取。还以左右视图为例,左视图嵌入原水印,右视图嵌入变换后的视差相干水印。以下通过右图的水印提取说明方案。式(6)中检测子成功地获取了视差恰好为零部分的水印能量,因此也可以用同样的方式收集视差值恰好为s的水印能量。如下所示:
其中ds是视差值恰好等于s的像素占整个帧的比例,α是水印嵌入强度,∈是一个代表待检验视频帧中是否包含水印的布尔值。对于每一个可能的s值[smin,smax]均计算一次检测子的值可得到响应值向量
获得了响应值向量ρ后,还需要对其进行标量化(即映射到一个标量上)以便通过将结果与阈值对比判断视频是否被嵌入水印,考虑如下三种标量化的方式:
ρmax=maxsρ[s](8)
ρsum=∑sρ[s](9)
ρthr=∑|ρ[s]|>γρ[s](10)
其中,ρ[s]表示视差为s的水印响应值,max是取最大函数,γ是阈值。第一种方式取响应值向量中的最大值,优点在于当检测的帧所在的视图恰好就是水印嵌入时的视图时可以达到非常理想的效果。但是根据视图合成的特性,随着待检测帧所在的视图远离水印嵌入时的视图,其中的水印能量会越来越分散,导致响应值越来越小,检测性能变差。第二种方式取的是响应向量各项之和,这种方法的优点在于综合考虑了收集到水印能量的全部成分,因此无论检测到哪一个视图都能够获得一个较为稳定的检测结果。但缺点在于容易受到相应向量中的噪音干扰导致不能获得一个理想的检测结果,即最终算出的响应值总是与理论值有一定差异。第三种情况方法中设置阈值γ,认为相应向量中绝对值小于γ的成分为噪并在统计过程中将其去除,剩余部分求和。这种方式在γ选取恰当时能够在检测水印嵌入的视图时取得接近理想值的结果,并且在检测其它视图时表现也优于第一种方法。γ的取值可以设置为定值或者基于响应值向量ρ的标准差进行自适应性调整。
方法测试
本实验中使用http://www.tanimoto.nuee.nagoya-u.ac.jp/~fukushima/mpegftv/上的两段立体视频序列帧,分别为balloons和kendo,进行实验。每段视频都有至少300帧分辨率为1024*768的拥有完整左、中、右三个视图以及对应的深度图构成的序列以及详细的摄像机内外参数等信息。实验中使用的水印分布符合标准正态分布并且经过起始坐标为3,步长为7的约瑟夫置乱。水印强度系数α=5√2π。除了对本方法的实验外,本发明对比了burini等人的方法,水印强度等参数均与本方法一致。burini等人的方法是实现在空间域上的,水印尺寸与待嵌入视频一致。在此,使用同样的符合标准正态分布并经过约瑟夫置乱的水印。
测试一,应对视图合成的鲁棒性测试。
在应对视图合成的鲁棒性测试中,将水印直接嵌入视频序列帧的左视图中并且以视差相干的方式将水印嵌入右图中。对于数据集中的两组序列帧中的每一帧都进行水印的嵌入,并且在检测水印时分别取两组序列帧的响应值平均值观察效果。除此之外,还应当对未嵌入水印的序列帧也进行相同的操作。因为如果只是嵌入水印后的视频中响应强度高不足以证明水印算法的效果好,还需要与未嵌入水印视频的响应强度拉开足够大的差异。本发明选取了同属视差相干水印算法的burini等人提出的方法进行对比,其中关于水印应对视图合成鲁棒性的实验结果如表1。
表1两种水印算法应对视图合成鲁棒性对比
从表1中,为观察水印算法整体的效果,将同实验条件下两个视频序列帧的水印响应强度合并取平均值(两个视频序列帧各300帧合计600帧)。从表1的数据中可以看出,本发明提出的水印算法与burini等人提出的在空间域上的水印算法均能有效区别有无水印的情况,取得了基本相同的应对视图合成的鲁棒性。而根据burini等人在其实验中提到的内容,该算法由于是在空间域上执行的所以在应对常见的基于dct变换的视频编码方面鲁棒性较差,接下来的测试将证明这一点。
测试二,应对h.264视频编码的鲁棒性测试。
根据数据集的说明文档,对balloons和kendo序列帧进行h.264视频编码时需要注意两个重要的参数:1、gop,即groupofpictures,该参数是一个整数值,表示一组连续的i、p、b帧画面中应该包含多少个视频帧,文档中推荐使用gop=8;2、量化参数(quantizationparameter,简称qp),该参数是决定视频压缩程度的一个整型数,当qp=0时相当于压缩过程中不进行量化,qp越大压缩程度越高,文档中要求量化参数分别选取25、30、35、40四个值进行测试。表2给出了本发明方法与burini等人算法对比实验的结果。从中可以看出,在未经过量化时两种算法的表现相近。但是当qp值达到25,即数据集文档的最小参考qp值时,burini等人中给出的方法在两个视图中的水印相应强度明显下降。当qp达到35以上时,该方法中的水印响应强度平均值降至0.5000左右也就是理想值的10%以下,并且标准差超过0.4000。相当大一部分帧的水印响应强度甚至降至零以下。这将导致无法正常地判断出一个视频中是否包含水印,即水印被破坏。而本发明中的算法检测到水印响应的平均值随着qp值的增大下降的较为平缓且当qp达到40时左右视图仍然分别能够保持响应值大于理想值的50%和40%以上。这一对比充分体现出了本发明方法在应对视频编码的鲁棒性方面具有较大的优势。
表2两种方法在不同qp参数下压缩后水印提取情况对比
测试三,不可见性测试。
除了鲁棒性测试外,还需要对水印算法进行不可见性测试。测试的方式是计算对应视频帧嵌入水印后与嵌入水印前的psnr值,如果psnr值较高,则说明谁引得不可见性较好。表3中给出了本发明和burini等人算法的对比实验结果。从表3中可以看出本发明方法的水印不可见性在各个视频序列上的表现都相比burini等人的方法有一定优势。并且嵌入水印后的视频帧中无法用肉眼察觉到水印存在。
表3各组序列帧平均psnr值