基于MPEG压缩域的视频数字水印

基于MPEG压缩域的视频数字水印
算法的研究与实现
叶 绿
(浙江科技学院 计算机与电子工程学系,浙江 杭州 310023)

   摘 要: 根据MPEG压缩视频的原理,提出了一种基于MPEG压缩域面向DCT变换的视频数字水印算法,并详细叙述了将水印信息经m序列调制后嵌入到IVOP帧的色度DCT变换的直流系数中的视频数字水印算法设计和实现的过程。实验证明,该视频数字水印算法在不降低视频质量的基础上,能够抵抗多种干扰和攻击,具有良好的稳定性和鲁棒性,并验证了以上分析。
  关键词:MPEG压缩;DCT变换;直流系数;视频水印

Research of a video digital watermarking  algorithm based on MPEG domain
YE Lu
(Dept. of Computer and Electronics Engineering, Zhejiang University
of Science and Technology, Hangzhou 310023, China)

  Abstract: According to the principle of MPEG video compression, this paper bring s forward a video digital watermarking algorithm based on MPEG domain oriented t o DCT transformation, and goes into particulars the process of the design and re alization of the algorithm which embeds the watermarking information modulated b y m sequence into the direct current coefficient of the DCT transformation o f frame'schroma. Experiment verifies that this algorithm, depending on the foun da tion of not reducing the quality of video, can resist multiple disturbance and attack, and have good stability and robust.
  Key words: MPEG compression; DCT transformation; direct current coefficients; video waterma rking

   随着信息技术和计算机网络的飞速发展,人们不但可以通过互联网和CD-ROM方便快捷地获得多媒体信息,还可以得到与原始数据完全相同的复制品,由此引发的盗版问题和版权纷争已成为日益严重的社会问题。因此,数字多媒体产品的水印处理技术已经成为近年来研究的热点领域之一。
  虽然数字水印技术近几年得到长足发展,但方向主要集中于静止图像。由于包括时间域掩蔽效应等特性在内的更为精确的人眼视觉模型尚未完全建立,视频水印技术的发展滞后于静止图像水印技术。另一方面,由于针对视频水印的特殊攻击形式的出现,为视频水印提出了一些区别于静止图像水印的独特要求。
  笔者分析了MPEG视频结构的特点,提出了一种面向DCT变换的视频数字水印算法的改进方案以及实现。
1问题的提出
  
Arena等人提出了水印直接嵌入在MPEG压缩数据比特流域中,从而避免了将水印嵌入在像素域中所必需的将视频码流解码与再编码的繁重的运算。文章提出了水印只嵌入在MPEG中的IV OP帧的算法,不修改PVOP帧和BVOP帧,这是基于如下考虑:减小算法复杂度;对帧跳跃与帧删除稳健,因为IVOP帧不可以被跳跃或删除。文章还指出,为了更容易地依据MPEG语法结构来处理,该算法选择宏块而不是像素作为比特流的操作单位,将水印信息的每一个比特位扩展到一定数量的宏块中。水印嵌入在压缩比特流中,虽其显著优点是没有解码和再编码的过程,不会造成视频质量的下降,但是由于压缩比特率的限制而限定了嵌入水印的数据量的大小。
  因此,我们提出了一种基于MPEG压缩域的面向DCT变换的视频数字水印算法,其方法是首先 把图像分成8×8的不重叠像素块,再经过分块DCT变换,得到由DCT系数组成的频率块,然后随机选取一些频率块,将水印信号嵌入到由密钥控制选择的一些DCT系数中。因为本算法是将水印信息嵌入到直流系数中,所以具有较高的鲁棒性。正是由于DCT变换是目前多媒体视频压缩几大标准 (H.261,H.263,MPEG等 )中共同采用的技术基础,基于DCT的水印算法在压缩视频中具有显著的优势。这种方案不但无需引入额外的变换以获取视频的频谱分布,而且能有效抵抗其中DCT参数重新量化的影响。
