基于最小失真的视频水印算法
2021-12-21赵生娜
赵生娜
(泰山科技学院数理教学部,山东泰安 271000)
1 引言
随着科学和信息技术的迅猛发展,设计一种安全性能良好,不可感知性和鲁棒性相对平衡的视频水印算法,保护视频作品知识产权和信息安全显得至关重要[1]。水印信息安全性主要体现在攻击者难以篡改或伪造水印信息,即便获取了载有水印信息的视频序列,在没有密钥的情况下,攻击者也不能解密出正确的水印信息。不可感知性主要体现在原始视频在嵌入水印信息后,视频帧仍能保持较大的峰值信噪比。鲁棒性主要体现在视频序列经历多种无意或有意的信号处理过程后,如滤波、噪声、旋转、有损编码压缩、丢帧、帧平均、帧交换等,数字水印仍能保持部分完整性并能被准确鉴别。
近几年来,为了能有效地保护视频版权信息,涌现出了很多解决方案,这些算法在安全性、不可感知性和鲁棒性方面各有优缺点。
Chetan和Raghavendra[2]使用DWT对原始视频进行变换,并选择在视频各种场景中的HL、LH子带等中频频带进行嵌入处理,但是这种方法并不能对抗帧交换和帧丢失攻击。Wassermann等人[3]首先对初始视频帧进行小波分解,然后将水印信息嵌入到低频系数视频流中。该方法对MPEG压缩攻击具有较好的鲁棒性。Rajab等人[4]提出了一种基于DWTSCHUR的盲视频水印技术,这种方法无法抵抗帧丢失攻击。在这些文献中,这些算法都取得了一定的性能,但是由于水印信息被嵌入到视频的所有帧中,嵌入过程耗时较长。
Preda和Vizireanu[5]提出了一种基于小波变换的视频水印方案,作者选取视频帧二级DWT分解后的LH、HL、HH子带作为二值图像进行水印嵌入。据报道,这种方法对某些基于帧的攻击是不可靠的。Faragallah[6]提出了在DWT域中基于奇异值分解的视频水印算法,他将视频帧进行DWT分解后,将水印隐藏在SVD转换后的DWT系数中,并将纠错码用于水印的提取。该方法可以抵抗图像处理攻击,但对滤波、帧丢弃、交换等视频处理攻击不具有鲁棒性。Masoumi和Amiri[7]使用场景变化分析提出了一个视频版权保护方法,先对场景变化进行分析,然后将三维小波变换应用到小波系数中,并将水印插入到第三层三维系数中,最后利用扩频概念将水印嵌入到选定的系数中。在这些文献中,这些算法方案将水印嵌入在选定的关键帧中,有效地缩短了水印嵌入过程时间。但是由于所有关键帧中嵌入相同的水印信息,因此可以很容易地通过帧丢失等帧攻击来去除水印。
Xu[8]提出了一种基于三维小波变换的盲水印算法,其中宿主视频被分为三维块,水印嵌入到源视频的动机块中。此方法不能抵抗某些图像和视频处理攻击。Reyes[9]等人提出了一种基于混沌混合的DWT域数字视频水印算法,他将二进制模式作为水印插入到随机选择的经过DWT变换的场景块中。这种方法不能承受帧处理和噪声污染攻击。Cruz-Ramos等人[10]提出了一种健壮的视频水印方案,作者使用DWT进行视频帧变换,水印作为公司商标,所有者的标识类型为视觉可识别模式。这种方法在应对几何扭曲和过滤攻击方面鲁棒性相对较差。S.Ponnialias Sathya等人[11]提出了一种新的视频版权技术,该方法采用场景变化检测技术来识别场景中的频繁变化。水印只嵌入到变化场景的特定帧的LH子带中。在嵌入过程中,将置乱后的水印块的奇异值(SVs)加入到特定帧的SVs中。该方法能够抵抗不同的图像和视频处理攻击,并提高了载体视频的质量和算法的鲁棒性。然而,其视频关键帧选取和水印加密算法相对复杂。在这些文献中,这些算法方案在不同视频场景中选定的关键帧中嵌入不同的水印子块,能够较好地应对帧丢失等帧攻击。但是这些方法不能在算法复杂度、鲁棒性和不可感知性之间取得很好的平衡。
本文的主要工作如下:
(1)利用一种简单有效的视频场景检测算法,通过设置合适的阈值将视频按场景划分并快速有效地提取出视频序列的关键帧。
(2)提出一种小波系数失真代价计算策略,衡量小波系数变化对图像质量造成的影响。
(3)提出一种基于图像最小失真代价的水印嵌入位置选取策略,较好地平衡了鲁棒性和不可感知性效果,同时水印信息的嵌入不需要加密操作,从而一定程度上降低了算法运算复杂度。
2 相关理论
2.1 视频场景划分与关键帧提取策略
为了增强视频镜头变换时相邻两帧的差别,文中采用直方图差分法,以便快速有效地检测到视频镜头切换[11]。直方图差分检测算法计算公式如下:
其中,hi+1(j)表示视频序列第i+1帧的灰度级为j的灰度直方图大小;hi(j)表示视频序列第i帧的灰度级为j的灰度直方图大小;d(i+1,i)表示视频序列第i+1帧与第i帧的直方图差异;norm_d表示归一化后的直方图差异。
基于直方图差分在连续帧之间进行场景变化检测[12],场景更改的数量和视频关键帧的选取决于预定义的阈值。
2.1.1 视频场景检测策略
首先根据公式(1)计算视频相邻帧之间的灰度直方图差异,并用(2)式进行归一化处理,如果norm_d大于预定义的归一化直方图差异阈值,则定义视频第i帧为视频场景变换临界帧。
为了更好地优化视频场景检测,由于人眼视觉暂留现象在0.1~0.4秒之间,设置一个场景中的视频帧数不少于N,N满足:
图1 使用直方图差分法进行场景变化检测
2.1.2 关键帧选取策略
Step1:假定视频序列第i帧为当前关键帧;
Step2:根据公式(1),计算当前关键帧与视频序列第i+k(k=1,2,3…)帧的灰度直方图差异值d(i,i+k);
Step3:如果d(i,i+k)>T(T为预设的直方图差异阈值),则记第i+k帧为视频序列下一关键帧,并更新当前关键帧。
Step4:重复执行Step2-Step3,直至取出视频序列所有关键帧。
在本文中,为了减少水印嵌入过程所需时间,同时又不失安全性,选定直方图差异阈值T=2400。
表1显示了帧率为30帧/秒的“suzie.avi”视频,在直方图差异阈值T=2400下9个变换场景提取的关键帧。
表1 视频关键帧
2.2 离散小波变换
二维离散小波变换需要一个尺度函数φ和一个小波函数ψ,二维小波构造如下:
对于一个N×N,N=2n大小的图像矩阵,在水平和垂直的方向上,采用隔点取样的方法,可以将其分解为4个大小相等频带区域,表示为低频子带(LL)、水平子带(HL)、垂直子带(LH)、对角子带(HH)。选择不同的小波基对嵌入水印性能有很大影响,Mallat等人[13]研究表明Haar小波更适合于数字水印。
由于RGB图像R分量较好地匹配了人眼视觉系统,具有较好的鲁棒性,因此选择视频的R分量进行小波分解并嵌入水印信息。当视频帧小波分解层数越多时,可嵌入的水印容量越小并且算法的鲁棒性不会随之提高[12],为了更多地嵌入水印信息,对视频帧进行一层小波分解。为了测量鲁棒性和视觉质量的关系,在嵌入强度为0.6的情况下,确定嵌入水印所需的合适子带,实验结果如表2所示。可以看出:视频帧PSNR值较高时,对应的水印信息NCC值相对低,即鲁棒性较差。因此,为了在水印鲁棒性和图像视觉质量之间取得较好的平衡,将一级DWT分解的LH分量,作为水印嵌入分量。
表2 水印视频的PSNR和提取的不同子带的水印的PSNR
2.3 小波系数失真代价计算策略
图像经小波分解后,LH分量不同位置嵌入水印信息对图像造成的失真程度是不同的,为了衡量LH分量各个位置小波系数的改变对图像失真度的关系,制定了如下小波系数失真代价计算方法[14-15]。
对载体视频帧进行DWT分解,并计算低频或高频分量矩阵I(x,y)各个位置的小波系数的失真代价D(x,y),具体计算方法如下:
首先选取一个1维高通滤波器g和一个1维低通滤波器h构造二维方向滤波器,选取的滤波器g和h为DB8小波滤波器。
二维方向滤波器由水平方向F{1}、垂直方向F{2}和对角方向F{3}三个方向构成,构造方法如式(5)所示:
然后矩阵I(x,y)根据上述二维方向滤波器镜像填充得到镜像填充矩阵PI(x,y),并计算其在各个滤波器方向的滤波器残差R={R1,R2,R3},其中*表示卷积运算,如式(6)所示:
残差在滤波器各个方向的适应性A={A1,A2,A3},并通过式(7)聚合这些适应性,得到低频分量小波系数的失真代价D(x,y)。
2.4 基于最小失真代价的水印嵌入位置选取策略
为了尽量减少视频帧在嵌入水印信息后视频质量的变化,将水印信息嵌入到图像小波分解后的LH分量中小波系数失真度相对较低的位置。此外为了降低算法复杂度,引入Hash区块加密算法,选取水印嵌入位置。
假设视频一个场景中包含Ω个关键帧,对每个关键帧进行一层小波分解,选取LH分量,并将其分成16×16大小的小块,按行对各小块进行编号1,2,…,N(其中N为16×16分块的最大个数),并且每个小块也按行进行编号为1,2,…,256。假设原始帧图像大小为H×W,则:
利用电脑系统自带的“SHA256Managed.ComputeHash”类函数定义一种Hash区块加密计算方法,加密函数定义如(10)所示。
blocki=[b1,b2,…,b32],(bi≠bj,i,j=1,2,…,32),其中bi为 0-255之间的整数。
Step2:那么下一区块中的计算方法为:
其中Gb=hash(blockk-1),⊕表示按位异或运算。
Step3:重复利用Step2,确定出此场景下所有帧中的水印嵌入位置区块,共计Ω×N个。
Step4:计算选取的所有区块对应的小波系数失真代价值的总和,计算公式如下:
其中Dj(blockk(i))表示第j个关键帧下,区块k中i位置的小波系数失真代价值。
Step5:通过随机产生区块blocki,重复上述Step2-Step4,选取Γ最小值对应的blocki作为初始块,并由Step2-Step3产生最终的水印嵌入位置目标Block={block1,block2,…,block N}。
2.5 水印图像预处理
水印信息W应该是二值图像,假设其大小为2M×2M,其对应的水印子图像块w像素大小为2m×2m,其满足:
其中S表示视频可以划分的场景数,m是满足上述关系的最大整数。
水印被分成2m×2m大小的小块,其含有的像素数不能多于从帧图像中选取的小波系数总数32×N,并且水印信息小块的个数不能超过视频预设的场景数S。也就是说,二值图像水印的分辨率取决于初始视频的分辨率。
2.6 基于DWT-SVD的水印嵌入算法
为了提高水印算法的鲁棒性,基于DWT-SVD水印嵌入算法,将水印信息SVD分解特征值矩阵嵌入到图像DWT分解LH分量的SVD分解后的特征值中,具体嵌入方法如下:
Step1:在视频的一个场景下,根据上述确定的区块,按行提取各关键帧一层小波分解LH分量与区块blockk对应的小波系数,并将其展开成2m×25-mN大小的矩阵,记为Pj,(j=1,2,…,Ω)。
Step2:对矩阵Pj和水印块w分别进行奇异值分解,如式(14)所示:
Step3:将水印信息块奇异值分解的特征值嵌入到目标小波系数矩阵奇异值分解的特征值中,如公式(15)所示,其中α即信息嵌入强度,它的取值与水印图像有关,在本文中α=2。
Step4:重组小波系数矩阵,得到含有水印信息的小波系数矩阵Pwj。
Step5:将含有水印信息的小波系数,按照对应的区块blockk赋值原始视频LH分量的小波系数值,然后小波重构视频帧图像。
Step6:对视频的每个场景都进行上述Step1-Step5操作,进而得到含有水印信息的视频序列。
2.7 水印信息提取算法
水印信息的提取实际上就是上述嵌入过程的逆过程,首先将待测视频序列按场景划分,并对视频关键帧进行一层小波分解,具体提取方法如下:
Step1:在待测视频某个特定场景下,根据上述确定的区块,按行提取各关键帧一层小波分解LH分量与区块blockk对应的小波系数,得到含水印信息的小波系数矩阵Ptj。
Step2:对矩阵Ptj进行奇异值分解。
Step3:利用式(18)从关键帧中提取水印信息块wtj,并将其二值化得到,那么此场景最终提取的水印信息为在各个像素位置取众数。
Step3操作,并重组水印信息块,进而得到视频序列中嵌入的水印信息。
3 仿真实验与结果分析
对上述基于最小失真和Hass区块加密融合的视频水印算法进行了鲁棒性和不可感知性实验研究,并作出合理评价。以帧率为30帧/秒的“Suzie.avi”为例作为视频输入序列,它可以在标准库中找到,根据上述视频场景划分和提取的40帧关键帧,通过随机生成5000组初始Hash区块样本,选取使目标嵌入位置小波系数失真代价和最小的初始Hash区块,最终确定的10个场景的初始Hash区块如表3所示。
表3 视频10个场景的初始Hash区块
所有实验均使用MATLAB R2016a完成。图3展示嵌入的二值水印,二值水印分辨率大小依次为128×128,128×128,64×64,64×64。
图2 原始二值水印信息
3.1 算法评价指标
原始视频嵌入水印信息后,通过视频各关键帧的灰度图像PSNR[16](峰值信噪比)值(单位:db)衡量水印视频质量。
其中max(I)表示灰度图像I的最大像素级数,MSE为均方误差,如下:
I和I*表示载体图像、水印图像的灰度图像。PSNR≥40db时图像质量极好,几乎没有视觉上的差异;30d≤PSNR<40db时,图像质量较好,存在视觉可接受的差异;PSNR<30db时,图像视觉质量较差。
通过归一化交叉相关(NCC)系数值[16]和误码率(BER)[11]来判别提取的水印信息是否有效。
其中w(i,j)和w*(i,j)分别表示原始水印和提取的水印像素矩阵。NCC越趋近于1,表明提取的水印信息越完整,更容易辨别;BER值越趋近于0,表明提取的水印信息越完整。另外NCC和BER值的大小也能一定程度的反映出水印算法的鲁棒性。只要能够从待测视频序列中提取出或者辨别出任一水印信息,就可认定并保护视频的版权和所有权。
3.2 鲁棒性和不可感知性实验
本文分别做了不同强度大小的模糊、添加噪音等图像处理攻击和不同强度大小的帧平均、帧交换、帧删除等视频处理攻击实验。
图像模糊:图像模糊实际上就是对图像进行滤波操作,选取不同标准差的3×3大小的高斯低通滤波器,分别对含水印视频各帧进行滤波操作。
添加噪声:对视频添加噪声就是给视频帧图像添加杂点或者干扰。选取零均值,不同标准差的噪声,诸如高斯噪声、椒盐噪声等添加到含水印视频。
帧删除:从视频序列中随机删除或丢弃一部分帧,在本文中,帧删除攻击分别有10%、20%和25%的watermarked video帧被随机丢弃。
帧平均:将视频当前帧和当前帧最邻近的视频帧取平均后代替视频当前帧。在本文中,分别有10%、20%和25%的含水印视频帧被平均。
帧交换:将视频当前帧与视频其他随机帧进行交换。在本文中,分别有10%、20%和25%的含水印视频帧被交换。
表4展示了视频序列遭受不同种类攻击后,视频关键帧灰度图像PSNR值均值、提取水印信息(‘lena’、‘scene’、‘qust’和‘mascot’融合在一起的图像)的NCC值和BER值。
3.3 算法对比实验
文献[11]中,Ponnialias Sathya等人提出的基于Fibonacci序列关键帧选取的DWT-SVD域视频水印算法,是目前水印不可感知性和鲁棒性上平衡较好的算法之一。为此,我们将本文算法与文献[11]进行了对比实验,为了让算法具有可比性,将文献[11]的水印嵌入算法代替本文嵌入算法进行了实验,实验结果如表4所示。
表4 视频序列不同类型攻击对应的实验结果
通过对比不难看出,本文提出的视频水印算法,含水印视频帧的PSNR值相对更高,提取水印信息NCC值相对更高,提取水印信息的BER值相对更低。因此本文算法的不可感知性和鲁棒性较好,并且更好地平衡了不可感知性和鲁棒性。
4 结语
在本文中,首先利用一种简单有效的视频场景检测算法——视频帧直方图差分,通过设置合适的阈值将视频按场景划分并根据视频帧直方图统计差异,快速有效地提取出视频序列的关键帧;然后通过构造方向滤波器计算小波系数失真代价计算,由小波一级分解图像小波系数失真代价总和最小确定初始Hash区块,将初始Hash区块作为密钥,将水印信息嵌入图像DWT-SVD域中。Hash区块总共有种组合,因此密钥的破解复杂度相当高,很好地保证了算法的安全性。本文算法在视频的关键帧的DWT-SVD域中嵌入不同的水印信息块,有效提高了算法的鲁棒性,并且较好地提高了算法应对视频攻击的能力。另外,提出的水印算法不需要对水印进行加密,降低了算法运算复杂度。通过仿真实验和对比实验,有效验证了本文算法能更好地平衡水印算法的不可感知性和鲁棒性。