-
Notifications
You must be signed in to change notification settings - Fork 1
/
main_full.m
executable file
·113 lines (88 loc) · 2.87 KB
/
main_full.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
%% init
dim = 256;
imgnum = 20;
wmlength = 1024;
dimblk = 32; % block dimension
wmnum = 1000;
load imgs.mat
% imgs = zeros(dim, dim, imgnum);
% for i = 1:imgnum
% imgFile = ['image',num2str(i),'.bmp'];
% % imgs(:,:,i) = imresize(imread(['images/',imgFile]), [dim dim]);
% imgs(:,:,i) = im2double(imresize(imread(['images/',imgFile]), [256 256]));
% end
load DCTblks.mat
% DCTblks = compDCTblks(imgs, imgnum);
load pnseqs.mat
% shift = round(rand() * wmnum);
% pnseqs = genPN(wmlength, shift);
% lookup table
lktbl = [
1,1;
3,3;];
sitenum = size(lktbl, 1);
% patch = zeros(8, 8);
% for i = 1:sitenum
% co = lktbl(i,:);
% patch(co(1), co(2)) = 1;
% end
% embedpos = repmat(patch, [dimblk dimblk imgnum]);
%% 1. draw APD
% co = [2, 3];
% WMblks = makeWM(ones(wmlength,1), co, imgnum);
% testcoef = reshape(DCTblks(WMblks ~= 0), [wmlength imgnum]);
% drawAPD(testcoef(:,8));
%% 2. compute KL divergence
% 10-fold cross-validation
% idx = randperm(wmlength);
% [klDat, mseDat] = computeKL(DCTblks, idx);
%% 3. show model generalizition
% resKL = transpose(compMdl(klDat));
% resKL = [resKL(:,3), resKL(:,2), resKL(:,1), resKL(:,4)];
% semilogy(resKL);
% axis square;
% legend('Students t', 'Cauchy', 'GGD', 'Weibull');
%
% resMSE = transpose(compMdl(mseDat));
% resMSE = [resMSE(:,3), resMSE(:,2), resMSE(:,1), resMSE(:,4)];
% semilogy(resMSE);
% legend('Students t', 'Cauchy', 'GGD', 'Weibull');
% axis square;
%% main process
% 20 images, 1000 watermarks, 9 embed positions, 4 groups of data, 50 thresholds.
% At every execution we calculate the corresponding test statistics
% with and without the watermark.
embedScheme = 'MUL';
attackCategory = 'jpeg';
filename = ['result_', embedScheme, attackCategory, '_full.mat'];
result = zeros(wmnum, 2, imgnum, 2, 2);
D = dctmtx(8);
img2dct = @(block_struct) D * block_struct.data * D';
dct2img = @(block_struct) D' * block_struct.data * D;
% compute JND mask
% [JNDmask, Cmask] = DCTmask2(DCTblks);
imgATT0 = attack(imgs, attackCategory);
ATTDCTblks0 = compDCTblks(imgATT0, imgnum);
[JNDmask0, Cmask0] = DCTmask2(ATTDCTblks0);
embed_candidate0 = double(abs(ATTDCTblks0) > JNDmask0);
% params: sitenum X imgnum X modelnum X 2
% if strcmp(attackCategory, 'jpeg')
% params0 = getParamsLSE(ATTDCTblks0, lktbl);
% else
% params0 = getParams(ATTDCTblks0, lktbl);
% end
params0 = getParams_full(ATTDCTblks0, lktbl);
for j = 1:wmnum
wm = pnseqs(:, j);
disp([' watermark: ', num2str(j)]);
WMblks_dc = makeWM(wm, lktbl(1,:), imgnum);
WMblks_ac = makeWM(wm, lktbl(2,:), imgnum);
embed_full;
imgATT1 = attack(imgWM, attackCategory);
if strcmp(embedScheme, 'ADD')
detectADD;
else
detectMUL_full;
end
end
save(filename, 'result');