-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
15 changed files
with
220 additions
and
228 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
function [Image, Vs, Ss] = adj_image(orig_Image, block_dim) | ||
% Podesavanje dimenzija slike (zero padding) | ||
% Image dimensions | ||
Vor = size(orig_Image, 1); % h | ||
Sor = size(orig_Image, 2); % w | ||
remainder1 = mod(Vor, block_dim); | ||
remainder2 = mod(Sor, block_dim); | ||
if (remainder1 ~= 0) || (remainder2 ~= 0) | ||
Image = padarray(orig_Image, [remainder1, remainder2], 0, 'post'); | ||
% Image dimensions | ||
Vs = size(Image, 1); | ||
Ss = size(Image, 2); | ||
fprintf('\n Dimenzije slike su podesene na: %ix%i.', Vs, Ss); | ||
else | ||
Image = orig_Image; | ||
% Image dimensions | ||
Vs = size(Image, 1); | ||
Ss = size(Image, 2); | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,34 +1,34 @@ | ||
function zig = adj_wmark(orig_zig) | ||
global vis_ziga sir_ziga | ||
% Dimenzije originalnog ziga | ||
Vz = size(orig_zig,1); % visina | ||
Sz = size(orig_zig,2); % sirina | ||
% Podesavanje dimenzija ziga | ||
zig1 = []; % inicijalizacija | ||
if Vz < vis_ziga | ||
n = floor(vis_ziga/Vz); | ||
function wmark = adj_wmark(w) | ||
global hdim_wmark wdim_wmark | ||
% Dim of original wmark | ||
Vz = size(w,1); % h | ||
Sz = size(w,2); % w | ||
% Adjust wmark dimensions | ||
wmark1 = []; % init | ||
if Vz < hdim_wmark | ||
n = floor(hdim_wmark/Vz); | ||
for i = 1:n | ||
zig1 = [zig1; orig_zig]; % zig se ponavlja po vertikali | ||
wmark1 = [wmark1; w]; % repeat verticaly | ||
end | ||
dopuna = orig_zig(1:mod(vis_ziga,Vz), :); | ||
zig1 = [zig1; dopuna]; | ||
filler = w(1:mod(hdim_wmark,Vz), :); | ||
wmark1 = [wmark1; filler]; | ||
else | ||
zig1 = orig_zig(1:vis_ziga, :); % odsecanje | ||
wmark1 = w(1:hdim_wmark, :); % crop | ||
end | ||
zig2 = []; % inicijalizacija | ||
if Sz < sir_ziga | ||
m = floor(sir_ziga/Sz); | ||
wmark2 = []; % init | ||
if Sz < wdim_wmark | ||
m = floor(wdim_wmark/Sz); | ||
for j = 1:m | ||
zig2 = [zig2, zig1]; % zig se ponavlja po horizontali | ||
wmark2 = [wmark2, wmark1]; % repeat horizontaly | ||
end | ||
dopuna = zig1(:, 1:mod(sir_ziga,Sz)); | ||
zig2 = [zig2, dopuna]; | ||
filler = wmark1(:, 1:mod(wdim_wmark,Sz)); | ||
wmark2 = [wmark2, filler]; | ||
else | ||
zig2 = zig1(:, 1:sir_ziga); % odsecanje | ||
wmark2 = wmark1(:, 1:wdim_wmark); % crop | ||
end | ||
zig = zig2; | ||
if (Vz ~= vis_ziga) || (Sz ~= sir_ziga) | ||
fprintf('\n Dimenzije ziga su podesene na: %ix%i.', ... | ||
vis_ziga, sir_ziga); | ||
imwrite(uint8(zig),'zig.bmp'); | ||
wmark = wmark2; | ||
if ((Vz ~= hdim_wmark) || (Sz ~= wdim_wmark)) | ||
fprintf('\n Watermark dimensions are set to: %ix%i.', ... | ||
hdim_wmark, wdim_wmark); | ||
imwrite(uint8(wmark),'w.bmp'); | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,21 +1,20 @@ | ||
function attack = contrast(Marked_image, folder) | ||
global faktor | ||
function attack = contrast(Marked_image, folder, factor) | ||
%------------------------------------------------------------------------- | ||
% Modify contrast | ||
c = [0.5 0.6 0.7 0.9 1.1 1.4 1.5 1.6 1.7 1.8]; | ||
|
||
for i = 1:length(c) | ||
kon_slika1 = c(i)* Marked_image; | ||
path = strcat(folder, ['Mcon_Mkd_img_',num2str(c(i)),'.tif']); | ||
imwrite(uint8(kon_slika1 * faktor),path); | ||
imwrite(uint8(kon_slika1 * factor),path); | ||
end | ||
|
||
bin = [8 16 32 64 96 128 160 192 224 240]; | ||
|
||
for i = 1:length(bin) | ||
h_kon_slika = histeq(Marked_image, bin(i)); | ||
path = strcat(folder, ['Hcon_Mkd_img_',num2str(c(i)),'.tif']); | ||
imwrite(uint8(h_kon_slika * faktor),path); | ||
imwrite(uint8(h_kon_slika * factor),path); | ||
end | ||
|
||
attack = 'An attack by contrast change.'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
function Marked_Image_DCT = embed_DCT(Image, skrembl_zig1, dim_bloka, K) | ||
% Generate Marked_Image_DCT | ||
global Vs Ss | ||
% Middle DCT coeffs range is selected for watermarking | ||
y = 1; n = 1; v = 1; m = 1; d = 0; x = 0; | ||
srednji = [ 0, 0, y, n, v, m, d, x; | ||
0, y, n, v, m, d, x, 0; | ||
y, n, v, m, d, x, 0, 0; | ||
n, v, m, d, x, 0, 0, 0; | ||
v, m, d, x, 0, 0, 0, 0; | ||
m, d, x, 0, 0, 0, 0, 0; | ||
d, x, 0, 0, 0, 0, 0, 0; | ||
x, 0, 0, 0, 0, 0, 0, 0 ]; | ||
Marked_Image_DCT = zeros(size(Image)); % init | ||
T = dctmtx(dim_bloka); | ||
z1 = 0; % init | ||
for s1 = 1: dim_bloka: Vs | ||
z1 = z1 + 1; | ||
z2 = 0; % init | ||
for s2 = 1: dim_bloka: Ss | ||
z2 = z2 + 1; | ||
indx1 = s1: s1 + dim_bloka - 1; | ||
indx2 = s2: s2 + dim_bloka - 1; | ||
block = Image(indx1, indx2); | ||
DCT_block = T * block * T'; % output is double type | ||
beleg = K/100 * skrembl_zig1(z1, z2); % skrembl_zig1(z1, z2) is 1 or -1 | ||
Zig_DCT_blok = DCT_block + (abs(DCT_block)*beleg).*srednji; | ||
Marked_Image_DCT(indx1, indx2) = T' * Zig_DCT_blok * T; % output is double type | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,33 +1,32 @@ | ||
function Marked_image = ugradnja_DWT(Image, skrembl_zig1) | ||
% Generisanje slike oznacene koriscenjem Wavelet transformacije----------- | ||
global Level K | ||
% Level = 3 | ||
%------------------------------------------------------------------------- | ||
[Image_DWT, bookie] = wavedec2(Image, Level, 'haar'); | ||
Marked_Image_DWT = Image_DWT; % init | ||
%------------------------------------------------------------------------- | ||
horiz_detalji3 = wavecopy('h', Image_DWT, bookie, Level); | ||
vert_detalji3 = wavecopy('v', Image_DWT, bookie, Level); | ||
dijag_detalji3 = wavecopy('d', Image_DWT, bookie, Level); | ||
zig_horiz_detalji3 = horiz_detalji3 + K/2/100 * abs(horiz_detalji3).*skrembl_zig1; | ||
zig_vert_detalji3 = vert_detalji3 + K/2/100 * abs(vert_detalji3) .* skrembl_zig1; | ||
zig_dijag_detalji3 = dijag_detalji3 + K/2/100 * abs(dijag_detalji3) .* skrembl_zig1; | ||
%------------------------------------------------------------------------- | ||
Marked_Image_DWT = wavepaste('h', Marked_Image_DWT, bookie, Level, zig_horiz_detalji3); | ||
Marked_Image_DWT = wavepaste('v', Marked_Image_DWT, bookie, Level, zig_vert_detalji3); | ||
Marked_Image_DWT = wavepaste('d', Marked_Image_DWT, bookie, Level, zig_dijag_detalji3); | ||
%------------------------------------------------------------------------- | ||
hor_detailes_2 = wavecopy('h', Image_DWT, bookie, Level-1); | ||
ver_detailes_2 = wavecopy('v', Image_DWT, bookie, Level-1); | ||
dijag_detalji2 = wavecopy('d', Image_DWT, bookie, Level-1); | ||
skrembl_zig2 = repmat(skrembl_zig1, Level - 1); | ||
|
||
mkd_hor_detailes_2 = hor_detailes_2 + 2*K/100 * abs(hor_detailes_2).*skrembl_zig2; | ||
mkd_ver_detailes_2 = ver_detailes_2 + 2*K/100 * abs(ver_detailes_2) .* skrembl_zig2; | ||
zig_dijag_detalji2 = dijag_detalji2 + 2*K/100 * abs(dijag_detalji2) .* skrembl_zig2; | ||
%------------------------------------------------------------------------- | ||
Marked_Image_DWT = wavepaste('h', Marked_Image_DWT, bookie, Level-1, mkd_hor_detailes_2); | ||
Marked_Image_DWT = wavepaste('v', Marked_Image_DWT, bookie, Level-1, mkd_ver_detailes_2); | ||
Marked_Image_DWT = wavepaste('d', Marked_Image_DWT, bookie, Level-1, zig_dijag_detalji2); | ||
%------------------------------------------------------------------------- | ||
function Marked_image = embed_DWT(Image, skrembl_zig1, Level, K) | ||
% Generate Marked_Image_DWT | ||
% Level = 3 | ||
%------------------------------------------------------------------------- | ||
[Image_DWT, bookie] = wavedec2(Image, Level, 'haar'); | ||
Marked_Image_DWT = Image_DWT; % init | ||
%------------------------------------------------------------------------- | ||
horiz_detalji3 = wavecopy('h', Image_DWT, bookie, Level); | ||
vert_detalji3 = wavecopy('v', Image_DWT, bookie, Level); | ||
dijag_detalji3 = wavecopy('d', Image_DWT, bookie, Level); | ||
zig_horiz_detalji3 = horiz_detalji3 + K/2/100 * abs(horiz_detalji3).*skrembl_zig1; | ||
zig_vert_detalji3 = vert_detalji3 + K/2/100 * abs(vert_detalji3) .* skrembl_zig1; | ||
zig_dijag_detalji3 = dijag_detalji3 + K/2/100 * abs(dijag_detalji3) .* skrembl_zig1; | ||
%------------------------------------------------------------------------- | ||
Marked_Image_DWT = wavepaste('h', Marked_Image_DWT, bookie, Level, zig_horiz_detalji3); | ||
Marked_Image_DWT = wavepaste('v', Marked_Image_DWT, bookie, Level, zig_vert_detalji3); | ||
Marked_Image_DWT = wavepaste('d', Marked_Image_DWT, bookie, Level, zig_dijag_detalji3); | ||
%------------------------------------------------------------------------- | ||
hor_detailes_2 = wavecopy('h', Image_DWT, bookie, Level-1); | ||
ver_detailes_2 = wavecopy('v', Image_DWT, bookie, Level-1); | ||
dijag_detalji2 = wavecopy('d', Image_DWT, bookie, Level-1); | ||
skrembl_zig2 = repmat(skrembl_zig1, Level - 1); | ||
|
||
mkd_hor_detailes_2 = hor_detailes_2 + 2*K/100 * abs(hor_detailes_2).*skrembl_zig2; | ||
mkd_ver_detailes_2 = ver_detailes_2 + 2*K/100 * abs(ver_detailes_2) .* skrembl_zig2; | ||
zig_dijag_detalji2 = dijag_detalji2 + 2*K/100 * abs(dijag_detalji2) .* skrembl_zig2; | ||
%------------------------------------------------------------------------- | ||
Marked_Image_DWT = wavepaste('h', Marked_Image_DWT, bookie, Level-1, mkd_hor_detailes_2); | ||
Marked_Image_DWT = wavepaste('v', Marked_Image_DWT, bookie, Level-1, mkd_ver_detailes_2); | ||
Marked_Image_DWT = wavepaste('d', Marked_Image_DWT, bookie, Level-1, zig_dijag_detalji2); | ||
%------------------------------------------------------------------------- | ||
Marked_image = waverec2(Marked_Image_DWT, bookie, 'haar'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
function rec_wmark= extract_DCT(Image, Marked_image, b2, block_dim, hdim_wmark, wdim_wmark) | ||
% Reconstruct wmark | ||
global Vs Ss | ||
%------------------------------------------------------------------------- | ||
y = 1; n = 1; v = 1; m = 1; d = 0; x = 0; | ||
range = [ 0, 0, y, n, v, m, d, x; | ||
0, y, n, v, m, d, x, 0; | ||
y, n, v, m, d, x, 0, 0; | ||
n, v, m, d, x, 0, 0, 0; | ||
v, m, d, x, 0, 0, 0, 0; | ||
m, d, x, 0, 0, 0, 0, 0; | ||
d, x, 0, 0, 0, 0, 0, 0; | ||
x, 0, 0, 0, 0, 0, 0, 0 ]; | ||
skrembl_zig = zeros(hdim_wmark,wdim_wmark); % init | ||
T = dctmtx(block_dim); | ||
z1 = 0; % init | ||
for s1 = 1: block_dim: Vs | ||
z1 = z1 + 1; | ||
z2 = 0; % init | ||
for s2 = 1: block_dim: Ss | ||
z2 = z2 + 1; | ||
indeks1 = s1: s1 + block_dim - 1; | ||
indeks2 = s2: s2 + block_dim - 1; | ||
block = Image(indeks1, indeks2); | ||
mkd_block = Marked_image(indeks1, indeks2); | ||
DCT_blok = T * block * T'; % double | ||
DCT_ozn_blok = T * mkd_block * T'; % double | ||
B = (DCT_ozn_blok - DCT_blok) .* range; | ||
if sum(sum(B)) > 0 | ||
skrembl_zig(z1, z2)= 1; | ||
else | ||
skrembl_zig(z1, z2)= 0; | ||
end | ||
end | ||
end | ||
rec_wmark = skrembl_zig; % init | ||
rec_wmark(b2) = skrembl_zig; |
Oops, something went wrong.