%双随机相位图像加密解密
%对原图像进行加密求得密文图像
clear;clc;
[I,map]=imread('lena.tiff');
imshow(I,map),title('原图');
figure;
[a,b]=size(I);
m=input('请输入m: ');
n=input('请输入n: ');
k1=input('请输入k1: ');
I1=Arnold(I,m,n,k1,0);
%随机相位函数1
A1=rand(a,b);
RT1=exp(2*i*pi*A1);
RT12=exp(-2*i*pi*A1);
%随机相位函数2
B1=rand(a,b);
RT2=exp(2*i*pi*B1);
RT22=exp(-2*i*pi*B1);
A=randi(a,b);
for i=1:a;
for j=1:b;
if A(i,j)==0
RT11(i,j)=1;
else RT11(i,j)=RT1(i,j);
end;
end;
end;
I2=RT11.*double(I1);
I3=fft2(I2);
B=randi(a,b);
for i=1:a;
for j=1:b;
if B(i,j)==0
RT21(i,j)=1;
else RT21(i,j)=RT2(i,j);
end;
end;
end;
I4=RT21.*(I3);
I5=ifft2(I4);
I6=abs(I5);
imshow(uint8(I6),map),title('密文图像');
figure;
%对密文图像进行解密
D=fft2(I5);
for i=1:a;
for j=1:b;
if B(i,j)==0
RT22(i,j)=1;
end;
end;
end;
D1=D.*RT22;
D11=ifft2(D1);
for i=1:a;
for j=1:b;
if A(i,j)==0
RT12(i,j)=1;
end;
end;
end;
D111=D11.*RT12;
F=abs(D111);
m=input('请输入m: ');
n=input('请输入n: ');
k1=input('请输入k1: ');
F1=Arnold(F,m,n,k1,1);
imshow(uint8(F1),map);title('解密图像','FontSize',20);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%对原图像进行加密求得密文图像
clear;clc;
[I,map]=imread('boat.tiff');
imshow(I,map),title('yuantu');
figure;
[a,b]=size(I);
m=input('请输入m: ');
n=input('请输入n: ');
k1=input('请输入k1: ');
I1=Arnold(I,m,n,k1,0);
%随机相位函数1a
A1=rand(a,b);
RT1=exp(2*i*pi*A1);
RT12=exp(-2*i*pi*A1);
%随机相位函数2
B1=rand(a,b);
RT2=exp(2*i*pi*B1);
RT22=exp(-2*i*pi*B1);
A=randi(a,b);
for i=1:a;
for j=1:b;
if A(i,j)==0
RT11(i,j)=1;
else RT11(i,j)=RT1(i,j);
end;
end;
end;
I2=RT11.*double(I1);
I3=fft2(I2);
B=randi(a,b);
for i=1:a;
for j=1:b;
if B(i,j)==0
RT21(i,j)=1;
else RT21(i,j)=RT2(i,j);
end;
end;
end;
I4=RT21.*(I3);
I5=ifft2(I4);
I6=abs(I5);
imshow(uint8(I6),map),title('miwen');
figure,
%求信息熵
H1=imgentropy(I);
H2=imgentropy(floor(I6));
H3=imgentropy1(floor(I6));
%求图像直方图
imhist(I);
title('a','FontSize',20); %给原图像直方图加标题名
figure;
I7=uint8(I6);
imhist(I7);
title('b','FontSize',20); %给密文图像直方图加标题名
%求相邻像素之间的相关性
F1=relativity1(I,0); %原图像水平相邻相素之间的相关性
F2=relativity1(I,1); %原图像垂直相邻相素之间的相关性
F3=relativity1(I,2); %原图像对角线相邻相素之间的相关性
G1=relativity1(I6,0); %密文图像水平相邻相素之间的相关性
G2=relativity1(I6,1); %密文图像垂直相邻相素之间的相关性
G3=relativity1(I6,2); %密文图像对角线相邻相素之间的相关性
%求原图像水平方向的散点图
x1=zeros(1,63*64);
y1=zeros(1,63*64);
k=1;
for i=1:64;
for j=1:63;
i1=i*4;
j1=j*4;
x1(k)=I(j1,i1);
y1(k)=I(j1+1,i1);
k=k+1;
end;
end;
figure,
scatter(x1,y1,'filled');
plot(x1,y1,'.','MarkerSize',5);
xlabel('点(x,y)的像素值','FontSize',14);
ylabel('点(x+1,y)的像素值','FontSize',14);
title('a','FontSize',20);
axis([0,300,0,300]);
%求原图像垂直方向的散点图
x1=zeros(1,63*64);
y1=zeros(1,63*64);
k=1;
for i=1:64;
for j=1:63;
i1=i*4;
j1=j*4;
x1(k)=I(j1,i1);
y1(k)=I(j1,i1+1);
k=k+1;
end;
end;
figure,
scatter(x1,y1,'filled');
plot(x1,y1,'.','MarkerSize',5);
xlabel('点(x,y)的像素值','FontSize',14);
ylabel('点(x,y+1)的像素值','FontSize',14);
title('a','FontSize',20);
axis([0,300,0,300]);
%求原图像斜对角方向的散点图
x1=zeros(1,63*64);
y1=zeros(1,63*64);
k=1;
for i=1:64;
for j=1:63;
i1=i*4;
j1=j*4;
x1(k)=I(j1,i1);
y1(k)=I(j1+1,i1+1);
k=k+1;
end;
end;
figure,
scatter(x1,y1,'filled');
plot(x1,y1,'.','MarkerSize',5);
xlabel('点(x,y)的像素值','FontSize',14);
ylabel('点(x+1,y+1)的像素值','FontSize',14);
title('a','FontSize',20);
axis([0,300,0,300]);
%求密文图像水平方向的散点图
x2=zeros(1,63*64);
y2=zeros(1,63*64);
n=1;
for i=1:64;
for j=1:63;
i2=i*4;
j2=j*4;
x2(n)=I7(j2,i2);
y2(n)=I7(j2+1,i2);
n=n+1;
end;
end;
figure,
scatter(x2,y2,'filled');
plot(x2,y2,'.','MarkerSize',5);
xlabel('点(x,y)的像素值','FontSize',14);
ylabel('点(x+1,y)的像素值','FontSize',14);
title('b','FontSize',20);
axis([0,300,0,300]);
%求密文图像垂直方向的散点图
x2=zeros(1,63*64);
y2=zeros(1,63*64);
n=1;
for i=1:64;
for j=1:63;
i2=i*4;
j2=j*4;
x2(n)=I7(j2,i2);
y2(n)=I7(j2,i2+1);
n=n+1;
end;
end;
figure,
scatter(x2,y2,'filled');
plot(x2,y2,'.','MarkerSize',5);
xlabel('点(x,y)的像素值','FontSize',14);
ylabel('点(x,y+1)的像素值','FontSize',14);
title('b','FontSize',20);
axis([0,300,0,300]);
%求密文图像斜对角方向的散点图
x2=zeros(1,63*64);
y2=zeros(1,63*64);
n=1;
for i=1:64;
for j=1:63;
i2=i*4;
j2=j*4;
x2(n)=I7(j2,i2);
y2(n)=I7(j2+1,i2+1);
n=n+1;
end;
end;
figure,
scatter(x2,y2,'filled');
plot(x2,y2,'.','MarkerSize',5);
xlabel('点(x,y)的像素值','FontSize',14);
ylabel('点(x+1,y+1)的像素值','FontSize',14);
title('b','FontSize',20);
axis([0,300,0,300]);
【图像加密】双随机相位图像加密MATLAB
最新推荐文章于 2024-07-19 11:04:35 发布