matlab 为什么提取程序提取的水印是一片黑的?求大神帮忙解决一下,嵌入倒是蛮好的?

这是提取程序
clc;
clear;
Y1=imread('lena.bmp');
Y2=imread('watermarked.bmp');
I=imread('mark.bmp')
subplot(2,2,1);
imshow(Y1);
title('原始图像');
subplot(2,2,2);
imshow(Y2);
title('嵌入水印后的图像');
D1=dct2(Y1);
D2=dct2(Y2);
D3=dct2(I);
D0=D2-D1;
[x,y]=size(D0);
[m,n]=size(D3);
x1=round(x/300);
u=x1; v=1;
OD=zeros(m,n);
for i=1:1:m
for j=1:1:n
OD(i,j)=D0(u*x+v).*3.4;
if v==y
v=1;
u=u+1;
else
v=v+1;
end
end
end
O=idct2(OD);
h=fspecial('average',[4 4]);
O=imfilter(O,h);
h=fspecial('unsharp',0.3);
O=imfilter(O,h,'replicate');
subplot(2,2,3);
imshow(O,[]);
title('提取的水印');
imwrite(O,'marked.bmp','bmp')

这是嵌入程序
clc;
clear all;
G1=imread('lena.bmp');
G2=imread('mark.bmp');
subplot(2,2,1);
imshow(G1);
title('原始图像');
subplot(2,2,2);
imshow(G2);
title('水印图像');
D1=dct2(G1);
D2=dct2(G2);
[x,y]=size(D1);
[m,n]=size(D2);
x1=round(x/300);
D0=zeros(x,y);
i=1;
j=1;
for u=x1:1:x
for v=1:1:y
D0(u*x+v)=D2(i,j);
if j==n
if i==m
break;
else
j=1;
i=i+1;
end
else
j=j+1;
end
end
if j==n && i==m
break;
end
end
OD=D0*0.3+D1;
E=idct2(OD);
F=uint8(round(E));
subplot(2,2,3);
imshow(F);
title('含水印的图像');
imwrite(F,'watermarked.bmp','bmp');

第1个回答  2015-04-22
把水印图发过来用用追问

追答

lena.bmp是索引图,而'印.bmp'是黑白图,这两个图无法相加,也就是说并没加入水印。所以,你的原始图像与含水印的图像是完全一样的。在提取时,所得就是全为0,显示为全黑图。

追问

那该怎么弄啊!这几天纠结的要死,能帮忙解决哈吗?

追答

我正在调

追问

大神,调好了没有啊

追答

没有调好,挺难的

本回答被提问者采纳
相似回答