图像加密的重要性被认为是每个人都有自己的小秘密,可以通过图像加密的方法来保护自己的照片等安全。
一般来说,图像加密分为以下步骤。
1 .选择图像加密算法
2 .根据算法获取私钥
3 .基于保存的私钥解密
图像加密的处理方式多是处理图像中的像素点,也有不变更灰度直方图信息(容易解读)的处理方式。 之后,也有变更(例如均衡化)原始灰度直方图信息的更高级的处理方式。
介绍自己测试的两种图像加密算法。
1 .对原图像中像素信息进行重新定位——置乱的矩阵像素点置乱方法。 可以通过一对一的对应关系恢复原始图像,此时的私钥为矩阵变换的映射向量Mchange和Nchange。
简单的MATLAB程序如下。
clc,clear all,close all
Lena=imread(Lena512.BMP );
图形; 我是imshow(Lena )
原图)。
[M,n]=size(Lena );
RM=randsample(m,m ) ';
Mchange=[1:1:M; Rm];
rn=randsample(n,n ) ';
Nchange=[1:1:N; Rn];
打乱%行的顺序
Lena(mchange(1, ), )=Lena (m change ) 2, ), );
图形; 我是imshow(Lena )
title (行加密图像) )
打乱%列的顺序
Lena(3360,nchange (1, ) ) Lena(3360,nchange ) 2, );
图形; 我是imshow(Lena )
title )“列加密后图像”
%列转换还原
Lena(3360,nchange ) 2, )=Lena ) :nchange ) 1, );
图形; 我是imshow(Lena )
title )“列解码后图像”
%行转换还原
Lena (m change (2, ), )=Lena (m change ) 13360 ), );
图形; 我是imshow(Lena )
title (“解码图像”)
2 .基于混沌的图像加密方法生成两个Logistic混沌序列,改造两个Logistic得到两个y序列,用yl和y2序列对原图像进行取值加密。 私钥是混沌系统的初始状态值。
可以参考的MATLAB程序如下。
%加密方法,混沌序列
clc,clear all,close all
a=imread(Lena512.BMP );
imshow(a ); 原图)。
[M,n]=size(a; %原始图像a的大小MxN
u1=4; u2=4; x1(1)=0.2; x2(1)=0.7;
suma=sum(sum(a ) );
k=mod(suma,256 ) *1.0/255;
x1(1)=) x1 )1) k )/2; x2(1)=) x2 )1) k )/2;
y1(1)=)=(1/3.1415926 ) Asin ) sqrt ) x1 )1) );
y2(1)=(1/3.1415926 ) Asin ) sqrt ) x2 )1) );
for i=1:1:M*N-1 %生成两个逻辑混沌序列
x1(I1 )=u1*x1(i ) I ) )1-x1 ) I );
x2(I1 )=u2*x2(i ) I ) )1-x2 ) I );
结束
用for i=1:1:M*N %改造2个Logistic,得到2个y序列
y1(I )=)=(1/3.1415926 ) Asin ) sqrt ) x1 ) I ) );
y2(I )=(1/3.1415926 ) Asin ) sqrt ) x2 ) I ) );
结束
n=1;
for i=1:1:M %按yl和y2的顺序将原图像置换为值进行加密
for j=1:1:N
ifmod(n,1 )==0
k(n )=mod(floor ) y1 ) n ) *10^15 ),256 );
else
k(n )=mod(floor ) y2 ) n ) *10^15 ),256 );
结束
a1(I,j )=bitxor ) a ) I,j ),k ) n ); %获取加密的像素
n=n 1;
结束
结束
figure,imshow(A1; title '混沌加密图像' %输出得到的加密图像
n=1;
for i=1:1:M
for j=1:1:N
ifmod(n,1 )==0
k(n )=mod(floor ) y1 ) n ) *10^15 ),256 );
else
k(n )=mod(floor ) y2 ) n ) *10^15 ),256 );
结束
a2(I,j )=bitxor ) a1 ) I,j ),k ) n ); %获取加密的像素
n=n 1;
结束
结束
figure,imshow(A2; title (“解码图像”) %输出获得的解码图像