![]() |
求助:水印问题解决啊
我运行了以下的两个程序,均出现了问题,但是又不知道怎样解决,请教高手,谢谢啊!
程序一: 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. 急求解决。 |
回复: 求助:水印问题解决啊
我也遇到这个问题了,你找到原因了没?
|
所有时间均为北京时间。现在的时间是 15:02。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.