水印设计和嵌入位置
在编码端,首先对每个DCT块内的非零系数的最低有效位进行判别,DCT块经过字变换(zia-zia)扫描之后,如果非零系数在偶数位置,则将最低有效位置0,即LSB=0;如果非零系数在奇数位置,则将最低有效位置1,即LSB=1。因为DCT系数中直流分量携带的信息量很大,如果对直流分量进行处理,将会导致图像的PSNR值急剧下降,严重影响解码后的图像效果,所以,本文只对交流系数进行处理。在解码端,对这些位置的交流系数进行检查。在奇数位置,如果DCT系数为偶数,则说明该编码块出错;在偶数位置,如果DCT系数为奇数,则说明该编码块出错。其方法如下:
非零DCT交流系数在偶数位置时:
非零DCT交流系数在奇数位置时:
AC为DCT变换后的交流系数,ACW为加载脆弱数字水印后的DCT交流系数,为符号函数。本方案采用在最低有效位嵌入水印模式,因此不需要额外的比特进行编码。图1即为帧内宏块嵌入水印模式的流程图。
由于H.264标准采用了帧内和帧间预测来参与对某一宏块的编解码。为了保证编解码端参与预测的数据一致性(因为解码端不可能使用未嵌入水印的原始数据参与预测),避免数据失配造成图像质量恶化,水印嵌入操作必须放到运动补偿循环内,即量化之后、熵编码之前进行,如图2所示。