# complex loop help--Matlab

• 03-12-2012
patneel
complex loop help--Matlab
Hi

I am working on following data hiding algorithm in images using Matlab

Example: Suppose the cipher text to be sent is: 11001011 01111010 10101010 10011001 01010101. This data is five bytes. So n=5 and p=2. Suppose the different bytes of the digital image are A,B,C,D,E etc. From table-3 we can see that in byte A of the carrier file we embeded the data bits 11 in 6th and 8th bit locations, and next value of p becomes 0. We embed the next data bits 00 into byte B in 6th and 7th bit locations, next value of p becomes 1. Now we embed the next two bits 10 in C in 7th and 8th bit locations and so on.

Quote:

Carrier FileByte Operation location IndexVariable,P
Byte A Embed (11) 6th and 8th 2
Byte B Embed (00) 6th and 7th 0
Byte C Embed (10) 7th and 8th 1
Byte D Embed (11) 6th and 8th 2
Byte E Embed (01) 6th and 7th 0
Byte F Embed (11) 7th and 8th 1
Byte G Embed (10) 6th and 8th 2
Byte H Embed (10) 6th and 7th 0
Byte I Embed (10) 7th and 8th 1
Byte J Embed (10) 6th and 8th 2
Byte K Embed (10) 6th and 7th 0
Byte L Embed (10) 7th and 8th 1
so on………
I have used following logic-

I have converted image into row format and storing the ciphertext length in 7th&8th bits of first four pixles

using below logic in attached file for this

pv=v(1,1);
pb=dec2bin(pv,8);
pb(7)=b(1);
pb(8)=b(2);
pv=bin2dec(pb);
v(1,1)=pv;
pv=v(1,2);
pb=dec2bin(pv,8);
pb(7)=b(3);
pb(8)=b(4);
pv=bin2dec(pb);
v(1,2)=pv;
pv=v(1,3);
pb=dec2bin(pv,8);
pb(7)=b(5);
pb(8)=b(6);
pv=bin2dec(pb);
v(1,3)=pv;
pv=v(1,4);
pb=dec2bin(pv,8);
pb(7)=b(7);
pb(8)=b(8);
pv=bin2dec(pb);
v(1,4)=pv;
Now I want to store bits of my ciphertext following way

Say ciphertext is 11001011 01111010 10101010 10011001 01010101

