基于DC系数的MPEG2视频水印实现方法技术领域
本发明是一种基于DC系数的MPEG2视频水印实现方法,针对
MPEG2格式的视频进行水印的嵌入和检测,属于计算机信息安全领
域。本发明不需要完全解码和重新编码全部视频数据,嵌入水印前后
视频的数据量不发生变化,解决了以往视频水印中由于水印嵌入过程
中直流成分对重建视频图像的质量有很大影响的问题,不需要引入复
杂的移位补偿系统,大大降低了压缩视频码流中嵌入水印的复杂度。
背景技术
视频水印也就是加载在数字视频上的水印,是一种有效的数字产
品版权保护和数据安全维护技术。近年来数字水印技术取得了很大的
发展,但研究方向主要集中于静止图像水印技术,在视频水印研究方
面,由于包括空间掩蔽效应等特性在内的更为精确的人眼视觉模型尚
未完全建立,使得视频水印技术相对于图像水印技术发展滞后,现有
的标准视频编码格式又造成了水印技术引入上的局限性。
由于数字视频是连续播放的图像序列,其相邻帧之间的内容有高
度的相关性,连续帧之间存在大量的数据冗余,使得视频水印容易遭
受帧丢弃、帧交换等各种攻击,而且目前为了节约视频数据存储空间
和便于传输,视频的主要存在模式是压缩格式的,视频水印在很大程
度上是与压缩编码标准紧密联系在一起的,因此视频水印除了具有一
般水印技术的特征外,还有一些特殊的要求,例如视频速率的恒定性、
与视频编码标准相结合性等特征。
目前视频水印的嵌入方法很多,主要有:一、直接嵌入到原始视
频数据流中,其优点是嵌入方法多,可以使用图像水印的嵌入方法,
缺点是增加了视频码流并且降低了视频的质量。二、水印嵌入到编码
阶段的离散余弦变换(DCT)域中,同样也会影响视频的质量。三、
水印直接嵌入到压缩比特流中,此方案不会导致视频质量下降,但是
限定了嵌入水印的容量。
现在大多数的图像水印嵌入方法都是利用频域水印算法,例如利
用DCT变换的特性,可以使得水印数据分布在整个空间域中,所以
具有很好的不可感知性。但是由于压缩视频格式上的限制,使得视频
水印算法相比图像水印难度增大很多,目前视频水印技术还存在以下
主要的问题:一是视频水印的不可感知性、鲁棒性和嵌入容量三者之
间的相互矛盾还不能很好地解决;二是视频水印的嵌入前后需要满足
码率约束条件的要求,使得视频水印算法难度增大;三是全部解码压
缩视频数据添加水印后重新编码的方法不能够满足视频水印实时性
的要求。
发明内容
为了克服现有视频水印系统存在的上述问题,本发明提出了一种
基于DC系数的MPEG2视频水印实现方法,该方法实现简单、效率
高。
本发明的主要特征在于:提出了基于MPEG2视频I帧的每一个
条带中最后一个宏块中Y分量的最后一个DC系数的水印嵌入方案,
不同于传统的水印算法,不需要全部解码视频数据,然后反量化后做
IDCT变换,嵌入水印后再做DCT变换后重新编码,在满足视频水印
的鲁棒性、不可见性等基本要求的基础上,大大降低了视频水印嵌入
系统的复杂度。
本发明的视频水印嵌入方案如图1所示。这种基于DC系数的视
频水印嵌入方法是以MPEG2视频作为输入,经过预处理的版权内容
作为水印信息,然后经过水印的嵌入处理后,输出带有水印的MPEG2
视频。提取水印的过程是嵌入水印的逆过程,对嵌入水印后的视频部
分解码,通过相应的水印提取算法提取水印信息。
具体方法步骤为:对输入的原始MPEG2视频嵌入水印之前,先
要对水印图像信息做预处理;然后在视频载体中嵌入预处理后的水印
信息;提取水印信息的时候,不需要参考原视频,直接通过相应的水
印提取算法处理嵌入水印后的视频并从中提取水印信息。
1.水印的预处理
水印预处理的基本原理就是采取一定的预处理方法将水印(以图
像水印为例)映射成一个无序的序列,从而打破原来水印像素之间的
相关性,增强水印的隐蔽性和鲁棒性。然后在视频载体中嵌入预处理
后的水印信息。
混沌现象是在非线性动力系统中出现的确定性的、类似随机的过
程。一类非常简单却被广泛研究的动力系统是Logistic映射,Logistic
映射定义为:xi+1=μxi(1-xi),xi∈(0,1)。混沌动力系统的研究结果
表明,当3.5699456<μ≤4时,Logistic映射工作处于混沌状态。而纠
错编码的基本思想是通过对原信息序列做某种变换,使原来彼此独
立、互不相关的信息码元变成具有一定的相关性和一定规律性的数据
序列,而信息传输的接收方可以根据这种规律进行检测,并纠正码元
在信道传输中所造成的差错。
混沌序列的形式简单,只要有混沌映射的参数和初始条件就可以
方便地产生、复制混沌序列,并且它对初始条件非常敏感,一般不同
的初始值,即使相当接近,迭代出来的轨迹都不相同。与此同时,(7,
4)汉明码方法非常简单快捷,而且,水印技术要求算法比较简单,
对预处理也简单易行,因此汉明码能够保证水印的效率。所以本发明
中采用混沌映射和纠错码相结合的方法处理水印信息,水印预处理的
具体过程如下:
(1)利用混沌系统生成实值序列
根据Logistic映射定义:xi+1=μxi(1-xi),其中1≤μ≤4,xi∈(0,1)。
选定一个密钥x0,x0可以在取值范围内取任意实数,在3.5699456和
4之间选取一个μ,利用Logistic映射生成实数值序列
{xi|i=0,1,2,,n},这是一个混沌映射的轨迹点所形成的序列。
(2)将实值序列转换成二值序列
将上述生成的实值混沌序列{xi}代入下面的阈值函数τ(xi):
τ ( x i ) = 0 , 0 ≤ x i ≤ 1 2 1 , 1 2 < x i ≤ 1 ]]>(公式1)
这样我们就可得到二值混沌序列,记为:
S={ki|ki=τ(xi),i=0,1,2,,n}。
(3)调制水印信息
设原始水印信号为其中
的值取是0或者1,由二值混沌序列采用按位进行
异或的方法进行调制,得到新的水印信号:
对水印信号进行调制实际相当于
对其进行了加密,只有知道密码的人才能进行解调,保证了水印信号
的安全性。
(4)增加纠错编码
对上述产生的水印信号添加(7,4)汉明纠错码,生成最终要嵌入的
水印信息。
2.水印的嵌入
在MPEG2编码标准中,有3种图像类型:内部编码帧(I帧)、
前向预测帧(P帧)和双向预测帧(B帧)。I帧的编码是利用帧内相
邻像素间的空间域冗余来压缩信息,P帧编码时要用到先前的帧,当
前帧又可以作为后面预测帧的参考帧,B帧的数据压缩效果最显著,
它的预测需要先前和后续的信息,且自身不能作为其他帧的预测参考
帧。由于P、B帧的冗余很少,水印嵌入在P、B帧要求算法难度较
大,嵌入水印的效果也不是很好。其次,人眼对亮度信号(Y分量)
比对色度信号(U、V分量)更加敏感,嵌入在色度信号中的数据在
压缩时很容易被清除。所以,本发明针对目前传统视频水印嵌入算法
存在的问题和不足,在深入分析MPEG2视频编码结构的基础上,利
用视频编码对每一个条带中前后各个块的DC系数都采用差分编码的
特点,提出在视频的I帧的每一个条带的最后一个宏块的Y分量的最
后一个DC系数嵌入水印的方法。
(1)水印的嵌入点选择
在MPEG2视频编码格式中,由于编码的都是DCT系数,视频
图像的大多数能量都集中在低频部分,因而在较低频部分嵌入水印具
有一定的鲁棒性。在每一个条带的Y、U、V分量中各自的8×8块中
的DC系数(量化后的系数)之间采用的是差分编码,所以修改一个
条带中的Y(或者U、V)分量中的最后一个宏块中的最后一个DC
系数不会影响到本条带中的Y(或者U、V)分量中的其他数据块中
的DC系数,如果修改其他位置的DC系数,则条带中此系数后的其
他所有DC系数都将会随之而改变,从而会严重影响视频的视觉效果,
所以本发明的思想是在一个条带的Y分量中的最后一个宏块中的最
后一个DC系数中嵌入水印,保证了对原始视频的质量的影响最小。
(2)水印的嵌入方法
根据MPEG2视频编码格式中DC系数和其VLC编码量的关系
可知,一个DC系数L的VLC编码量要么是和L+1的VLC编码量相
等,要么是和L-1的VLC编码量相等。如下表1所示:
表1
其中,DC表示量化后的直流系数,在表格中各个区间中的DC
只能取整数,f(DC)表示DC的VLC编码位数。所以,本方案中是通
过部分解码MPEG2视频的I帧数据,修改每一个条带的最后一个宏
块中的亮度分量的最后一个DC系数来嵌入水印。具体嵌入方法如下:
(公式2)
其中,f(DC)表示DC的VLC编码位数,f(DC+1)表示DC+1的
VLC编码位数,可以取的值是3、4、6、7、9、11、13、15、17、19
和20。当要嵌入的水印信息位是0时,如果DC为偶数,则不改变原
来的系数,如果为奇数则调制为DC′,重新编码系数后放回原始视频
流中。同理,当要嵌入的水印信息是1时,如果DC为奇数,则不改
变原来的系数,如果为偶数,则调制为DC′,重新编码系数后放回原
始视频流中。DC′的调制方法如公式2所示。这种和视频编码特征相
结合的水印嵌入算法在满足视频水印不可见性、鲁棒性等基本特性的
基础上,保证了水印嵌入前后视频编码量不会改变,大大减小了视频
水印系统的复杂度,提高了视频水印的嵌入和提取效率。
(3)水印的嵌入过程
本发明中视频水印的具体嵌入过程如下:
a)将用Logistic混沌映射和纠错编码相结合的方法处理后的数
据作为水印信息,其每一位数据为0、1比特序列。
b)提取MPEG2视频部分中的I帧数据,解码一个条带并计算条
带中的亮度分量中的最后一个宏块中的最后一个DC系数。
c)当要嵌入的水印信息位是0时,如果DC为偶数,则不改变
原来的系数,如果为奇数则调制为DC′,重新编码系数后放回原始视
频流中。同理,当要嵌入的水印信息是1时,如果DC为奇数,则不
改变原来的系数,如果为偶数,则调制为DC′,重新编码系数后放回
原始视频流中。
d)重复上述过程直到所有的水印信息位都嵌入到视频当中为止。
3.水印的提取
提取水印信息的基本过程是嵌入水印的一个逆过程,同样只需要
解码并计算MPEG2视频I帧的每个条带中Y分量中的最后一个宏块
中的最后一个DC系数,如果其为偶数则嵌入的是0,是奇数则嵌入
的是1。提取完所有数据后再利用汉明码纠错,最后再与混沌序列做
异或运算则可以得到嵌入的水印信息。提取水印信息的具体过程如
下:
(1)解码嵌入水印后的视频数据的I帧的每一个条带,计算条
带的最后一个宏块Y分量的最后一个DC系数,在此不需要对DC系
数反量化。
(2)如果上述DC系数是奇数则提取一位比特1,如果是偶数则
提取一位比特0。
(3)重复上述过程直到所有的信息都被提取完毕为止。
(4)对提取出来的水印信息利用汉明码纠错,然后再与混沌序
列做异或运算,得到原始的水印信息。
附图说明
图1:基于DC系数的MPEG2视频水印的总体方案流程
图2:测试输入的原始视频中的第一帧图像
图3:测试输入的原始视频中的第二帧图像
图4:测试输入的原始水印图像
图5:嵌入水印后的原始视频的第一帧图像
图6:嵌入水印后的原始视频的第二帧图像
图7:提取出来的水印图像
具体实施方式
根据图1配置本发明的实施例。本实施例中计算机为“DELL计
算机,Intel(R)Core(TM)2Duo CPU E75002.92GHz,2GB内存,320G
硬盘”。采用VC++编程实现。
在视频水印的嵌入和提取过程中,采用混沌映射和纠错编码相结
合的方法处理后的版权数据(以图像数据为例)作为水印信息。同时
需要部分解码视频的I帧数据,提取出亮度分量的DC系数,这里的
DC系数是量化后的系数,取值范围是-2048到2047之间的整数。然
后嵌入水印信息后重新写入视频码流中。提取的过程和嵌入过程是一
个反过程,也需要部分解码视频的I帧数据,提取相应位置处的DC
系数并求得每一位嵌入的水印信息。具体实施步骤如下:
1.水印的预处理
采用Logistic混沌映射和纠错编码相结合的方法处理原始水印图
像,映射成一个无序的序列,从而打破原来水印像素之间的相关性。
最后的水印信息是一些无序的、无相关性的比特。
针对原始水印数据(如图4所示),首先把水印数据读入到内存
当中,并且计算数据的长度Length,则混沌序列的长度Size=Length
×8,然后执行以下步骤:
(1)根据Logistic混沌映射的基本原理xi+1=μxi(1-xi),其中
1≤μ≤4,xi∈(0,1),i<Size,选定一个密钥x0为0.2,在3.5699456
和4之间选取一个μ为3.9,利用Logistic映射生成实数值序列,也就
是混沌映射的轨迹点所形成的序列。
(2)上面生成的实数值序列共Size个数据,其中每个数据都是
0和1之间的实数,把大于等于0.5的数置为1,小于0.5的数置为0,
最后将混沌实值序列转换成只有0和1的二值序列。
(3)针对Length字节的水印数据,计算求得每一个字节的8位
二进制0、1比特并分别保存在一个8个字节的数据缓冲区中,所以
缓存区的大小是Size字节,每个字节的数据都是0或者1。
(4)将上述Size字节的水印信息和相同数量的二值混沌序列的
对应数据(水印数据的第n个字节和混沌序列的第n个字节,其中
n<Size)进行异或,得到新的水印信号。
(5)对上述产生的水印信号添加(7,4)汉明纠错码,生成了最终
要嵌入的水印信息。对于每四个码字b3,b2,b1和b0,根据如下线
性关系计算出监督码元r2,r1和r0。
r 2 = b 3 ⊕ b 2 ⊕ b 1 ]]>
r 1 = b 3 ⊕ b 2 ⊕ b 0 ]]>
r 0 = b 3 ⊕ b 1 ⊕ b 0 ]]>
增加后的码字是b3,b2,b1,b0,r2,r1和r0,比如原来的四
位码字1100变为了最后的1100001七位码字。
2.水印的嵌入
针对上面预处理后的水印信息,根据MPEG2视频的数据编码结
构,在解码的过程中嵌入水印。由于水印信息是嵌入在视频的I帧的
每个条带,所以需要解码找到视频I帧的条带层数据,具体过程如下:
(1)对于每一个视频序列,从视频序列头(0x000001B3)开始
解码,找到32位的图像头0x00000100,提取并解析其中的图像头部
数据,获得图像头部数据的表示帧类型的参数p,p的值可能是1(表
示是I帧),2(表示是P帧)或者3(表示是B帧)。
(2)如果参数p的值是1,当前帧则为I帧,如果不是1,则继
续解码下一帧图像,直到找到I帧为止。
(3)解码找到视频I帧后,根据MPEG2视频结构的条带头信息,
找到视频的每一个条带。
在找到视频条带层数据的前提下,开始对条带层的数据解码,实
验中的视频一帧图像(如图2、图3)共有36个条带,然后需要逐步
解码条带中的每一个宏块,直到找到每个条带中的最后一个宏块,然
后在这个宏块中嵌入水印信息,具体的嵌入过程如下:
(1)在解码找到条带最后一个宏块的基础上,依次解码宏块中
Y分量的每个8×8数据块,得到Y分量的最后一个8×8数据块的
DC系数。
(2)在上面提取出来DC系数的基础上,根据DC系数所需要
VLC编码量的大小来修改DC系数嵌入水印信息,当要嵌入的水印信
息位是0时,如果DC为偶数,则不改变原来的系数,如果为奇数,
则需要使DC系数加1或者减1(如果DC系数加1后的视频编码量
和原DC系数的编码量不相等,则让DC系数减1),重新编码改变后
的DC系数后放回原始视频流中。同理,当要嵌入的水印信息是1时,
如果DC为奇数,则不改变原来的系数,如果为偶数,则需要使DC
系数加1或者减1(如果DC系数加1后的视频编码量和原DC系数
的编码量不相等,则让DC系数减1),然后重新编码改变后的DC系
数后放回原始视频流中。
(3)重复上述(1)、(2)两个过程,直到所有的水印信息嵌入
完毕为止。
3.水印的提取
水印的提取是水印嵌入的一个逆过程中,同样也是在解码的过程
中提取水印。由于水印信息是嵌入在视频的I帧的每个条带,需要解
码找到视频I帧的条带层数据,具体的过程如下:
(1)对于每一个视频序列,从视频序列头(0x000001B3)开始
解码,找到32位的图像头0x00000100,提取并解析其中的图像头部
数据,获得图像头部数据的表示帧类型的参数p,p的值可能是1,2
或者3。
(2)如果参数p的值是1,当前帧则为I帧,如果不是1,则继
续解码下一帧图像,直到找到I帧为止。
(3)解码找到视频I帧后,根据MPEG2视频结构的条带头信息,
找到视频的每一个条带。
在找到视频条带层数据的前提下,开始对条带层的数据解码,需
要逐步解码条带中的每一个宏块,直到找到每个条带中的最后一个宏
块,在这个宏块中提取水印信息,具体的提取过程如下:
(1)在解码找到条带最后一个宏块的基础上,依次解码宏块中
Y分量的每个8×8数据块,得到Y分量的最后一个8×8数据块的
DC系数。
(2)在上面提取出来DC系数的基础上,根据这个DC系数的
奇偶性判断嵌入的每一位水印比特信息是0或者1。如果这个DC系
数是奇数则说明嵌入的比特是1,如果是偶数则说明嵌入的是比特0。
(3)由于对水印信息进行了预处理,水印全部提取完毕后,得
到的是无规律、无意义的比特序列,保证了水印信息的安全性。
(4)对上述比特序列使用(7,4)汉明码纠错,根据汉明码的纠错
原理,原信息码元与监督码元满足下列校验关系:
s 2 = r 2 ⊕ b 3 ⊕ b 2 ⊕ b 1 ]]>
s 1 = r 1 ⊕ b 3 ⊕ b 2 ⊕ b 0 ]]>
s 0 = r 0 ⊕ b 3 ⊕ b 1 ⊕ b 0 ]]>
计算出来的s0、s1和s2为矫正子。根据一致性监督关系,如果
接收的码组没有错误,则s1=s2=s3=0;当码组在传输过程中发生单个
错误时,在s1、s2、s3的计算结果中,至少有一个不为零。这样根据
结果就可以唯一地确定错误的位置并给与纠正。经过(7,4)汉明码纠错
后得到长度为Size字节的码流,每个字节的数据都是0或者1。
(5)把上述纠错后的信息利用和二值混沌序相异或的方法恢复
原始水印信息,这里的混沌序列和水印预处理过程中的完全一样。
(6)针对上述提取的Size字节(数据都是0或者1)的水印信
息,按照每8个数据保存在一个字节的方式重新组织数据,最后得到
长度为Length字节的水印信息,写入图片文件后,得到最后的水印
图像,如图7所示。
为了评测本发明嵌入水印的效果,我们利用本实施例中的方法进
行了实验。实验采用MPEG2格式的视频作为原始压缩视频序列,每
一帧视频图像的大小都是352×228,水印信息为一个二值图像,大
小为32×32。图2和图3为原始视频的两帧图像,图4为原始水印
二值图像,图5和图6是本算法嵌入水印后的两帧图像,由于本发明
中只是在视频数据I帧的每一个条带中修改一个DC系数,并且修改
后的量也不是很大,所以嵌入水印后的视频和原来的视频几乎没有任
何差别。图7是本算法提取出的水印图像,和原始的水印图像几乎没
有任何差别。
实验结果表明,由于在水印的嵌入过程中,结合了MPEG2视频
的具体编码特征,在确保视频编码量不变的基础上修改I帧图像中每
个条带亮度分量的一个DC系数,保证了嵌入水印前后视频质量完全
没有下降。此外,由于在水印的嵌入和提取中并没有DCT和IDCT
以及量化和反量化等影响原始视频和原始水印信息质量的过程,只是
在码流中直接调制嵌入水印,而且对提取的水印信息使用了汉明码纠
错,保证了提取的水印信息和原信息完全没有差别。
本发明采用基于DC系数的MPEG2视频水印算法,结合MPEG2
视频编码特征,在编码视频的I帧的亮度分量中嵌入水印信息,从而
保证了视频水印的鲁棒性。在水印嵌入位置上,本发明选择对视频质
量影响最小的每一个条带的最后一个宏块的Y分量的最后一个差分
DC系数,使得修改DC系数后并不会影响到其他条带的视频数据。
在水印的嵌入提取算法中,本发明结合MPEG2视频中DC系数采用
霍夫曼差分编码特征,在保证添加水印前后DCT系数的编码量不变
的基础上嵌入水印信息。本发明中水印的嵌入和提取过程中并不涉及
大量的数据DCT、IDCT变换以及量化和反量化等数学过程,大大降
低了视频水印系统的复杂度,提高了水印的嵌入和提取效率,并增强
了水印信息提取的准确度。