clear all
clc
[a,fs,bits]=wavread('s.wav');%请自己修改路径
subplot(3,1,1);plot(a);
title('原始音频波形图')
w=imread('32.bmp');%请自己修改路径
subplot(3,1,2);imshow(w)
title('原始水印')
w1=w(:);
[c,l]=wavedec(a,3,'haar');%3级小波分解
ca3=appcoef(c,l,3,'haar');%提取3级小波分解的最低频部分
cd3=detcoef(c,l,3);%提取3级小波分解的次低频部份
cd2=detcoef(c,l,2);
cd1=detcoef(c,l,1);
%以相邻60个系数为量化组,然后从低频分量中的第60个到60*(1024+1)个点作为量化嵌入点
q=1.7263e-004 %以最低频分量里面大于0.00001绝对值最小的系数作为量化步长,并且这个值作为密钥key保存下来
for i=1:1024
ave(i)=sum(ca3(i*60:(i+1)*60))/60;%因为ca3系数有正亦有负,所以ave(i)∈(-1.0000,11111)正负不定
z(i)=fix(ave(i)/q+1/2);%所以下面z(i)∈(-1000,1000)正负亦不定,q∈(-0.001, 0.001)
end
for i=1:1024
if mod(z(i),2)==w1(i)
cxzc=0;
else
if mod(z(i),2)~=w1(i)&&z(i)==fix(ave(i)/q)&&z(i)>=0||mod(z(i),2)~=w1(i)&&z(i)~=fix(ave(i)/q)&&z(i)<0
ca3(i*60:(i+1)*60)=ca3(i*60:(i+1)*60)+q;
else
ca3(i*60:(i+1)*60)=ca3(i*60:(i+1)*60)-q;
end
end
end
%Idwt
c1=[ca3',cd3',cd2',cd1'];%这一步很重要,不然下面的音频b重构时,仍将按原音频来
b=waverec(c1,l,'haar');%b为量化嵌入水印后的音频数据
subplot(3,1,3);
plot(b);
title('嵌入水印后的音频');
wavwrite(b,fs,bits,'S32marked.wav');
psnr_value=psnr(a,b)
%------test---------
%[c,l]=wavedec(b,3,'haar');%3级小波分解
%ca3=appcoef(c,l,'haar',3);
%for i=1:1024
% ave(i)=sum(ca3(i*30:(i+1)*30))/30;
% zz(i)=(mod(fix(ave(i)/q+1/2),2));
%end
%zzz=reshape(zz,32,32);
%subplot(3,1,3);imshow(zzz)
%nc(w,zzz)
shuiyin.rar_小波水印
版权申诉
91 浏览量
2022-09-19
19:15:22
上传
评论 1
收藏 671KB RAR 举报
JaniceLu
- 粉丝: 79
- 资源: 1万+
最新资源
- 实验二:IP协议分析.zip
- 驱动代码驱动代码驱动代码驱动代码
- SVID_20240523_141155_1.mp4
- Code for the complete guide to tkinter tutorial
- 关于百货中心供应链管理系统.zip
- SimpleFolderIcon-master 修改Unity的Project下的文件夹图标
- A python Tkinter widget to display tile based maps
- A pure Python library for adding tables to a Tkinter application
- Vector资源文件.zip
- MobaXterm-Installer
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