A=imread('~/Desktop/11.jpg');
C=imread('~/Desktop/11.jpg');
C=rgb2gray(C);
A=rgb2gray(A);
imshow(A);
for k=1:50
for x=1:508
for y=1:508
x1=x+y;
y1=x+2*y;
if(x1>508)
x1=mod(x1,508);
end
if(y1>508)
y1=mod(y1,508);
end
if x1==0
x1=508;
end
if y1==0
y1=508;
end
B(x1,y1)=A(x,y);
end
end
A=B;
if(A==C)
d=k;
end
end
imshow(B);
imwrite(B,'111.png');
注意 1,可以增加足够大的K值来找出周期d
在图片N=508的情况下,d=1152
2,如果倒入的是灰度图像 那么rgb2gray()函数省略
3,此处使用的矩阵为{1 1;1 2}四个元素加上循环次数k共同组成密钥
4,导出png图片用imwrite()函数 否则会有不必要的白边!!!
加密前
加密后 k=50
解密部分
clear
A=imread('~/Desktop/22.jpg');
for k=1:50
for x=1:508
for y=1:508
x1=2*x-y;
y1=y-x;
if(x1>508)
x1=mod(x1,508);
end
if(y1>508)
y1=mod(y1,508);
end
if x1<0
x1=x1+508;
end
if y1<0
y1=y1+508;
end
if x1==0
x1=508;
end
if y1==0
y1=508;
end
B(x1,y1)=A(x,y);
end
end
A=B;
end
imshow(B);
imwrite(B,'123.png');
与加密部分大致相同,区别是要把矩阵逆置,且过程中如果x1,y1出现负值的时候,要做出相应的处理
解密前
解密后