2算法的设计
   在视频数字水印设计中应考虑的几个方面是:① 水印容量嵌入的水印信息必须足以标识多媒体内容的购买者或所有者;② 不可察觉性嵌入在视频数据中的数字水印应该不可见或不可察觉;③ 鲁棒性押在不明显降低视频质量的条件下,水印很难除去;④ 盲检测水印检测时不需要原始视频,因为保存所有的原始视频几乎是不可能的;⑤ 篡改提示当多媒体内容发生改变时,通过水印提取算法,能够敏感地检测到原始数据是否被篡改。
  视频水印的嵌入算法一般可分为三类:
  (1) 水印直接嵌入在原始视频流中。此方案的优点是:水印嵌入的方法较多,原则上数字图像水印方案均可应用于此。缺点是:会增加视频码流的数据比特率;经MPEG有损压缩后会丢失水印;会降低视频质量;对于已压缩的视频,需先进行解码,然后嵌入水印,再重新编码。
  (2) 水印嵌入在编码阶段的离散余弦变换(DCT)的直流系数(DC)中(量化后、预测前)。此方案的优点是:水印仅嵌入在DCT系数中,不会增加视频流的数据比特率;易设计出抗多种攻击的水印;可通过自适应机制依据人的视觉特性进行调制,在得到较好的主观视觉质量的同时得到较强的抗攻击能力。缺点是:对于已压缩的视频,有一个部分解码、嵌入、再编码的过程。
  (3) 水印直接嵌入在MPEG压缩比特流中。优点是:不需完全解码和再编码的过程,对整体视频信号的影响较小。缺点是:视频系统对视频压缩码率的约束将限制水印的嵌入量;水印的嵌入可能造成对视频解码系统中运动补偿环路的不良影响;该类算法设计具有一定的复杂度。
  在多媒体压缩视频中,MPEG视频编解码基于VOP(Video Object Plane)。从时间上看,分为 帧内(IVOP)、前向因果预测VOP(PVOP)、双向非因果预测VOP(BVOP)、全景的灵影VOP(SVOP) 。IVOP只用本身的信息进行编码,PVOP利用过去的参考VOP进行运动补偿的预测编码,BVOP利用过去和将来的参考VOP进行双向运动补偿的预测编码,SVOP一系列运动图像中的静止背景。因此,IVOP的图像信息较独立,最适合嵌入水印信息。从空间上看,它由若干个大小为1 6×16的宏块(Macro Block)组成,每个宏块包括大小为8×8的6个子块。其中4个亮度子块Y,1个色差子块U,1个色差子块V。
  笔者提出的嵌入算法是第二类方案的改进,通过对选定的DCT系数进行微小变换,以满足特 定的关系,来表示一个比特的信息。为了不受量化过程的影响,本方案将水印嵌入在量化后的DCT系数中,从而提高了水印生存的稳定性。在MPEG压缩算法中,DCT系数的量化是关键,它直接影响视频的质量和码流控制算法。为此,MPEG提供了一个供参考的标准量化表。该表根据人类视觉模型(HVS)建立。考虑到人眼对高频信息损失的敏感度较低频损失小很多,因此通常把水印嵌入到中低频信息中,从而提高了水印信息的鲁棒性。另外, 根据人眼对亮度信息的变化比色度信息较敏感这一特性,为最大限度地保持视频质量,本方案将水印嵌入到色度子块的DCT系数中。由于DCT是目前多媒体视频压缩中被广泛采用的技术基础,因此,基于DCT的视频水印方案具有显著的优势。将水印信息嵌入到IVOP色度量化后的DCT直流系数中,不但无需引入额外的变换以获取视频的频谱分布,且水印信息不受DCT系数量化带 来的影响。
  在水印信号提取时,若选取相同的DCT系数,并根据系数之间的关系抽取比特信息,因为将 水印信息嵌入到视频流中IVOP帧的色度DCT的直流系数中,则经扩频调制后的水印信息嵌入到视频流IVOP(Intra Video Object Plane)中色度DCT直流系数的最低位,就不需要完全解码,所以大大减少的运算的复杂度,提高了实时性。另外,由于嵌入到色度DCT的直流系数中,所以在保证视频效果不失真的前提下,水印具有很强的鲁棒性。下面将根据多媒体压缩视频的特点,进而给出具体的算法及设计过程。