This data is five bytes. So n=5 therefore p=2 ((Mod(n,3))

Quote:

Carrier FileByte Operation location IndexVariable,P
(1,5) Embed (11) 6th and 8th 2
(1,6) Embed (00) 6th and 7th 0
(1,7) Embed (10) 7th and 8th 1
(1,8) Embed (11) 6th and 8th 2
(1,9) Embed (01) 6th and 7th 0
(1,10) Embed (11) 7th and 8th 1
(1,11) Embed (10) 6th and 8th 2
(1,12) Embed (10) 6th and 7th 0
(1,13) Embed (10) 7th and 8th 1
(1,14) Embed (10) 6th and 8th 2
(1,15) Embed (10) 6th and 7th 0
(1,16) Embed (10) 7th and 8th 1
--so on
But i am not getting how to implement above logic..

I am calculating index variable and based on its value taking locations as fixed..in this case p=2 so embedding data in each 6th and 8th bit locations of next pixels which is not as per above table.. I am struggling in framing above logic in Matlab where bit locations and index variable are changing.

my code as below. pls provide me direction

my code---

global l ciphertxt;

[f p]=uigetfile('*.*','Open Cover Image');
fp=[p f];

[r c n]=size(im);
if n==3
im=rgb2gray(im);
end

figure;
imshow(im)
title('Input Image')

v=reshape(im,1,r*c);

b=dec2bin(l,8);

pv=v(1,1);
pb=dec2bin(pv,8);
pb(7)=b(1);
pb(8)=b(2);
pv=bin2dec(pb);
v(1,1)=pv;

pv=v(1,2);
pb=dec2bin(pv,8);
pb(7)=b(3);
pb(8)=b(4);
pv=bin2dec(pb);
v(1,2)=pv;

pv=v(1,3);
pb=dec2bin(pv,8);
pb(7)=b(5);
pb(8)=b(6);
pv=bin2dec(pb);
v(1,3)=pv;

pv=v(1,4);
pb=dec2bin(pv,8);
pb(7)=b(7);
pb(8)=b(8);
pv=bin2dec(pb);
v(1,4)=pv;

l=length(ciphertxt);

for i=1:l

t=ciphertxt(i);
n=abs(t);
b1=dec2bin(n,8);

p=mod(l,3);

%%%%%%%%%here i want my index variable and bit locations dynamic to store data after 4th pixel as below
%%Carrier FileByte Operation location IndexVariable,P
%%%(1,5) Embed (11) 6th and 8th 2
%% (1,6) Embed (00) 6th and 7th 0
%% (1,7) Embed (10) 7th and 8th 1
%% (1,8) Embed (11) 6th and 8th 2
%%%%%%%%%

if p==0

pv=v(1,(i-1)*4+5);
b2=dec2bin(pv,8);
b2(6)=b1(1);
b2(7)=b1(2);
nn=bin2dec(b2);
v(1,(i-1)*4+5)=nn;

pv=v(1,(i-1)*4+6);
b2=dec2bin(pv,8);
b2(6)=b1(3);
b2(7)=b1(4);
nn=bin2dec(b2);
v(1,(i-1)*4+6)=nn;

pv=v(1,(i-1)*4+7);
b2=dec2bin(pv,8);
b2(6)=b1(5);
b2(7)=b1(6);
nn=bin2dec(b2);
v(1,(i-1)*4+7)=nn;

pv=v(1,(i-1)*4+8);
b2=dec2bin(pv,8);
b2(6)=b1(7);
b2(7)=b1(8);
nn=bin2dec(b2);
v(1,(i-1)*4+8)=nn;

end

if p==1

pv=v(1,(i-1)*4+5);
b2=dec2bin(pv,8);
b2(7)=b1(1);
b2(8)=b1(2);
nn=bin2dec(b2);
v(1,(i-1)*4+5)=nn;

pv=v(1,(i-1)*4+6);
b2=dec2bin(pv,8);
b2(7)=b1(3);
b2(8)=b1(4);
nn=bin2dec(b2);
v(1,(i-1)*4+6)=nn;

pv=v(1,(i-1)*4+7);
b2=dec2bin(pv,8);
b2(7)=b1(5);
b2(8)=b1(6);
nn=bin2dec(b2);
v(1,(i-1)*4+7)=nn;

pv=v(1,(i-1)*4+8);
b2=dec2bin(pv,8);
b2(7)=b1(7);
b2(8)=b1(8);
nn=bin2dec(b2);
v(1,(i-1)*4+8)=nn;

end

if p==2

pv=v(1,(i-1)*4+5);
b2=dec2bin(pv,8);
b2(6)=b1(1);
b2(8)=b1(2);
nn=bin2dec(b2);
v(1,(i-1)*4+5)=nn;

pv=v(1,(i-1)*4+6);
b2=dec2bin(pv,8);
b2(6)=b1(3);
b2(8)=b1(4);
nn=bin2dec(b2);
v(1,(i-1)*4+6)=nn;

pv=v(1,(i-1)*4+7);
b2=dec2bin(pv,8);
b2(6)=b1(5);
b2(8)=b1(6);
nn=bin2dec(b2);
v(1,(i-1)*4+7)=nn;

pv=v(1,(i-1)*4+8);
b2=dec2bin(pv,8);
b2(6)=b1(7);
b2(8)=b1(8);
nn=bin2dec(b2);
v(1,(i-1)*4+8)=nn;

end

end

steg=uint8(reshape(v,r,c));
figure;
imshow(steg)
title('Stego Image')

[f p]=uiputfile('*.bmp','Save Stego Image');
fp=[p f];

imwrite(steg,fp);

% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

global im1 r c;

[f p]=uigetfile('*.bmp','Open Stego Image');
fp=[p f];

[r c n]=size(im1);
if n==3
im1=rgb2gray(im1);
end

figure;
imshow(im1)
title('Input Image')
• 03-12-2012
MK27
This isn't C, it should be moved to the tech forum; you're more likely to get a response there.
• 03-12-2012
QuantumPete
And there is a "code" tag, you should use it when posting code!
• 03-12-2012
patneel
Quote:

Originally Posted by MK27
This isn't C, it should be moved to the tech forum; you're more likely to get a response there.

Thanks..but i thought that if get some help in c then I can implement same in logic using matlab syntax..

Say ciphertext is 11001011 01111010 10101010 10011001 01010101

This data is five bytes. So n=5 therefore p=2 ((Mod(n,3))

Say ciphertext is 11001011 01111010 10101010 10011001 01010101

This data is five bytes. So n=5 therefore p=2 ((Mod(n,3))

Code:

```Carrier FileByte Operation  location            IndexVariable,P (1,5)            Embed (11)  6th and 8th            2 (1,6)              Embed (00) 6th and 7th            0 (1,7)              Embed (10)  7th and 8th            1        (1,8)              Embed (11)  6th and 8th            2                (1,9)              Embed (01)  6th and 7th            0 (1,10)            Embed (11)  7th and 8th            1 (1,11)            Embed (10)  6th and 8th            2 (1,12)            Embed (10)  6th and 7th            0 (1,13)            Embed (10)  7th and 8th            1 (1,14)            Embed (10)  6th and 8th            2 (1,15)            Embed (10)  6th and 7th            0 (1,16)            Embed (10)  7th and 8th            1```
---so on
• 03-12-2012
Salem
Moved