Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
 
 
主题工具 显示模式
旧 2010-03-21, 12:42   #1
supper_cainiao
初级会员
 
注册日期: 2010-03-21
年龄: 35
帖子: 1
声望力: 0
supper_cainiao 正向着好的方向发展
难过 求助:水印问题解决啊

我运行了以下的两个程序,均出现了问题,但是又不知道怎样解决,请教高手,谢谢啊!
程序一:
x=imread('F:\学习\图像安全\寒假工作\256x256lena.bmp');
subplot(2,2,1);
imshow(x);
title('原始图像');
w=('F:\学习\图像安全\寒假工作\32X32wantermark.bmp');
subplot(2,2,2);
imshow(w);
title('水印图像');
[cA1,cH1,cV1,cD1]=dwt2(x,'db1');%对原始图像进行小波分解
[cA2,cH2,cV2,cD2]=dwt2(cA1,'db1');
[cA3,cH3,cV3,cD3]=dwt2(cA2,'db1');
[width,height,Cnums]=size(w);%w为水印序列
waterdata=zeros(width,height);
a=0.06;%水印嵌入强度
for i=1:width
for j=1:height
waterdata(i,j)=double(cD3(i,j))+a*double(w(i,j));%水印嵌入算法
end
end
cD3=waterdata;
X3=idwt2(cA3,cH3,cV3,cD3,'db1');%小波反变换,重构图像
X2=idwt2(X3,cH2,cV2,cD2,'db1');
Y=idwt2(X2,cH1,cV1,cD1,'db1');
subplot(2,2,3);
image(Y);
title('嵌入水印的图像');
%水印提取部分
[cA1,cH1,cV1,cD1]=dwt2(x,'db1');%原始图像三级小波分解
[cA2,cH2,cV2,cD2]=dwt2(cA1,'db1');
[cA3,cH3,cV3,cD3]=dwt2(cA2,'db1');
olddata=cD3;
[ccA1,ccH1,ccV1,ccD1]=dwt2(Y,'db1');%含水印图像三级小波分解
[ccA2,ccH2,ccV2,ccD2]=dwt2(ccA1,'db1');
[ccA3,ccH3,ccV3,ccD3]=dwt2(ccA2,'db1');
[width,height]=size(ccD3);
newdata=ccD3;
waterdata=zeros(width,height);
for i=1:width
for j=1:height
watermark(i,j)=(double(newdata(i,j))-double(olddata(i,j)))/a;%提取算法
end
end
subplot(2,2,4);
imshow(Y);
title('提取的水印');

出现问题:??? Attempted to access cD3(1,33); index out of bounds because
size(cD3)=[32,32].



程序二:
M=256;%原图像长度
N=32; %水印长度
image1=imread('F:\学习\图像安全\寒假工作\256x256lena.bmp');
subplot(2,2,1);imshow(image1); title('original image'); % 原图像
image1=double(image1);%把图象转换为双精度数值
imagew=imread('F:\学习\图像安全\寒假工作\32X32wantermark.bmp');
subplot(2,2,2);imshow(imagew);title('original watermark'); % 水印图像
%嵌入水印
[ca,ch,cv,cd] = dwt2(image1,'db1');%对原始图像进行小波分解,harr小波基
[cas,chs,cvs,cds] = dwt2(ca,'db1');%对原始图像的低频部分进行小波分解
%水印嵌入算法
for i=1:N
for j=1:N
if imagew(i,j)==0
a=-1;
else
a=1;
end
Ca(i,j)=cas(i,j)*(1+a*0.03);
end
end
IM= idwt2(Ca,chs,cvs,cds,'db1') ;
markedimage=double(idwt2(IM,ch,cv,cd,'db1'));
%显示嵌入后水印图像
subplot(2,2,3);colormap(gray(256));%定义图像显示用的颜色查找表,定义灰度图像
image(markedimage);%显示的图像上有x,y坐标轴的显示,可以看到图像的像素大小
title('marked image');
imwrite(markedimage,gray
(256),'watermarked.bmp','bmp');%将图像写进文件中
%提取水印
image1=imread('F:\学习\图像安全\寒假工作\256x256lena.bmp');image1=double(image1);
imaged=imread('watermarked.bmp');
[ca,ch,cv,cd] = dwt2(image1,'db1');
[cas,chs,cvs,cds]=dwt2(ca,'db1');
[caa,chh,cvv,cdd]=dwt2(imaged,'db1');
[caas,chhs,cvvs,cdds]=dwt2(caa,'db1');
for p=1:N
for q=1:N
a=caas(p,q)/cas(p,q)-1;
if a<0
W(p,q)=0;
else
W(p,q)=255;
end
end
end
%显示提取的水印
subplot(2,2,4);
colormap(gray(256));image(W);title('从含水印图像中提取的水印');
imwrite(W,gray(256),'watermark.bmp','bmp');


出现问题:
??? Error using ==> plus
Matrix dimensions must agree.

Error in ==> idwt2 at 93
x = upsconv2(a,{Lo_R,Lo_R},sx,dwtEXTM,shift)+ ... % Approximation.

急求解决。
supper_cainiao 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 12:31


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.