2.1嵌入算法
  
将水印信息经m序列(最长线性反馈移存器序列,m=(m1,m2,…,mM),其中 mi∈{0,1})调制后加入到IVOP的色度子块DCT的直流系数中。DCT的直流系数中,这样的水印信息在不影响视频效果的情况下,一般是难以去除的,所以,鲁棒性是足够强的[6]。关键问题是色度DCT的 直流系统是一个对视觉系统很敏感的参数,本方案在色度DCT的直流系数上加水印相当于对其加入微量干扰,必须使这种干扰低于一定的门限值,使人眼的视觉系统对视频中色度的微小变化感觉不到。经过试验将水印嵌入到IVOP的色度DCT的直流系数的最低位能满足要求。所以将根据直流系数的大小自适应地加上不同的强度水印,以提高数字水印检测率并且提高了视频的效果[7]。
  本算法将视频码流部分解码后,再将水印信息经m序列调制后嵌入到视频IVOP帧的色度D CT的直流系数中。此方案由于是部分解码,因此,减小了完全解码和再重编码的运算的复杂度,并且提高了水印嵌入的速度。
  
每一水印信息会通过m序列的调制嵌入到相应的IVOP色度对应的DCT直流系数(量化后、预测前)的最低位,这样水印信息在不影响视频效果的情况下一般难以去除。同时,嵌入在直流系数的最低位,带来的误差非常小。
  先将每一水印信息位通过一个伪随机序列的调制来嵌入到大量的视频IVOP上色度DCT的直流 系数DC中。具体见下面的公式:
 

   这里的V(i)是已经嵌入水印的IVOP帧上色度DCT的直流系数DC值;b(i)来表示第i个水印比特位,当第i个水印比特位分别为0或1时,b(i)的取值分别为1或-1;a(i)是为了考虑掩蔽效果而用来调整水印强度所使用的系数;P(i)是伪噪声扩展序列,为0、1的m序列,但这里当序列值为0时,P(i)为-1,若序列值为1,则Pi为1。
2.2水印提取算法
  
本方案不需要从原视频码流来提取水印信息。通过对已加入水印的视频码流进行部分解码,针对于IVOP帧上相应的色度DCT的直流系数DC进行如下相关运算:
 

   这里“”是已经嵌入水印的视频码流数据(有可能受到有意或无意的破坏); V(i)=V(i)-a(i)×b(i)×p(i)被看成水印中所引入的噪声。通 过相关值F(k)的结果来得到所嵌入的水印的比特位,误码率依赖于扩展系数Cr,和。m序列的特点是有良好的自相关性,当它与其他序列相乘时,其值非常小,而且随着Cr越大,其值越小并趋于0。所以上式中F(k)的正负主要决定于,也就决定于b(k),所以,检测到的水印比特位与原先嵌入的水印信息比特位是相同的。具体关系如下:若F(k)为正号,即b(k)=1,则水印比特位为1;若F(k)为负号,即b(k)=-1,则水印比特位为0;C(r)是每个水印位所扩展到直流系数DC的个数。
3具体实现方案
3.1视频水印嵌入实现
   首先对多媒体压缩视频流进行部分解码并得到IVOP帧上的色度DCT的直流系数,为了保证视 频的视觉效果,每隔10个色度DCT的直流系数加入一次水印,来修改DC的值dct-dif f,见如下代码:
  dct-diff += Intension * watermarkbit * m[m-index];这里的watermarkbit是依据水印对应比特位而得到的,水印比特位若为0,则watermarkbit = -1; 水印比特位若为1,则water markbit= 1;m[m-index]是长度为127的m序列,是由函数Generate-m-sequenc e()得到的,每个m序列完成对水印的1个比特位进行调制;
 
   Intension是嵌入水印的强度,这里我们根据直流系数DC的绝对值大小来选择不同的强度,这样既可以有效地保证视频效果,又可以提高水印检测率;Intension的值是根据视频效果和检测成功率之间的权衡来更改的。代码如下:
 
  完成上述操作后,将修改后的DC值写入视频码流中,另外,完成一个水印信息嵌入后,将从下一个IVOP帧重复嵌入该水印信息。
