?? embed2.m
字號:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%對經過掃描并存儲的原圖進行水印的嵌入 %%
%%其中水印圖像為二維灰度圖像 %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close all;
clear all;
%*************************************************************************************
%一:調用原始圖像
data=imread('E:\watermark\use picture\lena512.bmp','bmp');
[m,n]=size(data)
%顯示原圖
fsize=512;
size=512
mark=32
nu=size/16;
number=nu*nu
wm=rand(32,32); %為了試驗 先設出水印
%BW1=im2bw(data,0.4);
BW1=data;%zeros(fsize,fsize);
%m=length(BW1)
%n=ndims(BW1)
%for i=(fsize-m)/2:(fsize+m)/2
% for j=(fsize-n)/2:(fsize+n)/2
% for u=1:m
% for v=1:n
% a=BW1(u,v);
% BW(i,j)=a;
% end
% end
% end
%end
%a=BW(1:m,1:n);
%BW((fsize-m)/2+1:(fsize+m)/2,(fsize-n)/2+1:(fsize+n)/2)=a;
subplot(2,2,1);
imagesc(BW1);
title('original BW image');
axis equal;
colormap(gray);
%構造二值圖像
%*************************************************************************************
%二:作一維DWT,分塊并得到Fn(1,n)
[a,h,v,d]=dwt2(BW1,'db1');
%subplot(2,2,2);
%imagesc(BW);
%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);
Fn(1,k)=m;
k=k+1;
end
end
%***********************************************************************************
%三:產生水印
%wm1=imread('H:\襲樂宣\watermarking\我的程序\picture\2mark.bmp');
%wm=im2bw(wm1);
%wm=mat2gray(wm2)
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
w(1,i)=0;
end
for i=1:256
for j=0:2
a=wm2(1,i);
w(1,128+256*j+i)=a;
end
end
for i=128*7+1:1024
w(1,i)=0;
end
k=1;
for i=1:mark
for j=1:mark
m=w(1,k);
wm(i,j)=m;
k=k+1;
end
end
subplot(2,2,2);
imagesc(wm);
title('watermark image');
axis equal;
color(gray);
rand('state',0);
tem=randperm(number);
for m=1:1024
w1(1,m)=w(1,tem(m));
end
save watermark w1;
%************************************************************************************
%四:水印的嵌入
F=zeros(1,1024);
Q=0.71;
for i=1:1024
z=Fn(1,i);
m=mod(z,Q);
if w1(1,i)==0
if m>=0&m<Q*3/4 %mod ==Q/4
F(1,i)=Fn(1,i)+Q/4-m;
elseif m>=Q*3/4&m<Q
F(1,i)=Fn(1,i)+Q*5/4-m;
end
elseif w1(1,i)==1
%if z==0&m>0&m<Q/4
%F(1,i)=0;
%elseif z~=0&m>0&m<Q/4 %mod==
%F(1,i)=Fn(1,i)-Q/4-m;
%elseif m>=Q/4&m<Q
%F(1,i)=Fn(1,i)+Q*3/4-m;
%if m>=0&m<Q/4
%mod ==Q/4
if z>=0&z<=Q/8
F(1,i)=Q/2;
elseif m>=0&m<Q/4
F(1,i)=Fn(1,i)-Q/4+m;
elseif m>=Q/4&m<Q
F(1,i)=Fn(1,i)+Q*3/4-m;
end
end
end
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%五:反變換得到水印后的圖像
k=1;
for i=1:nu
for j=1:nu
m=F(1,k);
d2(1,1,i,j)=m;
k=k+1;
end
end
for i=1:nu
for j=1:nu
m=idct2(d2(1:8,1:8,i,j));
block(1:8,1:8,i,j)=m;
end
end
for i=1:nu
for j=1:nu
m=block(1:8,1:8,i,j);
whole(1+8*(i-1):8+8*(i-1),1+8*(j-1):8+8*(j-1))=m;
end
end
data2=idwt2(whole,h,v,d,'db1');
subplot(2,2,3);
imagesc(data2);
title('watermarked image');
axis equal;
%result=im2bw(data2,0.4);
imwrite(uint8(data2),'E:\watermark\use picture\re.bmp','bmp');
%subplot(2,2,4);
%imagesc(result);
%title('watermarked BW image');
%axis equal;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -