通过扩频和DCT变换算法将图像水印嵌入到音频信号中并提取水印matlab仿真

发布时间 2023-04-12 22:27:55作者: 我爱C编程

1.算法仿真效果

matlab2022a仿真结果如下:

 

 

 

 

2.算法涉及理论知识概要

       数字多媒体技术及互联网技术的迅猛发展,使得图像、视频和音频等多种形式的多媒体数字作品的创作、存储和传输变得极其便利。以mp3为代表的音乐作品通过网络渗透到世界的每一个角落。人们可以很方便地通过网络下载自己喜欢的音乐,这不仅促进了信息的共享,同时也使得人们获得资源的成本大大减少。但随之带来的问题是:盗版者可以利用网络途径获得这些非授权资源,制作成大量的CD光盘等进行非法销售,并获得巨大的商业利益,使得作品的制作者或发行者蒙受巨大的损失。在水印技术提出之前,传统的加密技术是版权保护的主要手段,但是,由于数字产品发行量非常大,且易于复制,并且考虑到音乐制片公司需要在网络上宣传产品,这就给非法盗版者以可乘之机。因此,如何实施网络环境下的版权保护和信息安全已经成为一个亟待解决的问题。在这样的背景下,能够有效实现版权保护的数字音频水印产生了。

 

       数字水印技术利用多媒体信息(图像、视频、音频等)中存在的冗余信息及人类感知系统的特性,在不影响原始多媒体信息格式和质量的前提下把额外的信息(即水印)隐藏到多媒体信息中。数字水印是一个多学科高度交叉的新兴研究领域,它涉及了图像、视频、音频的信号处理和密码学、通信理论、编码理论信号压缩和人类听视觉理论等多门学科。数字音频水印技术是信息隐藏技术的一个分支,信息隐藏技术是一个新的研究方向。该技术的出现,无疑会给网络化的多媒体信息安全保存和传送开辟一条全新的捷径。近年来音频信息隐藏技术的研究工作的发展速度很快,尤其是在变换域音频信息的数据嵌入技术,能够更好的保护水印信息的稳健性和安全性,使得研究更加的具有现实性,所以数字音频水印技术一个发展前景很好的学科。

 

2.1音频水印

       目前数字音频水印算法研究主要分为三类,时间域水印算法、变换域水印算法、基于听觉特性的水印算法。时间域水印算法通常采用扩展频谱的方法,即把代表水印信息的伪随机序列,通过具备心理声学模型频域掩蔽效应的滤波器进行滤波,使这种全频带的噪声完全位于听觉掩蔽曲线以下,人耳完全不能觉察。回到时域以一定的强度叠加到音频信号的振幅上,水印提取的时候根据伪随机序列的自相关性值为1和互相关性为0的特点来验证水印信号的存在.变换域的水印算法通过快速傅立叶变换,离散余弦变换离散小波变换,在频域的适当位置通过抖动调制或直接叠加的方法,改变变换域系数来嵌入水印。主要利用音频信号在时域的后向掩蔽,即用弱信号在强信号消失50-200ms之后变得无法听见。将原始音频数据以一定的衰减程度并延迟一定的时间迭加到原始音频数据以产生回声,并以不同的延迟时间和衰减振幅来标志水印数据的“0”或“1”,水印数据提取时,根据回声间距检测,利用倒谱的自相关峰值的位置来判断“0”或“1“。

 

       算法流程图如图2所示。

 

 

 

 

2.2水印的嵌入

A是原始音频信号,根据音频文件类型将它分为两部分

 

       A = AH +AL                                (1

 

其中:AH 是与文件类型相关的部分,所以保留下来不做处理;AL是可以嵌入水印的部分,长度是L ,它可以表示为

 

       A ={a(l),0 l<L}                             (2

 

其中a(l) ALI个数据的幅值。

 

     假设水印是视觉可辨别的、大小为M1×M2的二值图像,它可以表示为

 

       W ={w(I,j), 0I<M1, 0j<M2}                       (3

 

   其中w(I,j) {0,1}。具体水印嵌入算法步骤如下。

 

水印的降维操作:因为音频信号是一维信号,所以图像水印必须进行降维处理,降维后的水印信号表示为

 

 V={v(k)=w(I,j) , k=I×M1+j,kM1×M2}                    (4

 

水印信号的置乱:为了进一步提高安全性,对待嵌入的水印信号进行置乱,在这里,用线形反馈移位寄存器进行置乱。

 

原始音频信号的一维离散小波变换:选择合适的小波基进行一维小波三级分解。

 

 DL=DWT(AL)= cA3 cD3cD2cD1                      (5

 

离散小波逆变换:以C*’代替5式的cA3作离散小波变换,得到嵌入水印后的小波变换域的表示式为

 

   DL=C*cD3 cD2 cD1                                         

 

再作离散小波反变换,就得到了时域中含有水印信号的音频信号

 

  AL=IDWT(DL)                                                        6

 

AL代替AL最终得到含有水印的音频信号

 

   Aw=AH  + AL                                                          (7)

 

2.3水印的提取

AS 是待检测的数字音频信号,水印的提取过程可描述如下。

 

信号分段:先对待检测的音频信号进行分段,即 As=AsH +AsL, 然后对含有水印的音频段进行三级离散小波分解,即

 

DsL=DWT(AsL)= cAs3 cDs3 cDs2 cDs1                              (12)

 

散余弦变换:将1)的近似分量cAs3 提取出来,对其进行离散余弦变换,长度为Ls’,

 

CLs=DCT(cAs3)={cls(n),0nLs-1}                                  (13)

 

水印的提取:通过排序选择长度满足水印长度的离散余弦系数Csk,进行水印提取,根据水印嵌入的位置和原始音频信号的离散余弦系数Ck ,依据下式得到序列

 

 

 

                     (14)

 

 逆置乱:将得到的序列{v( k)}进行逆置乱,得到水印信号的一维序列{v(k)}

 

升维处理:对水印序列{v(k)} 作升维处理,将一维的序列变为二维的图像

 

Ws={ws(I,j)=vk, 0iM1-1, 0jM2-1, k=I×M1+j}                         (15)

 

3.MATLAB核心程序

 

L = size(A);
M = imread('china.bmp');%读取图像存入变量M做水印信号
BW = im2bw(M);%二值图
 
[M1,M2] = size(BW);
M12 = M1*M2; 
C = reshape(BW,1,M12);% 降维,将水印信息得到的一维序列存入序列C中
n = M12;
 
% 对水印信号进行扩频处理
n = M12*2;
M = zeros(n,1);
for k = 1 : n
    if mod(k,4) == 0
        M(k) = 1;
    else 
        M(k) = 0;
    end
    % 水印信号序列分别按位与密钥异或
    l = ceil(k/2);
    S(k) = bitxor(C(l),M(k));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N = 10; %嵌入一个水印信息需要的音频数据为N
length = n*10;
i = 1 : length;% 将原始音频信号分解为Ae和Ar两部分 
j = [1];
Ae = A(i,j);% 取矩阵A的l到length行构建矩阵Ae
i = length+1 : L;
Ar = A(i,j);% 取矩阵A的length到L行第一列构建矩阵Ar
 
k = 1;
B = cell(n,1);% 建立M1 x M2行l列的元胞
th = n*N;
while ( k < th )
    i = k : k+9;
    m = (k+9)/10;
    B{m,1} = Ae(i,j);
    k = k+10;
end
D = cell(n,1);
for i = 1 : n
    D{i,1} = dct(B{i,1});%DCT变化
end
 
E = cell(n,1);% 建立元胞E,储存嵌有水印信号的中频系数
E = D;
for i = 1 : n
    E{i,1}(3) = (D{i,1}(3))*(1+2*S(i)); % 将扩频了的水印信息S嵌入音频中
end