MPEG-4视频数字水印技术的设计与实现
2.2 视频数字水印算法与实现
在MPEG-4视频中,由于IVOP中色度子块的DCT直流系数是一个在视频流中始终存在且很鲁棒的参数,本方案将水印信息经m序列(最长线性反馈移存器序列)调制后嵌入到IVOP的色度子块DCT的直流系数中。这样水印信息在不影响视频效果的情况下难以去除,所以鲁棒性足够强。本方案采用扩频的方法,以方便有效地检测水印,抵抗各种攻击和干扰,保密性好。关键问题是色度DCT的直流系统是一个对视觉系统很敏感的参数,本方案在色度DCT的直流系数上加水印相当于对其加入微量干扰,必须使这种干扰低于一定的门限值,使人眼的视觉系统对视频中色度的微小变化感觉不到。经过试验将水印嵌入到IVOP的色度DCT的直流系数的最低位能满足要求。
2.2.1 视频数字水印的嵌入
伪随机的扩展序列长度为255(28-1),每一水印信息位通过伪随机扩展序列的调制嵌入到相应的IVOP色度对应的DCT直流系数(量化后、预测前)的最低位,这样水印信息在不影响视频效果的情况下一般难以去除。同时,嵌入在直流系数的最低位,带来的误差非常小。
伪随机的扩展序列产生代码如下:
#define M_LEN 255
#define M_SERIES 8
for(i=0;i<M_SERIES;i++) m[i]=1;
for(i=M_SERIES;i<M_LEN;i++)
{
m[i]= m[i-1]+m[i-5]+m[i-6]+m[i-7];
m[i]=m[i]%2;
}
水印信息位扩展调制方式为:
·水印信息位为0,伪随机的扩展序列不变;
·水印信息位为1,伪随机的扩展序列取反。
这个过程可以用异或运算实现。代码如下:
WMij = Wi ^ m[j];
/?觹每一水印信息位扩展调制成255位的扩展调制位*/
这里Wi表示水印信息码流(WMij表示水印信息扩展调制码流。设UDCij表示视频IVOP色度DCT的直流系数)量化后、DC预测计算之前?雪序列,为了方便,用一个字节表示一位二进制码流信息。
水印嵌入过程如下:
if (WMij) UDCij |=1;
/*根据扩展调制后的码流嵌入水印信息*/
else UDCij &=0xFFFE;
2.2.2 视频数字水印的提取
水印信息提取是水印信息嵌入的逆过程,代码如下:
if (inv_UDCij & 1) inv_WMij = 1;
else inv_WMij = 0;
这里inv_UDCij表示带有水印信息的视频IVOP色度DCT的直流系数(反量化前、DC预测计算之后)序列; inv_WMij表示检测到的水印信息扩展调制码流。每个IVOP色度子块在解码时得到一位扩展调制的信号位,每连续255个扩展调制的信号位可解调得到1位水印信息,具体分析如下:
用与原始伪随机序列结构相同且完全同步的序列与得到的连续255个扩展调制的信号接收序列进行异或运算,统计运算后1的个数记为OneCount。由于m序列的自相关函数只有两种取值(1和-1/(2n-1)),属于双值自相关序列。因此,如果数据未受到任何攻击和干扰,OneCount只有两种结果:255或0。当OneCount=255时,得到的水印信息位为1;当OneCount=0时,得到的水印信息位为0。如果数据受到攻击或干扰,OneCount有多种结果。根据统计分析,当OneCount>127时,得到的水印信息位为1,并且这255个IVOP色度子块中有(255-OneCount)个子块受到攻击或干扰;当OneCount<127时,得到的水印信息位为0,并且这255个IVOP色度子块中有OneCount个子块受到攻击或干扰。这样既可以统计总共有多少视频IVOP色度子块受到攻击或干扰,同时又能极强地恢复出原始水印信息。
javascript:window.open(this.src);" style="cursor:pointer;"/>
3 试验结果分析
试验结果表明,m序列的长度越长,检测效果越好,但能够嵌入的水印信息量也相应地减少。本方案中水印只嵌入在视频的IVOP中,不修改PVOP和BVOP,对帧跳跃与帧删除攻击稳健,因为IVOP不可以被跳跃或删除。同时,由于水印信息嵌入在DCT的直流系数中,而直流系数的变化对视频效果会有较大的影响,所以采取将水印信息嵌入到色度子块DCT直流系数的最低位。这样不仅使水印嵌入计算的复杂度大为降低,为MPEG-4