Pixel Shuffling and inverse shuffling
9 views (last 30 days)
Show older comments
Renjith V Ravi
on 5 Feb 2017
Commented: marie lasz
on 17 Sep 2020
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)
1 Comment
marie lasz
on 17 Sep 2020
May I know that why you shuffled the image two times , I mean with two methods?
Accepted Answer
Walter Roberson
on 5 Feb 2017
Edited: Walter Roberson
on 5 Feb 2017
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.
9 Comments
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
More Answers (1)
Hyelda Kefas
on 7 May 2018
Edited: 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]);
0 Comments
See Also
Categories
Find more on Low-Level File I/O in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!