All All: Watermarking Using LSB Technique
All All: Watermarking Using LSB Technique
close all;
clear all;
tic
sig = xlsread('eeg data.xls', 1,'B:B');
for i=2:6
sig2 = xlsread('eeg data.xls', i,'B:B');
sig = cat(1,sig,sig2);
end
sig3=sig;
t0=toc;
% msg=input('Enter Message :: ','s');
% s=msg;
msg2 = imread('logo02.bmp');
% msg2=double(msg2);
%% watermark embadding
tic
msg = cast(msg2,'uint8');
figure
imshow(double(msg));
[n1 n2]=size(msg2);
msg = reshape(msg,1,n1*n2);
sig_mark = sig;
len = length(msg);
n=len*8;
1
msg = DataProcess(msg);
% disp('Encrypted Message');
% disp(msg);
key = [0 0 1 0 1 1 1 0 1 0 1 0];
[rand_key rand] = pn_seq(key,n);
j=1;
for i = 1:len
p = double(msg(i));
for k = 1:8
x = bitget(p,k);
s = mod(sig(rand(j),1),2);
if (x~=s && x==0)
sig_mark(rand(j),1) = sig(rand(j),1)-1;
elseif (x~=s && x==1)
sig_mark(rand(j),1) = sig(rand(j),1)+1;
end
j=j+1;
end
end
% A1=double(sig_mark);
t1=toc;
figure
plot(sig3);
title('Original Signal');
figure
plot(sig_mark);
title('Watermark Signal');
2
%% watermark extraction
tic
key = [0 0 1 0 1 1 1 0 1 0 1 0];
[rand_key rand] = pn_seq(key,n);
% sig_mark2 = imnoise(sig_mark,'salt & pepper',0.01);
j=n;
for i = 1:n
new = sig_mark(rand(j),1);
new = abs(new)+128;
a2(j) = bitget(new,1);
j=j-1;
end
c=1;
for i=1:8:n
a(1:8)=a2(i:i+7);
sum = 0;
for j=1:8
if (a(j)== 1)
sum = sum + 2^(j-1);
end
end
q = char(sum);
arr_msg(c)= q;
c=c+1;
end
msg_ext = DataProcess(arr_msg);
msg_ext = reshape(msg_ext,n1,n2);
3
msg_ext=cast(msg_ext,'char');
figure
imshow(double(msg_ext));
t2=toc;
[PeakSNR, Mean2err]=psnr(sig, sig_mark);
disp('Signal Load Time ');
disp(t0);
disp('Time Required for Watermarking ');
disp(t1);
disp('Time Required for Extracting Watermark ');
disp(t2);
disp('PSNR');
disp(PeakSNR);
disp('Mean Error');
disp(Mean2err);
lsnew = addlift(lshaar,els);
lshaarInt = liftwave('haar','int2int');
lsnewInt = addlift(lshaarInt,els);
[L H] = lwt(A,lsnewInt);
sig = L;
sig_mark = sig;
len = length(msg);
n=len*8;
msg = DataProcess(msg);
% disp('Encrypted Message');
% disp(msg);
key = [0 0 1 0 1 1 1 0 1 0 1 0];
[rand_key rand] = pn_seq(key,n);
j=1;
for i = 1:len
p = double(msg(i));
for k = 1:8
b = bitget(p,k);
x = sig(rand(j),1);
y = sig((rand(j)+1),1);
l = ceil((x+y)/2);
h = x-y;
h1 = dec2bin(h,3);
h2(1) = h1(1);
h2(2) = b;
h2(3) = h1(2);
h2(4) = h1(3);
6
h3 = bin2dec(h2);
sum = 0;
for k=1:4
if (h2(k)== 1)
sum = sum + 2^(k-1);
end
end
h3 = sum;
x1 = l + ceil((h3+1)/2);
y1 = x'-h3;
sig_mark(rand(j),1) = x1;
sig_mark((rand(j)+1),1) = y1;
j=j+1;
end
end
% A1=double(sig_mark);
sig_mark3 = ilwt(sig_mark,H,lsnewInt);
t1=toc;
figure
plot(sig3);
title('Original Signal');
figure
plot(sig_mark);
title('Watermark Signal');
%% watermark extraction
tic
A=double(sig_mark3);
lshaar = liftwave('haar');
els = {'p',[-0.125 0.125],0};
lsnew = addlift(lshaar,els);
lshaarInt = liftwave('haar','int2int');
lsnewInt = addlift(lshaarInt,els);
[L H] = lwt(A,lsnewInt);
sig_mark = L;
key = [0 0 1 0 1 1 1 0 1 0 1 0];
[rand_key rand] = pn_seq(key,n);
% sig_mark2 = imnoise(sig_mark,'salt & pepper',0.01);
sig_rec = sig_mark;
k=n;
j=1;
for i = 1:n
x1 = sig_mark(rand(j),1);
y1 = sig_mark(rand(j)+1,1);
h1 = x1-y1;
h2 = dec2bin(h1,4);
b = h2(2);
a2(k) = b;
k=k-1;
8
l = x1 - ceil((h1+1)/2);
x = l + ceil(h1/2);
y = x - h1;
sig_rec(rand(j),1) = x;
sig_rec(rand(j)+1,1) = y;
end
sig_rec2 = ilwt(sig,H,lsnewInt);
c=1;
for i=1:8:n
a(1:8)=a2(i:i+7);
sum = 0;
for j=1:8
if (a(j)== 1)
sum = sum + 2^(j-1);
end
end
q = char(sum);
arr_msg(c)= q;
c=c+1;
end
msg_ext = DataProcess(arr_msg);
msg_ext = reshape(msg_ext,n1,n2);
msg_ext=cast(msg_ext,'char');
9
figure
imshow(double(msg2));
figure
plot(sig_rec2);
title('Recontructed Signal');
t2=toc;
[PeakSNR, Mean2err]=psnr(sig3, sig_mark3);
disp('Signal Load Time ');
disp(t0);
disp('Time Required for Watermarking ');
disp(t1);
disp('Time Required for Extracting Watermark ');
disp(t2);
disp('PSNR');
disp(PeakSNR);
disp('Mean Error');
disp(Mean2err);
10
PN sequence Generation
function [rand_key rand_int] = pn_seq(Inp,n)
m=length(Inp);
a = Inp;
s_mux = [1 0 1];
for x=1:n
v3=xor(s_mux(2),s_mux(3));
s_new(1)=v3;
for i= 2:3
%% shifting of bits
s_new(i)=s_mux(i-1);
end
r3=0;
for i=1:3
if (s_new(4-i)== 1)
r3 = r3 + 2^(i-1);
end
end
s_mux=s_new;
if (r3 == 1)
tap(1:4)=[12 11 10 4];
elseif (r3 == 2)
tap(1:4)=[12 11 8 2];
elseif (r3 == 3)
tap(1:4)=[12 11 8 6];
elseif (r3 == 4)
tap(1:4)=[12 11 7 4];
11
elseif (r3 == 5)
tap(1:4)=[12 10 9 3];
elseif (r3 == 6)
tap(1:4)=[12 10 5 4];
elseif (r3 == 7)
tap(1:4)=[12 9 8 5];
else
tap(1:4)=[12 9 7 6];
end;
v1=xor(a(tap(1)),a(tap(2)));
v2=xor(a(tap(3)),a(tap(4)));
v=xor(v1,v2);
b(1)=v;
for i= 2:m
%% shifting of bits
b(i)=a(i-1);
end;
r1=0;
for i=1:m
if (b(m+1-i)== 1)
r1 = r1 + 2^(i-1);
end;
end;
rand_int(x) = r1;
rand_key = b;
a=b;
end;
return;
12
Encryption/Decryption Process
function [Out] = DataProcess(Inp)
m=length(Inp);
a = [0 1 1 0 0 1 0 0];
s_mux = [1 0 1];
for x=1:m
v3=xor(s_mux(2),s_mux(3));
s_new(1)=v3;
for i= 2:3
%% shifting of bits
s_new(i)=s_mux(i-1);
end;
r3=0;
for i=1:3
if (s_new(4-i)== 1)
r3 = r3 + 2^(i-1);
end;
end;
s_mux=s_new;
if (r3 == 1)
tap(1:4)=[8 6 3 1];
elseif (r3 == 2)
tap(1:4)=[8 6 3 2];
elseif (r3 == 3)
tap(1:4)=[8 4 3 1];
elseif (r3 == 4)
13
tap(1:4)=[8 6 5 4];
elseif (r3 == 5)
tap(1:4)=[8 6 5 3];
elseif (r3 == 6)
tap(1:4)=[8 6 5 2];
elseif (r3 == 7)
tap(1:4)=[8 6 5 1];
else
tap(1:4)=[8 4 3 2];
end;
v1=xor(a(tap(1)),a(tap(2)));
v2=xor(a(tap(3)),a(tap(4)));
v=xor(v1,v2);
b(1)=v;
% b = cat(2,v,a);
for i= 2:8
%% shifting of bits
b(i)=a(i-1);
end;
% b=uint8(b);
% disp(b);
r1=0;
for i=1:8
if (b(9-i)== 1)
r1 = r1 + 2^(i-1);
end;
end;
rand(x)=r1;
14
a=b;
end;
% disp(rand);
i=1;
[u1]=length(Inp);
for x=1:u1
val1=double(Inp(x));
E = bitxor(uint8(val1), uint8(rand(i)));
E=char(E);
Out(x)=E;
i=i+1;
end;
% Out=uint8(out2);
return;
15