求matlab代码 要求基于DWT的数字水印嵌入 水印为二维码 要求水印嵌入提取 并且压缩 剪切 加噪后再提取

还要阀值检测 谁能帮帮忙啊 必有重谢

clc
[a type]=myfunction(0.7,0);/a嵌入强度,type攻击类型
x=imread('E:\ori1.bmp');
subplot(2,3,1);
image(x);
title('初始待加入水印图像');
w=imread('E:\water1.bmp');
subplot(2,3,2);
imshow(w);
title('待用水印图像');
w=w/255;
[cA1,cH1,cV1,cD1]=dwt2(x,'haar');% 对原始图像x进行小波分解
[cA2,cH2,cV2,cD2]=dwt2(cA1,'haar');
[cA3,cH3,cV3,cD3]=dwt2(cA2,'haar');
[width,height,cnums]=size(w);% w为水印序列
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,3,3);
image(Y); % 显示水印结果图像
title('加入水印后的图像');
if type==0
A='无攻击'
Y=Y;
end
if type==1
A='放大2倍后的图像'
%(1)放大两倍的操作,(当然提取之前要先缩小两倍)
xxx1=imresize(Y,2,'bicubic');
xxx2=imresize(xxx1,1/2,'bicubic');
Y= double(xxx2);
end
if type==2
%(2)缩1/2
A='缩1/2的图像'
xxx1=imresize(Y,2/4,'bicubic');
xxx2=imresize(xxx1,4/2,'bicubic');
Y= double(xxx2);
end
%(3) 3×3空域低通滤波
if type==3
A='3×3空域低通滤波攻击'
B=(1/9)*ones(3,3);
xxx2=filter2(B,Y);
Y= double(xxx2);
end
%(4) 4领域平均
if type==4
A='4领域平均攻击'
B=[0 1 0;1 0 1;0 1 0]*(1/4);
xxx2=filter2(B,Y);
Y= double(xxx2);
end
%(5) 3*3窗口中值滤波:
if type==5
A='3*3窗口中值滤波攻击'
xxx2=medfilt2(Y);%默认3*3
Y= double(xxx2);
end
%%(6)裁减1/16
if type==6
A='裁减1/16攻击'
for i=128-44:128+45
for j=128-45:128+44
Y(i,j)=0;
end
end
Y=double(Y);
end
%(7) 高斯噪声的情况
if type==7
A='高斯噪声攻击 强度=0.01'
Y=imnoise(uint8(round(Y)),'gaussian',0,0.01);
end
%(8) JPEG压缩
if type==8
A='JPEG压缩,强度=10'
imwrite(uint8(round(Y)),'jpeg_n.jpg','jpg','Quality',10);%按压缩因子Quality的比例,将J2压缩到jpeg_n.jpg中。
[Y,map]=imread('jpeg_n.jpg','jpg');
end
%(9) 其他为无攻击
if type>8
A='无攻击'
Y=Y;
end
subplot(2,3,4);
image(Y); % 显示攻击后水印结果图像
title(A);
% 水印提取部分
[cA1,cH1,cV1,cD1]=dwt2(x,'haar');% 对原始图像进行三级小波分解
[cA2,cH2,cV2,cD2]=dwt2(cA1,'haar');
[cA3,cH3,cV3,cD3]=dwt2(cA2,'haar');
olddata=cD3;
[ccA1,ccH1,ccV1,ccD1]=dwt2(Y,'haar');% 对含水印图像进行三级小波分解
[ccA2,ccH2,ccV2,ccD2]=dwt2(ccA1,'haar');
[ccA3,ccH3,ccV3,ccD3]=dwt2(ccA2,'haar');
[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
watermark=watermark*255;
subplot(2,3,5);
imshow(watermark);
title('提取结果');
原图像512*512 水印64*64
函数声明为function [a type]=myfunction(a,type)
温馨提示:答案为网友推荐,仅供参考
相似回答