Asked by Renjith V Ravi
on 5 Feb 2017

I have tried to shuffle the image using tinkerbell map and Henon Map and obtained the output.But I cant do the inverse shuffling processes.The code is given below

clear all

clc

g=imread('cameraman.tif');

% g=double(g)/255;

subplot(231)

imshow(g)

original=g;

[m,n]=size(g);

mo=m;

num = 12;

K=10.^10;

% K=19;

%....................Shuffling.......................

disp('........................Started Shuffling.....................')

%Tinkerbell shuffling

a=0.3;b=0.6000;c=2.0;d=0.27;

for k= 1:num

for i=1:m

for j=1:n

r = mod([round(abs((i^2)-(j^2)+(a*i)+(b*j))),round(abs((2*i*j)+(c*i)+(d*j)))], [m,n]);

% r = mod([(i+j),(j+K*sin(((i+1)*n)/2*pi))],mo);

% r = [((i-1)+(K*sin(j-1))),((j-1)+i)];

% r = uint8(r);

ggg(i,j)=g(r(1)+1,r(2)+1);

% ggg(i,j)=g(r(1),r(2));

end

end

g=ggg;

end

subplot(232)

x=ggg;

imshow(ggg,[]);

title('Tinkerbell shuffled')

%henon Shuffling

[m,n]=size(x);

a = 1.4;b=0.3;

% num_iter=input('Enter the round for Arnold shuffling');

num_iter = 5;

% a=1.4;

% b=0.3;

for k=1:num_iter

for i=1:m

for j=1:m

r = mod([round(abs(1-(a*(i^2))+j)),round(abs(b*i))],[m n]);

xxx(i,j)=x(r(1)+1,r(2)+1);

end

end

x=xxx;

end

subplot(233)

imshow(xxx);

title('henon Shuffled Image')

save xxx x

disp('........................Shuffling process completed succesfully.....................')

%...................Inverse Shufling.............................

disp('........................Started Inverse Shuffling.....................')

%Henon Inverse Shuffling

for k=1:num_iter

for i=1:m

for j=1:n

r = mod([round(abs(1-(a*(i^2))+j)),round(abs(b*i))],[m n]);

x1(r(1)+1,r(2)+1)=xxx(i,j);

end

end

xxx=x1;

end

subplot(234)

imshow(x1);

title('henon Inverse Shuffled')

%Tinkerbell inverse shuffling

a=0.3;b=0.6000;c=2.0;d=0.27;

for k=1:num

for i=1:m

for j=1:n

r = mod([round(abs((i^2)-(j^2)+(a*i)+(b*j))),round(abs((2*i*j)+(c*i)+(d*j)))], [m,n]);

g1(r(1)+1,r(2)+1)=x1(i,j);

end

end

xxx=g1;

end

subplot(224)

imshow(g1)

title('Tinkerbell_inverse_shuffled')

disp('........................Inverse Shuffling process completed succesfully.....................')

psnr = psnr(g1,original)

ssim=ssim(g1,original)

Answer by Walter Roberson
on 5 Feb 2017

Edited by Walter Roberson
on 5 Feb 2017

Accepted Answer

Suppose your shuffled image is S. Then

temp = reshape(1:numel(S), size(S));

temp will be an array of linear indices -- temp(k) will be k.

Now apply your forward shuffling routine to temp, generating temp_mapped . Each value in temp_mapped will appear only once, and the location temp_mapped == k is the place that the shuffle maps pixel #k to. So you can undo it:

unshuffled = zeros(size(S), class(S));

unshuffled(temp_map) = S;

and you can cross-check by shuffling this and checking that you get out S.

By the way, once you have temp_mapped, you can use it to do all future shuffling,

S1 = unsuffled(temp_map);

S2 = S1(temp_map);

S3 = S2(temp_map);

and S3 would be unsuffled shuffled 3 times, without having to do any further computation of indices.

VINAY KUMAR SHARMA
on 19 Dec 2017

what can be done for unique henon map code, its values are repeating??

RAVI KUMAR
on 15 Mar 2018

Are you able to get the correct inverse shuffling?

juveria fatima
on 26 Mar 2018

am not getting the inverse

its showing error

Index exceeds matrix dimensions.

Error in rough (line 62)

x1(r(1)+1,r(2)+1)=xxx(i,j);

pleae help me to resolve

Sign in to comment.

Answer by Hyelda Kefas
on 7 May 2018

Edited by Walter Roberson
on 7 May 2018

I was able to do the INVERSE SHUFFLE for the Henon map. I don't know whether it is perfectly correct or not. Let's rub minds and get the perfect solution for you. Thanks

clear all

clc

g=imread('cameraman.tif');

g = imresize(g, [256 256]);

g=g(:,:,1);

subplot(2,2,1)

imshow(g,[])

title('Original Image')

%HENON SHUFFLING

[m,n]=size(g);

a = 3;

b = 3;

num_iter = 1;

for k=1:num_iter

for i=1:m

for j=1:n

r = mod([round(abs(1-(a*(i^2))+j)),round(abs(b*i))],[m n]);

x(i,j)=g(r(1)+1,r(2)+1);

end

end

g=x;

end

subplot(2,2,2)

imshow(x,[]);

title('Henon Shuffled Image')

%HENON INVERSE SHUFFLING

[m,n]=size(x);

a = 3;

b = 3;

num_iter = 1;

for k=1:num_iter

for i=1:m

for j=1:n

r1 = mod([round(abs(1-(a*(i^2))+j)),round(abs(b*i))],[m n]);

x1(r1(1)+1,r1(2)+1)=x(i,j);

%x(i,j)=x1(r(1)+1,r(2)+1);

end

end

x=x1;

end

subplot(2,2,3)

imshow(x1,[]);

title('Henon Inverse Shuffled')

set(gcf,'units','normalized','outerposition',[0 0 1 1]);

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.