Pixel Shuffling and inverse shuffling

조회 수: 5 (최근 30일)
Renjith V Ravi
Renjith V Ravi 2017년 2월 5일
댓글: marie lasz 2020년 9월 17일
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