supper_cainiao
2010-03-21, 12:42
我运行了以下的两个程序,均出现了问题,但是又不知道怎样解决,请教高手,谢谢啊!
程序一:
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.
急求解决。
程序一:
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.
急求解决。