用matlab给图像加水印,大神,在MATLAB中将图像水印插入音频文件可否给我个具体的步骤啊!很着急​...

最佳答案

matlab不能直接读取mp3文件,可以将文件转换成wav格式在进行水印的嵌入

wav格式音频水印嵌入代码clc;clear;closeall;

%水印嵌入程序

%读取音频信号3.wav存到变量A中

[A,fs,nbits]=wavread('3.wav');

%绘制原始声音图像

subplot(211);plot(A);

axis([0350000-22]);

title('原始声音信号波形图');

%用变量L存储音频A的长度

L=size(A);

%读取图像Lena.bmp存入变量M做水印信号

M=imread('Lena.bmp');

%将图像Lena.bmp转化为二值图并存入变量BW

BW=im2bw(M);

%计算水印矩阵大小

[M1,M2]=size(BW);

%M12为中间变量,避免每次都计算M1*M2

M12=M1*M2;

%降维,将水印信息得到的一维序列存入序列C中

C=reshape(BW,1,M12);

n=M12;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%对水印信号进行扩频处理,效果不是很好

%扩频系数为2

n=M12*2;

M=zeros(n,1);

%产生密钥序列M

fork=1:n

ifmod(k,4)==0

M(k)=1;

else

M(k)=0;

end

%水印信号序列分别按位与密钥异或

l=ceil(k/2);

S(k)=bitxor(C(l),M(k));

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%嵌入一个水印信息需要的音频数据为N

N=10;

length=n*10;

%将原始音频信号分解为Ae和Ar两部分

i=1:length;

j=[1];

%取矩阵A的l到length行构建矩阵Ae

Ae=A(i,j);

%Ae(i,j)

i=length+1:L;

%取矩阵A的length到L行第一列构建矩阵Ar

Ar=A(i,j);

%建立元胞B,每个音频数据段Ae(m)是B的一个元素

k=1;

%建立M1xM2行l列的元胞

B=cell(n,1);

th=n*N;

%当k小于Ae的长度时,矩阵Ae每10行作为一个音频数据段存入元胞B中

while(k

i=k:k+9;

m=(k+9)/10;

B{m,1}=Ae(i,j);

k=k+10;

end

%建立元胞D,并将元胞B中离散余弦变换了的元素存入元胞D中

D=cell(n,1);

fori=1:n

D{i,1}=dct(B{i,1});

end

%建立元胞E,储存嵌有水印信号的中频系数

E=cell(n,1);

E=D;

fori=1:n

%%将水印信息C嵌入音频中

%E{i,1}(3)=(D{i,1}(3))*(1+2*C(i));

%将扩频了的水印信息S嵌入音频中

E{i,1}(3)=(D{i,1}(3))*(1+2*S(i));

end

%建立元胞F

F=cell(n,1);

%将元胞E中离散余弦反变换了的元素存入元胞F中

fori=1:n

F{i,1}=idct(E{i,1});

end

%将所有分离的段合并创建到一维矩阵G中

G=F{1,1};

%i从3到M1*M2依次取值

fori=2:n

%将元胞G和元胞F第i组元素合并创建到一维矩阵G

G=[G;F{i,1}];

end

%将元胞G和矩阵Ar合并创建一维矩阵G

G=[G;Ar];

wavwrite(G,fs,nbits,'test.wav');

subplot(212);plot(G);

title('含水印的声音信号波形图');

axis([0350000-22]);

最佳答案由网友  直钩钓客.  提供

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值