3.2视频水印提取实现
  
首先对IVOP帧上的色度DCT的直流系数DC进行计数,因为每隔10个色度DCT的直流系数DC加入一次水印,所以,提取时也每隔10个直流系数DC来进行提取,得到m序列与色度DCT的直流系数的乘积的累加和 dct-diff-sum:dct-diff-sum+=dct-diff*m[m-index];如果 一个长度为127的m序列已经完成,即m-index==M-LEN 时来判断dct-diff-sum是否大于0,若大于0则该信息位为1,否则该水印信息位为0。
 
 
  当tmpchar已经存满8位后,即已经提取到一个水印字符,则将tmpchar存入缓存OutStr中;当缓存OutStr中字符数与水印信息的长度相同时,证明缓存OutStr中的信息应为提取到的水印信息,我们将它与正确的水印信息MarkStr进行同或运算,然后求得相关值cor,最终得到提取正确的水印比特位比例fcor,这里有如下三种情况:
  (1) 如果fcor为1.0,证明提取到水印信息是完全正确的,输出结果为“正确地检测到数字 水印为:******”; 
  (2) 如果fcor > 0.75,证明提取到水印信息是大部分正确的,证明所提取到的信息一定含 有水印,输出结果“有水印存在”;
  
(3) 如果不是前两种情况,那么很难确定是否含有水印信息,输出结果“无水印存在”。
 

 
4实验结果分析
  
试验结果表明,m序列的长度越长,检测效果越好,但能够嵌入的水印信息量也相应地减少,根据检测理论的相关性分析,有水印的符号相关值有明显的峰值现象。因此,可确定检测门限值的方法如下:
  (1)随机生成1 000个数字随机数字种子(不包含用于水印嵌入的随机数种子);
  (2)分别用这1 000个随机数种子生成伪随机序列,并分别计算这1 000个随机数的相关值;
  (3)取1 000个相关值中的最大值作为检测门限值,为准确起见,也可对其进行适当的放大,以降低系统虚检率。所谓虚检(False Positive)率,就是将没有水印信号的运动信号误认为含有水印的运动信号的概率,这样会提高漏检(False Negative)率,即未能从含有水印的运动信号中水印信号的概率,检测结果如图4(b)、(c)所示。
  在本方案中,水印提取时无需原始视频,若水印信息未受到攻击,可提取到原始视频的完全水印;若水印信息受到攻击,如SNR攻击,运动信号传输过程中的容易受到Gauss白噪声的攻击,以信号平均功率为基准计算信噪比,图4(d)给出了加5 dB噪声攻击测试后的信号。根据扩频解调性质,本方案可以最大限度地恢复出原始水印信息。由于DCT是目前多媒体视频压缩几大标准(H .261、H.263、MPEG等)共同采用的技术基础。因此,基于DCT的水印方案在视频压缩中具有非常重要的研究意义和应用前景。
