clc;
clear;
image1 = imread('lena.jpg');
%image1 = imread('C:\Documents and Settings\603\桌面\work\lenawm.jpg');
%figure(1);
%imagesc(real(image));
%colormap(gray);
%axis('equal','tight','off');
%title('Original image');
image2 = imread('watermark1.jpg');
%L = [0,26200];
%M = [1000,144];
%var = [1000,100];
powers = [0.3,0.1];
%n = min([length(L),length(M),length(var)]);
S = frft2d(image1,powers);
D = frft2d(image2,powers);
%显示原始图像
%figure(1);
%imagesc(real(image1));
%colormap(gray); axis('equal','tight','off');
%title('原始图像');
%显示水印图案
%figure(2);
%imagesc(real(image2));
%colormap(gray); axis('equal','tight','off');
%title('嵌入图像');
sizeS = size(S); %得到序列长度
[val, ix] = sort(abs(S(:)));%取绝对值,进行排序,一共是512*512个值,val是排序后的,ix是原来的位置
S = S(:);%将矩阵变换成列矩阵
%sizeD = size(D);
C=size(image2);L=C(1);W=C(2);
G=im2double(image2);
B=G(:,:,1);
y(L,W)=0;
%加水印函数
for u = 1:1:L
for v = 1:1:W
Swm = S(ix(100001+u.*v));
y(u,v) = ix(100001+u.*v);
shi = B(u,v).*(real(Swm));
xu = B(u,v).*(imag(Swm));
% Swst = shi/(real(Swm))
% Sws(u,v) = 255*Swst;
Swm = complex(shi,xu);
S(y(u,v)) = Swm;
end;
end;
%y = y(:);
%Sw = S;
Sw = reshape(S,sizeS);
wm_image = frft2d(Sw,-powers);
%显示加水印后图像
figure(3);
imagesc(real(wm_image));
colormap(gray); axis('equal','tight','off');
title('加水印后');
%显示图像的像素差的图像
%Q=double(wm_image)-double(image1);
%figure(4);
%imagesc(real(Q));
%colormap(gray);axis('equal','off');
%title('空间差值');
%提取函数
St = frft2d(image1,powers);
%Sm = frft2d(wm_image,powers);
sizeSt = size(St);
[valt, ixt] = sort(abs(St(:)));
St = St(:);
%sizeSw = size(Sw);
%[valw, ixw] = sort(abs(Sw(:)));
Sws(L,W)=0;
for u = 1:1:L
for v = 1:1:W
Swt = St(y(u,v));
% Sww = S(100001+u.*v);
% Swt = St(ix(100001+(u.*v)));
Sww = S(y(u,v));
% key1 = normrnd(0,sqrt(var(i)/2),M(i),1);
% key2 = normrnd(0,sqrt(var(i)/2),M(i),1);
% keys= [key1 key2];
shi=imag(Sww);
sh=imag(Swt);
Swst = shi/sh;
Sws(u,v) = Swst;
end;
end;
%sizeSws=size(Sws);
Sws = reshape(Sws,L,W);
%ws_image = frft2d(Sws,-powers);
%St=reshape(St,sizeSt);
%D1 = reshape(D,sizeD);
%ws_image2 = frft2d(D,-powers);
%figure(5);
%imagesc(real(ws_image2));
%colormap(gray); axis('equal','tight','off');
%title('提取出的水印图像');
%Sws=doublegray(abs(Sws));
%C(L,W,1) = Sws(L,W);
%C(L,W,2) = Sws(L,W);
%C(L,W,3) = Sws(L,W);
figure(6);
imagesc(Sws);
colormap(gray); axis('equal','tight','off');
title('显示提取出的水印图像');