【图像加密】双随机相位图像加密MATLAB

%双随机相位图像加密解密
%对原图像进行加密求得密文图像
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]);

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值