参考文献
[1]TaeYun Chung,KangSeo Park,YoungNam Oh,et al. Digital wate rmarking for copyright protection of MPEG2 compressed video[J]. Consumer Electronics, IEEE Transactions on,1998,44(3):895-901.
[2] Arena S, Caramma M, Lancini R, et al. Digital watermarking applied t o MPEG2 c oded video sequences exploiting space and frequency masking[R]. Vancouver: Ima ge Processing, 2000. Proceedings. 2000 International Conference on,2000,438-441.
[3] 黄继武, SHI Yun Q,程为东. DCT域图像水印: 嵌入对策和算法[J]. 电子学报, 2000,28(4):57-60.
[4] Su K, Kundur D, Hatzinakos, D .A contentdependent spatially localiz ed video watermark for resistance to collusion and interpolation attacks[R]. Vancouver: I mage Processing, 2001. Proceedings. 2001 International Conferenceonon, 2001,818-821.
[5] 易开祥,石教英,孙 鑫.数字水印技术研究进展[J].中国图象图形学报,2001,6(2):111-117.
[6] Frank Hartung, Bernd Girod. Watermarking of uncompressed and compressed video[J]. Signal Processing,1998,66(3):283-301.
[7] 尹康康, 石教英, 潘志庚. 一种鲁棒性好的图像水印算法[J]. 软件学报, 2001, 12(5): 668-676.
[8] Tao B, Dickinson B. Adaptive Watermarking in DCT Domain[R]. Acousti cs: Proc of IEEE International Conf,1997.
浙江科技学院学报
 
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 MPEG-1 音视频压缩的 MATLAB 代码示例: ```matlab %% 音频部分 clear all; clc; % 读取音频文件 [x,fs] = audioread('audio.wav'); % 设置参数 frame_size = 1152; % 一帧的采样数 N = length(x); % 音频文件总采样数 num_frames = ceil(N/frame_size); % 帧数 L = 256; % 每次MDCT的窗口长度 K = 32; % MDCT系数个数 Q = 0.5; % 量化因子 % 创建哈夫曼树字典 dict = huffmandict([0:255],[1:256]); % 初始化一些变量 X = zeros(frame_size,num_frames); Y = zeros(frame_size,num_frames); bits = zeros(num_frames,1); % 对每一帧进行处理 for i = 1:num_frames % 提取当前帧的数据 start = (i-1)*frame_size+1; stop = min(i*frame_size,N); x_frame = x(start:stop); % 对当前帧进行MDCT X_frame = zeros(frame_size,1); for j = 0:floor((frame_size-L)/K) x_j = x_frame(j*K+1:j*K+L); X_frame(j*K+1:j*K+K) = mdct(x_j); end % 对MDCT系数进行量化 Y_frame = round(X_frame/Q); % 将量化后的系数编码成比特流 [bits_frame,dict_frame] = huffmanenco(Y_frame(:),dict); % 存储当前帧的数据 X(:,i) = X_frame; Y(:,i) = Y_frame; bits(i) = length(bits_frame); end % 输出压缩比 original_size = N*8; compressed_size = sum(bits); compression_ratio = original_size/compressed_size; disp(['Compression ratio: ' num2str(compression_ratio)]); %% 视频部分 % 由于视频部分的代码较为复杂,这里只提供一个大致的流程 % 具体实现可以参考其他开源的 MPEG-1 压缩代码 % 读取视频文件 video = VideoReader('video.mp4'); % 设置参数 width = video.Width; height = video.Height; num_frames = video.NumberOfFrames; frame_rate = video.FrameRate; frame_size = width*height; % 初始化一些变量 Y = zeros(frame_size,num_frames); bits = zeros(num_frames,1); % 对每一帧进行处理 for i = 1:num_frames % 读取当前帧 frame = read(video,i); % 将RGB格式转换为YUV格式 YUV = rgb2yuv(frame); Y_frame = YUV(:,:,1); % 对当前帧的Y分量进行DCT Y_frame_dct = dct2(Y_frame); % 对DCT系数进行量化 Y_frame_quant = quantize(Y_frame_dct,Q); % 将量化后的系数编码成比特流 [bits_frame,dict_frame] = huffmanenco(Y_frame_quant(:),dict); % 存储当前帧的数据 Y(:,i) = Y_frame_quant(:); bits(i) = length(bits_frame); end % 输出压缩比 original_size = frame_size*num_frames*8; compressed_size = sum(bits); compression_ratio = original_size/compressed_size; disp(['Compression ratio: ' num2str(compression_ratio)]); ``` 需要注意的是,这只是一个简单的示例,实际的 MPEG-1 压缩算法要比这个复杂得多,包括运动估计、帧间预测、差分编码等等。如果需要更详细的实现,建议参考其他开源的 MPEG-1 压缩代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值