登录论坛

查看完整版本 : [MATLAB毕业设计] matlab小波域音频数字水印,程序有问题请指教


雯雯问问
2009-04-20, 09:49
程序中lena.bmp是灰度图象,此时程序是好用的!但把灰度图象换成二值图像,程序就进入死循环状态,不知道为什么?a1,a2都变成0了,实际上都是(-1,1)之间的数!而换成灰度图象就正常付值,郁闷啊!到底是哪有问题呢?
请大家帮忙!:confused:
clear all;
image_name='lena.bmp';
watermark_image=imread(image_name);
waterimage=double(watermark_image);
waterimage_m=size(waterimage,1);
waterimage_n=size(waterimage,2);
ww=1;
for i=1:waterimage_m
for j=1:waterimage_n
waterimage_y(ww,1)=waterimage(i,j);
ww=ww+1;
end
end
waterimage_1=size(waterimage_y,1);
audio_name='shuiyin.wav';
[original_y,fs]=wavread(audio_name);
xxx=original_y;
music_1=size(original_y,1);
sect=60;
k=1;
w=1;
while k<=music_1&w<=waterimage_1
for i=1:sect
music1(i,1)=original_y(k,1);
k=k+1;
end
for j=1:sect
music2(j,1)=original_y(k,1);
k=k+1;
end
%end
[a1,b1]=dwt(music1,'db2');
[a2,b2]=dwt(music2,'db2');
sect1=size(a1);
en1=sum(a1.*a1);
en2=sum(a2.*a2);
if waterimage_y(w,1)==1
if en1>=en2
while en1>=en2
for ii=1:sect1
if a1(ii,1)==0
a1(ii,1)=a1(ii,1);
else
if a1(ii,1)<0
a1(ii,1)=a1(ii,1)+0.02;
else
a1(ii,1)=a1(ii,1)-0.02;
end
end
end
en1=sum(a1.*a1);
end
end
else if waterimage_y(w,1)==0
if en1<en2
while en1<en2
for ii=1:sect1
if a2(ii,1)==0
a2(ii,1)=a2(ii,1);
else
if a2(ii,1)<0
a2(ii,1)=a2(ii,1)+0.02;
else
a2(ii,1)=a2(ii,1)-0.02;
end
end
end
en2=sum(a2.*a2);
end
end
end
end
imusic1=idwt(a1,b1,'db2');
imusic2=idwt(a2,b2,'db2');
xx=1;
for iii=k-2*sect:k-sect-1
original_y(iii,1)=imusic1(xx,1);
xx=xx+1;
end
xx=1;
for iii=k-sect:k-1
original_y(iii,1)=imusic2(xx,1);
xx=xx+1;
end
w=w+1;
k=k+4*sect;
end
wavwrite(original_y,fs,'newshuida.wav');
yyy=original_y;
err_amp=xxx-yyy;
wavwrite(err_amp,fs,'err_amp.wav');
figure(1)
subplot(3,1,1)
plot(xxx);
title('yuanshi');
xlabel('qianrushuiyin');
subplot(3,1,2)
plot(yyy);
xlabel('err');
subplot(3,1,3)
plot(err_amp);

silas_xue
2009-04-21, 06:35
lz 能否发一段shuiyin.wav上来
为什么会变成0 单独从代码上看 到dwt变换前 好像和图像格式没有关系