📄 detection2.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%检测水印 %%
%%其中水印图像为二维灰度图像 %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close all;
clear all;
%*************************************************************************************
%一:调用原始图像2
data=imread('E:\watermark\use picture\re.bmp','bmp');
[m,n]=size(data)
size=512;
mark=32;
nu=size/16;
number=nu*nu
subplot(2,2,1);
imagesc(data);
title('original image');
colormap(gray);
axis equal;
%BW=im2bw(data,0.4);
%subplot(2,2,2);
%imagesc(BW);
%title('original BW image');
%colormap(gray);
%axis equal;
%构造二值图像
%*************************************************************************************
%二:作一维DWT,分块并得到Fn(1,n)
[a,h,v,d]=dwt2(data,'db1');
subplot(2,2,2);
imagesc(a);
colormap(gray);
axis equal;
k=1;
for i=1:nu
for j=1:nu
m=a(1+8*(i-1):8+8*(i-1),1+8*(j-1):8+8*(j-1));
block(1:8,1:8,i,j)=m;
end
end
for i=1:nu
for j=1:nu
m=dct2(block(1:8,1:8,i,j));
d2(1:8,1:8,i,j)=m;
end
end
for i=1:nu
for j=1:nu
m=d2(1,1,i,j);
Fn2(1,k)=m;
k=k+1;
end
end
%***********************************************************************************
%***********************************************************************************
%三:检测水印
Q=0.71;
for k=1:number
Zn2(1,k)=mod(Fn2(1,k),Q); %%%%%%%%%%%%%%Q
end
for k=1:number
if Zn2(1,k)>=0&Zn2(1,k)<Q/2 %mod==2
w(1,k)=1;
elseif Zn2(1,k)>=Q/2&Zn2(1,k)<Q %mod==0,6
w(1,k)=0;
end
end
rand('state',0);
tem=randperm(number);
for j=1:number
i=w(1,j);
w2(1,tem(j))=i;
end
save watermark w2;
data2=zeros(mark,mark);
k=1;
for i=1:mark
for j=1:mark
m=w2(1,k);
data2(i,j)=m;
k=k+1;
end
end
imwrite(data2,'E:\watermark\use picture\de_mark.bmp','bmp');
subplot(2,2,2);
imagesc(data2);
title('detect watermark image');
axis equal;
%************************************************************
wm2=[0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0,1]; %test%
for i=1:128
wi(1,i)=0;
end
for i=1:256
for j=0:2
a=wm2(1,i);
wi(1,128+256*j+i)=a;
end
end
for i=128*7+1:1024
wi(1,i)=0;
end
k=1;
for i=1:mark
for j=1:mark
m=wi(1,k);
w3(i,j)=m;
k=k+1;
end
end
subplot(2,2,3);
imagesc(w3);
title('watermark image');
axis equal;
color(gray);
%******************************************************************
m=0;
n=0;
for i=1:256
for j=0:2
if w2(1,128+256*j+i)==0
n=n+1; %1
else
m=m+1;
end
end
if m<n
ws(1,i)=0; %%% here we assume that when times of 0 equal times of 1 ,result is 0.
elseif m>n
ws(1,i)=1;
end
end
%*******************************************************************
%四:性能检测
k=0;
for i=1:1024
if wi(1,i)~=w2(1,i)
k=k+1;
end
end
total=k
j=0;
for i=1:128
if wm2(1,i)~=ws(1,i)
j=j+1;
end
end
error=j
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -