Pixel Shuffling and inverse shuffling

6 次查看(过去 30 天)
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 个评论
marie lasz
marie lasz 2020-9-17
May I know that why you shuffled the image two times , I mean with two methods?

请先登录,再进行评论。

采纳的回答

Walter Roberson
Walter Roberson 2017-2-5
编辑:Walter Roberson 2017-2-5
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 个评论
RAVI  KUMAR
RAVI KUMAR 2018-3-15
Are you able to get the correct inverse shuffling?
juveria fatima
juveria fatima 2018-3-26
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

请先登录,再进行评论。

更多回答(1 个)

Hyelda Kefas
Hyelda Kefas 2018-5-7
编辑:Walter Roberson 2018-5-7
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]);

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by