H.264中基于视频复杂度分析的鲁棒数字水印嵌入方法技术领域
本发明涉及视频水印方法领域,具体为一种H.264中基于视频复杂度分
析的鲁棒数字水印嵌入方法。
背景技术
国内外学者和研究机构对图像水印的研究已经趋于完善,但对视频数
字水印的研究还相对滞后,尚未建立统一的评价标准,仍有待成熟。
而现有的视频水印算法大部分仍然采用图像水印的技术,即在空域或
变换域内加载水印,而数字视频文件除了继承数字图像文件二维的所
有特征,还具有数字图像所没有的第三维的特征——时间域特征。这
也就导致这类直接应用图像水印技术的视频水印算法造成极大的资源
浪费,同时对时间域上的攻击(帧插入、帧删除等)毫无鲁棒性。如
何利用视频区别于图像的时间特性,结合亮度、纹理、运动参数进行
视频序列复杂度分析,有针对性的选择目标宏块完成鲁棒水印的嵌入
,同时达到视觉质量与算法鲁棒性之间的平衡,是一个亟待解决的问
题。
H.264标准基础上视频水印算法的发展还很缓慢,现有文献的数量不多
,其中郑振东等人在H.264标准基础上提出了一种基于运动矢量(Moti
on Vector, MV)域与DCT域的混合视频水印方案。在DCT域内通过二
值水印的状态调整DCT系数的零状态。在运动矢量内,将视频帧沿中线
划分为左右两个区域,根据水印状态与子块的横向运动矢量的符号状
态,及该子块所处的左右区域相匹配,来实现水印的嵌入与提取。
曹华等提出一种一种基于H.264低比特率视频流的半脆弱盲水印方法,
通过在H.264特有的的帧内预测和运动向量预测中分别嵌入鲁棒水印和
脆弱水印,达到版权保护和内容完整性认证的双重目的。
总结以往的鲁棒水印算法,不难发现,现有算法都是通过在水印算法
的复杂性上做工作来提高算法鲁棒性,而忽略了对载体文件进行分析
,水印在载体各部分均匀分布。而对于载体文件而言,各部分对于水
印信息的包容性是不同的,也就是说,如果在不适合嵌入水印的部分
强行加载水印信息,可能会导致算法灾难性的结果。原则上说,水印
算法的鲁棒性与透明性之间存在着此消彼长的矛盾,其性能需要在这
二者之间进行折中。要想在保证鲁棒性的基础上,达到优质的视觉效
果,需要对水印嵌入的载体文件进行合适的分析,找出适宜嵌入水印
的部分,
再对其进行鲁棒算法的研究,在此基础上嵌入水印势才能够达到了令
人满意的效果。
发明内容
本发明目的是提供一种H.264中基于视频复杂度分析的鲁棒数字水印嵌
入方法,以解决现有技术鲁棒水印算法会在不适合嵌入水印的视频部
分强行加载水印的问题。
为了达到上述目的,本发明所采用的技术方案为:
H.264中基于视频复杂度分析的鲁棒数字水印嵌入方法,在进行H.264
编码操作的数字视频中,数字视频包含多帧图像,每帧图像在H.264编
码操作时被分解成多个宏块,每个宏块再次被按4×4分解成16个子块
,其特征在于:包括以下步骤:
(1)求得宏块的图像复杂度:将数字视频每帧图像中每个宏块的各个
子块进行DCT变换后再进行zigzag扫描,得到每帧图像中每个宏块的各
个子块的DC系数、AC系数,根据每帧图像中每个宏块的各个子块的DC
系数计算得到每帧图像中每个宏块的图像复杂度;
(2)求得宏块的像素变化速率均方差:根据数字视频每帧图像中每个
宏块各个子块的像素变化速率,计算得到每帧图像中每个宏块的像素
变化速率均方差,所述像素变化速率指单位时间内相同位置上像素的
变化量;
(3)确定特征宏块:根据经验分别设定数字视频图像复杂度和像素变
化速率均方差的阈值,将如步骤(1)、(2)得到的数字视频每帧图
像中每个宏块的图像复杂度、像素变化速率均方差分别与对应的阈值
比较,如果其中一个宏块的图像复杂度、像素变化速率均方差中任意
一个大于其对应的阈值,则认为该宏块视频复杂度高,选取该宏块为
数字视频的特征宏块;
(4)帧内嵌入水印:在特征宏块中,按与斜对角线平行的多个线条将
子块的DCT系数划分为7个能量子带,选出中频AC系数所在的4个能量子
带用于水印的嵌入,将4个能量子带的中频AC系数分为三组,比较每组
中各个子块的中频AC系数的最大值和最小值,再对三组中频AC系数的
最大值取最小后记为相对最大值,同时对三组中频AC系数的最小值取
最大记为相对最小值,最后通过调制特征宏块中各个子块中频AC系数
的大小来改变所述相对最大值和相对最小值的大小,进而完成水印的
嵌入。
(5)帧间嵌入水印:从特征宏块的16个子块中选取对角的两个子块,
将选
取的两个子块周围的子块分成水平和竖直方向两组,计算各子块运动
矢量的模值后,得到水平和竖直方向两组子块运动矢量的模值,再分
别找出每组中子块运动矢量模值的最大值与最小值,然后分别对两组
运动矢量模值的最大值取最小,记为相对最大值,同时对两组两组运
动矢量模值的最小值取最大记为相对最小值,相对最大值与相对最小
值的差值记为比较差,相对最大值与比较差的差值记为比较最大值,
比较差与相对最小值的差值记为比较最小值,通过加权视频复杂度并
选取合适的阈值确定嵌入点子块,运动矢量的模值来改变比较差、比
较最大值和比较最小值之间的大小,进而完成水印的嵌入。
本发明在选取的特征宏块中嵌入水印,能有效缓解视频质量与水印算
法鲁棒性之间的矛盾,并且不会破坏视频的视觉效果。
附图说明
图1为中频AC系数所在的4个能量子带
图2为嵌入位置示意图,其中:
图2a为某子块与其周围4个子块的位置,图2b为宿主宏块中两种水印嵌
入位置。
图3为foreman.qcif视频水印嵌入前后图像对比示意图,其中:
图3a为原始视频帧,图3b为嵌入水印后视频帧,图3c为数字水印。
图4为不同压缩比的JPEG压缩对视频水印算法的影响,其中:
图4a为压缩比为10~80时,NC值的比较,图4b为压缩比为80时提取出的
水印图像。
图5为噪声密度对对视频水印算法的影响,其中:
图5a为椒盐噪声密度为0.005~0.05时,NC值的比较,图5b为椒盐噪声
密度为0.05时提取出的水印图像。
图6为受攻击帧数对视频水印算法的影响,其中:
图6a为受到帧平均攻击为1~10帧时,NC值的比较,图6b为受到帧平均
攻击为10帧时提取出的水印图像。
图7为子块的7个能量子带分布示意图。
图8为选定嵌入水印的子块运动矢量的调制区间示意图。
具体实施方式
(1)视频复杂度分析
设一段数字视频中包含f帧图像,每一帧图像包含m×n个像素。Fi为
第i帧,i∈{0, f-1}。Fi在进行H.264编码操作时被分解为若干互不
重叠的尺寸为
16×16的宏块,MBi,j为第i帧中的第j个宏块,。Ci,j,k为第i帧中的第j个
宏块的第k个像素,k∈{0, p×q-1}。每个宏块MBi,j再按4×4细分为
16个子块bi,j,n进行DCT变换,bi,j,n表示第i帧中的第j个宏块的第n个子块。
然后对变换后的子块进行zigzag扫描,这样每个子块中就产生了如图
7所示的7个子带的DCT系数。
(a)图像复杂性度量
本发明定义像素宏块的图像复杂度为其背景亮度和纹理复杂度的综合
考量。并对像素宏块复杂度设定一个阈值,复杂度值超出此阈值约束
即表示在该宏块纹理复杂、背景亮度高,适合加载水印信息;复杂度
值小于此阈值的,说明此宏块区域平缓而不适合嵌入水印信息。在解
码端根据纹理复杂度的理论方法,确定水印嵌入的位置来提取水印图
像。
H.264对每个宏块中16个子块进行DCT变换后的产生的DC系数集中了子
块的大部分能量,且具有压缩不变性,因此,本发明通过每个宏块内
部的16个DC系数来进行纹理复杂度度量。
算法用局部图像复杂度因子来度量局部图像的纹理复杂度,并将该局
部图像复杂度因子与载体文件直流分量共同构造复合函数,即为图像
复杂度。
IC ( i , j ) = α 1 σ i , j 2 + α 2 e i , j - - - ( 5 ) ]]>
式中:α1,α2为比例因子,介于0和1 之间。选择局部图像复杂度
比较大的像素宏块嵌入水印,设视频帧尺寸为N1×N2,DCi,j,k为视频图像
中的第i帧图像Fi的第j个宏块MBi,j的第k个子块在进行DCT变换后的DC系
数。
宏块MBi,j的纹理复杂度参数为:
σ i , j 2 = 1 16 Σ k = 0 15 p ( e i , j ) | DC i , j , k - e i , j | e i , j - - - ( 6 ) ]]>
p ( e i , j ) = ( 1 / e i , j ) β - - - ( 7 ) ]]>
式中: ei,j为宏块内部的16个DC系数的平均值;p(ei,j)为加权系数,β
为加权因子,取值范围为(0.6,0.7)。图像复杂度IC(i,j)的值随α
1,α2以及β的变化而改变,由此显示出各子块不同的图像纹理复杂度
,进一步提升水印算法的
安全性。
(b)运动特征度量
本发明应用视频序列帧间相关宏块的差异,简单地描述视频帧中目标
的运动参数。H.264处理单元的宏块尺寸为16×16,每个宏块在细分为
16个互不重叠的规格为4×4的子块,为第i帧中第j个宏块中第k个子
块的(m,n)点的像素值,表示在时间轴t上像素变化速率,
V t i , j , k ( m , n ) = C t i , j , k ( m , n ) - C t i - 1 , j , k t i - t i - 1 - - - ( 8 ) ]]>
这里,0≤m,n≤3,0≤nj≤3,,0≤k≤15。
子块的像素中各点像素值沿时间轴变换的绝对值的最大值为
V max i , j , k = max m , n { | V t i , j , k ( m , n ) | } - - - ( 9 ) ]]>
第i帧中第j个宏块的速率最大化均值为
V average _ max i , j = 1 16 Σ k = 0 15 V max i , j , k - - - ( 10 ) ]]>
第i帧中第j个宏块的像素变化速率均方差为
V MSE i , j = 1 16 Σ k = 0 15 ( V max i , j , k - V average _ max i , j ) 2 - - - ( 11 ) ]]>
宏块的运动特征可以通过运动参数来度量。
(c)视频复杂度量
最后,本发明采用式(12)所示的加权视频复杂度VC(i,j)来判定子块是
否具有运动特征:
ME ( i , j ) = { IC ( i , j ) , V MSE i , j } - - - ( 12 ) ]]>
i为帧序号,j为子块序号,由多个样本训练得到的经验值作为两个阈
值分别与这些能量分量相对应,即为TH_T和TH_M。如果子宏块的两个
能量分量至少有一个大于其相对应的阈值,该宏块即被判定为视频复
杂宏块,可以用来嵌入水印信号。
(2)帧内残差DCT系数域的水印算法
水印嵌入规则
(I)按照视频复杂度度量方法判断当前宏块是否适合嵌入水印。如果
宏块
的具有高度的视频复杂度,进行下一步操作。如果宏块的纹理或运动
趋势较平缓,即转到下一宏块,重新从这一步判断。
(II)按照式(13)~(15)将子块内部(每个子块有16个DCT系数,其中
1个为DC系数,其余15个为AC系数,选出其中12个中频AC系数用来嵌入
水印信息)的中频AC系数分为如图1所示的三组Row1,Row2,Row3,
Row k = { AC i n } - - - ( 13 ) ]]>
Σ n = 1 4 i n = N × ( N + 1 ) 2 , n = 1,2,3,4 - - - ( 15 ) ]]>
N为所选AC系数的数目,这里选择AC1~AC12共12个AC系数,因此,N=1
2。
(III)比较得出Row1,Row2,Row3中AC系数的最大值Maxk和最小值M
ink
Min k = min { Row k } Max k = max { Row k } - - - ( 16 ) ]]>
(IV)按照下式得出各组系数中的相对最大值Amax和相对最小值Amin
A max = min { Max k } A min = max { Min k } - - - ( 17 ) ]]>
(V)按照下式的规则嵌入水印信息
A max > A min , w = 1 A max ≤ A min , w = 0 - - - ( 18 ) ]]>
当水印位为1时,调整子块内部的若干个AC系数,使得Amax>Amin;而
当水印位为0时,调整子块内部的若干个AC系数,使得Amax≤Amin。
水印提取规则
提取规则为嵌入规则的逆过程,具体步骤如下
(I)按照视频复杂度度量方法判断当前宏块是否嵌入了水印。如果宏
块的具有高度的视频复杂度,即表示该宏块内部嵌入了水印信息。进
行下一步操作提取水印信息。如果宏块的纹理或运动趋势较平缓,即
表示该宏块没有隐藏水印信息,即转到下一宏块,重新从这一步判断
。
(II)按照式(13)~(15)将子块内内部的中频AC系数分为如图2-5所示
的三组Row1,Row2,Row3,
(III)按照式(17)得出各组系数中的相对最大值Amax和相对最小值A
min
(IV)按照式(19)的规则嵌入水印信息
w = 1 , A max > A min w = 0 , A max ≤ A min - - - ( 19 ) ]]>
(3)帧间“十字交叉”运动矢量区域内的水印算法
水印嵌入规则:
(I)按照视频复杂度度量方法判断当前宏块是否适合嵌入水印。如果
宏块具有高度的视频复杂度,进行下一步操作。如果宏块的纹理或运
动趋势较平缓,即转到下一宏块,重新从这一步判断。
(II)对于选定的特征宏块,边缘12个子块依据宏块的中轴线分为左
右两组,计算左右两组运动参数均值VRight和Vleftt。按照式(20)选择如图2中
的嵌入点位置:
p 1 and p 2 is chosen , V ‾ right < V ‾ left p 3 and p 4 is chosen , V ‾ right ≥ V ‾ left - - - ( 20 ) ]]>
(III)按照图2(a)所示选择嵌入点周围的4个子块的运动矢量,分别
按式(21)计算它们以及嵌入点子块的运动适量的模值PV,,,,。并
将它们按横向和竖向分为2组和。
P V = P V x 2 + P V y 2 - - - ( 21 ) ]]>
(IV)按照下式分别求得RowH和RowV的最大值和最小值:
Row H max = max { P V 2 , P V , P V 4 } Row H min = min { P V 2 , P V , P V 4 } Row V max = max { P V 1 , P V , P V 3 } Row V min = min { P V 1 , P V , P V 3 } - - - ( 22 ) ]]>
(V)按照下式得出各组系数中的相对最大值Amax和相对最小值Amin
A max = min { Row H max , Row V max } A min = max { Row H min , Row V min } - - - ( 23 ) ]]>
(VI)按下式计算相对差值D、相对较大差值Dmax和相对较小差值Dmi
n
D = A max - A min D max = A max - P V D min = P V - A min - - - ( 24 ) ]]>
(VII)其中,Amin<Amax,Amin到Amax之间的范围可以分成4个部分
(如图8所示),按式(25)的规则嵌入水印信息。
水印提取规则:
提取规则为嵌入规则的逆过程,具体步骤如下
(I)按照视频复杂度度量方法判断当前宏块是否嵌入了水印。如果宏
块的具有高度的视频复杂度,即表示该宏块内部嵌入了水印信息。进
行下一步操作提取水印信息。如果宏块的纹理或运动趋势较平缓,即
表示该宏块没有隐藏水印信息,即转到下一宏块,重新从这一步判断
。
(II)对于选定的宿主宏块,边缘12个子块依据宏块的中轴线分为左
右两组,计算左右两组运动参数均值VRight和Vleftt。按照下式确定的嵌入点
位置:
V ‾ right < V ‾ left , p 1 and p 2 is embedding position V ‾ right ≥ V ‾ left , p 3 and p 4 is embedding position - - - ( 26 ) ]]>
(III)如嵌入方法(IV)~(VI),计算出相对差值D、相对较大差值Dma
x和相对较小差值Dmin
(IV)按下式的规则提出水印信息。
w = 1 , D min < D max w = 0 , D min ≥ D max - - - ( 27 ) ]]>