matlab去除图像去水印,[MATLAB图像处理] 求助:水印问题解决啊

icon9.gif 求助:水印问题解决啊

我运行了以下的两个程序,均出现了问题,但是又不知道怎样解决,请教高手,谢谢啊!

程序一:

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.

急求解决。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值