?? blind.m
字號:
close all;
clear all;
%**************************************************************************
%** 二次采樣以確定像素間的相關性,然后對兩個采樣結果同時嵌入水印, **
%** 利用的是整數提升小波變換 **
%**************************************************************************
dat=imread('e:\watermark\use picture\lena256','bmp');
watermark=imread('e:\watermark\use picture\mark64.bmp','bmp');
data1=dat(1:2:256,1:2:256);
data2=dat(2:2:256,2:2:256); % 二次采樣得到2個256的相關圖像,1-4 2-3
data3=dat(1:2:256,2:2:256);
data4=dat(2:2:256,1:2:256);
for i=1:64
for j=1:64
if watermark(i,j)<128
water1(i,j)=0;
else
water1(i,j)=1;
end
u=mod(watermark(i,j),128);
if u<64
water2(i,j)=0;
else
water2(i,j)=1;
end
u=mod(u,64);
if u<32
water3(i,j)=0;
else
water3(i,j)=1;
end
u=mod(u,32);
if u<16
water4(i,j)=0;
else
water4(i,j)=1;
end
u=mod(u,16);
if u<8
water5(i,j)=0;
else
water5(i,j)=1;
end
u=mod(u,8);
if u<4
water6(i,j)=0;
else
water6(i,j)=1;
end
u=mod(u,4);
if u<2
water7(i,j)=0;
else
water7(i,j)=1;
end
water8(i,j)=mod(watermark(i,j),2);
end % 生成水印八位面
end
%********************************************************
% 整數小波變換
els ={'p',[-0.125 0.125],0};
lshaarInt=liftwave('haar','int2int');
lsnewint=addlift(lshaarInt,els);
[a1,h1,v1,d1]=lwt2(double(data1),lsnewint);
% [aa1,hh1,vv1,dd1]=lwt2(double(a1),lsnewint);
lshaarInt=liftwave('haar','int2int');
lsnewint=addlift(lshaarInt,els);
[a2,h2,v2,d2]=lwt2(double(data2),lsnewint);
% [aa2,hh2,vv2,dd2]=lwt2(double(a2),lsnewint);
lshaarInt=liftwave('haar','int2int');
lsnewint=addlift(lshaarInt,els);
[a3,h3,v3,d3]=lwt2(double(data3),lsnewint);
% [aa3,hh3,vv3,dd3]=lwt2(double(a3),lsnewint);
lshaarInt=liftwave('haar','int2int');
lsnewint=addlift(lshaarInt,els);
[a4,h4,v4,d4]=lwt2(double(data4),lsnewint);
% [aa4,hh4,vv4,dd4]=lwt2(double(a4),lsnewint);
%*******************************************************
% embed progress
alfa=0.05;
for i=1:64
for j=1:64
if water1(i,j)==0
d1(i,j)=d1(i,j)*(1-alfa);
else
d1(i,j)=d1(i,j)*(1+alfa);
end
if water2(i,j)==0
d2(i,j)=d2(i,j)*(1-alfa);
else
d2(i,j)=d2(i,j)*(1+alfa);
end
if water3(i,j)==0
d3(i,j)=d3(i,j)*(1-alfa);
else
d3(i,j)=d3(i,j)*(1+alfa);
end
if water4(i,j)==0
d1(i,j)=d1(i,j)*(1-alfa);
else
d1(i,j)=d1(i,j)*(1+alfa);
end
if water5(i,j)==0
d2(i,j)=d2(i,j)*(1-alfa);
else
d2(i,j)=d2(i,j)*(1+alfa);
end
if water6(i,j)==0
d3(i,j)=d3(i,j)*(1-alfa);
else
d3(i,j)=d3(i,j)*(1+alfa);
end
if water7(i,j)==0
d1(i,j)=d1(i,j)*(1-alfa);
else
d1(i,j)=d1(i,j)*(1+alfa);
end
if water8(i,j)==0
d2(i,j)=d2(i,j)*(1-alfa);
else
d2(i,j)=d2(i,j)*(1+alfa);
end
end
end
%**********************************************
% a1=ilwt2(aa1,hh1,vv1,dd1,lsnewint);
% a2=ilwt2(aa2,hh2,vv2,dd2,lsnewint);
% a3=ilwt2(aa3,hh3,vv3,dd3,lsnewint);
% a4=ilwt2(aa4,hh4,vv4,dd4,lsnewint);
dat1=ilwt2(a1,h1,v1,d1,lsnewint);
dat2=ilwt2(a2,h2,v2,d2,lsnewint);
dat3=ilwt2(a3,h3,v3,d3,lsnewint);
dat4=ilwt2(a4,h4,v4,d4,lsnewint);
nedat(1:2:256,1:2:256)=dat1;
nedat(2:2:256,2:2:256)=dat2;
nedat(1:2:256,2:2:256)=dat3;
nedat(2:2:256,1:2:256)=dat4;
c=corr2(dat,nedat)
figure();
subplot(2,2,1);
imagesc(dat);
colormap(gray);
axis image;
title('original image');
subplot(2,2,2);
imagesc(watermark);
colormap(gray);
axis image;
title('original watermark');
subplot(2,2,3);
imagesc(nedat);
axis image;
title('embeded result image');
%*****************************************************
% detect progress
%*****************************************************
for i=1:64
for j=1:64
detect(i,j)=water1(i,j)*128+water2(i,j)*64+water3(i,j)*32+water4(i,j)*16+water5(i,j)*8+water6(i,j)*4+water7(i,j)*2+water8(i,j);
end
end
figure();
subplot(2,1,1);
imagesc(watermark);
axis image;
colormap(gray);
subplot(2,1,2);
imagesc(detect);
axis image
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -