1 简介
图像置乱是通过利用数字图像具有数字矩阵 的特点 , 根据某些特定变换及其数学上的特殊性 质 , 搅乱图像中像素的位置或颜色 , 将原来有意 义的图像信息变换成一幅杂乱无章的图像 。数字 图像置乱及其逆过程实质是图像编码与解码的过 程 。它的基本思想可以追溯到高卢战争时期凯撒 大帝使用的凯撒暗码 , 即 :将原信息中的某个字 母 , 按照某种固定的规则 , 依次用另外的字母代 替 ;这种字母替换可以看作为一种一维数据流的 值替换 , 将之扩展到二维情形 , 就得到了对数字 图像的位置或灰度等做变换 , 使图像变得混乱 , 从而在一定程度上达到迷惑第三方的目的。 因此 , 图像置乱有两个应用 :一是进行加密处 理 , 若不知道置乱所采用的算法 , 就难以恢复原 图像 ;二是图像置乱后所得到的杂乱信息 , 可抽 象成一些随机信息 , 在隐藏至另一图像中时不会 出现容易识别的形状或交叠现象。 由于图像置乱过程既可选取不同方法 , 又可 同时融合几种方法 , 且同样方法尚可设置不同参 数 , 组合结果会千差万别, 因此从安全角度考 虑 , 图像置乱加密技术是可行的 。按照加密对象 不同 , 可分为三种置乱 :一是基于位置空间的置 乱加密 , 它通过矩阵变换等数学手段 , 移动原图 像的像素位置 , 扰乱图像信息 , 而原图像的恢复 可通过对置乱后图像各像素点位置进行逆变换后 获得 ;二是基于色彩空间的置乱加密 , 它通过数 学知识或其他性质 , 改变原图像像素的灰度值或 RGB值 , 使原图像变得杂乱无章;三是基于频 域空间的置乱加密 , 它主要对数字图像变换域 (例如 :离散余弦变换 、 离散傅利叶变换 、 小波 变换等 )的系数进行置乱 , 从而达到扰乱原图 信息的目的 。为了确保机密性 , 目前置乱算法中 一般都引入密钥 , 图像合法接收方借助密钥通过 相应算法的逆变换才可以解密出原图像 。
从概述图像置乱基本原理出发,说明基于Arnold变换的数字图像置乱及其恢复方法.初步仿真后发现,该法局限于在一个方向上(位置空间)进行图像置乱,图像保密性和彩色图像置乱效果存在局限,采用Arnold置乱数字图像加密方法,使得图像的安全性和加密效率有效提高.
2 部分代码
function Q_rt=Arnold_oner(Image,Frequency,crypt)
%图像数值矩阵Arnold转换函数
%输入参数
% Image: 待加密(待解密)图像文件名(注意写格式后缀)
% Frequency: 图像需要变换迭的次数
% crypt: 0~加密;1~解密
if Frequency<1
msgbox('r必须大于1!','错误警告','warn');
return;
end
Q=Image;
if length(size(Q))==2 %灰度图像
%------------------------------------------
%Arnold转换(灰度)
if crypt==0 %加密
Qtwo=Q;
Size_Qtwo=size(Qtwo);
sizemax=max(Size_Qtwo(1),Size_Qtwo(2));
if Size_Qtwo(1)~=Size_Qtwo(2)
Q_0=zeros(sizemax);
NewQtwo=[Qtwo(1:Size_Qtwo(1),1:Size_Qtwo(2)),Q_0(1:Size_Qtwo(1),Size_Qtwo(2)+1:sizemax);Q_0(Size_Qtwo(1)+1:sizemax,:)];
else
NewQtwo=Qtwo;
end
Q_gray1=NewQtwo;
Q_gray2=NewQtwo;
k=1;
r=Frequency;
A=[1 1;k k+1];
for x=0:sizemax-1
for y=0:sizemax-1
for z=1:r
NewQtwo_xy=rem(A*[x;y],sizemax);
x1=NewQtwo_xy(1,1);
y1=NewQtwo_xy(2,1);
end
Q_gray2(x1+1,y1+1)=Q_gray1(x+1,y+1);
end
end
QtwoArchaos_jm=Q_gray2;
Q_rt=QtwoArchaos_jm;
else %解密
Qcrypt=Q;
Size_Qcrypt=size(Qcrypt);
sizemax=Size_Qcrypt(1);
k=1;
r=Frequency;
T=Arnold_T(sizemax);
A=[1 1;k k+1];
Q_gray3=Qcrypt;
Q_gray4=Qcrypt;
for x=0:sizemax-1
for y=0:sizemax-1
for z=1:T-r
NewQtwo_xy=rem(A*[x;y],sizemax);
x1=NewQtwo_xy(1,1);
y1=NewQtwo_xy(2,1);
end
Q_gray4(x+1,y+1)=Q_gray3(x1+1,y1+1);
end
end
QtwoArchaos_de=Q_gray4;
Q_rt=QtwoArchaos_de;
end
else %彩色图像
%------------------------------------------
%Arnold转换(彩色)
if crypt==0 %加密
Qrgb=Q;
Size_Qrgb=size(Qrgb);
sizemax=max(Size_Qrgb(1),Size_Qrgb(2));
Qr=Qrgb(:,:,1);
Qg=Qrgb(:,:,2);
Qb=Qrgb(:,:,3);
if Size_Qrgb(1)~=Size_Qrgb(2) %rgb三色二维部分长短一致只取一个判断即可
Q_0=zeros(sizemax);
NewQr=[Qr(1:Size_Qrgb(1),1:Size_Qrgb(2)),Q_0(1:Size_Qrgb(1),Size_Qrgb(2)+1:sizemax);Q_0(Size_Qrgb(1)+1:sizemax,:)];
NewQg=[Qg(1:Size_Qrgb(1),1:Size_Qrgb(2)),Q_0(1:Size_Qrgb(1),Size_Qrgb(2)+1:sizemax);Q_0(Size_Qrgb(1)+1:sizemax,:)];
NewQb=[Qb(1:Size_Qrgb(1),1:Size_Qrgb(2)),Q_0(1:Size_Qrgb(1),Size_Qrgb(2)+1:sizemax);Q_0(Size_Qrgb(1)+1:sizemax,:)];
else
NewQr=Qr;
NewQg=Qg;
NewQb=Qb;
end
Qr_1=NewQr;
Qr_2=NewQr;
Qg_1=NewQg;
Qg_2=NewQg;
Qb_1=NewQb;
Qb_2=NewQb;
k=1;
r=Frequency;
A=[1 1;k k+1];
for x=0:sizemax-1
for y=0:sizemax-1
for z=1:r
NewQrgb_xy=rem(A*[x;y],sizemax);
x1=NewQrgb_xy(1,1);
y1=NewQrgb_xy(2,1);
end
Qr_2(x1+1,y1+1)=Qr_1(x+1,y+1);
Qg_2(x1+1,y1+1)=Qg_1(x+1,y+1);
Qb_2(x1+1,y1+1)=Qb_1(x+1,y+1);
end
end
NewQr=Qr_2;
NewQg=Qg_2;
NewQb=Qb_2;
QrgbArchaos_jm=cat(3,NewQr,NewQg,NewQb);
Q_rt=QrgbArchaos_jm;
else %解密
Qcrypt=Q;
Size_Qcrypt=size(Qcrypt);
sizemax=Size_Qcrypt(1);
k=1;
r=Frequency;
T=Arnold_T(sizemax);
A=[1 1;k k+1];
Qcrypt_r=Qcrypt(:,:,1);
Qr_3=Qcrypt_r;
Qr_4=Qcrypt_r;
Qcrypt_g=Qcrypt(:,:,2);
Qg_3=Qcrypt_g;
Qg_4=Qcrypt_g;
Qcrypt_b=Qcrypt(:,:,3);
Qb_3=Qcrypt_b;
Qb_4=Qcrypt_b;
for x=0:sizemax-1
for y=0:sizemax-1
for z=1:T-r
NewQrgb_xy=rem(A*[x;y],sizemax);
x1=NewQrgb_xy(1,1);
y1=NewQrgb_xy(2,1);
end
Qr_4(x+1,y+1)=Qr_3(x1+1,y1+1);
Qg_4(x+1,y+1)=Qg_3(x1+1,y1+1);
Qb_4(x+1,y+1)=Qb_3(x1+1,y1+1);
end
end
Qcrypt_r=Qr_4;
Qcrypt_g=Qg_4;
Qcrypt_b=Qb_4;
QrgbArchaos_de=cat(3,Qcrypt_r,Qcrypt_g,Qcrypt_b);
Q_rt=QrgbArchaos_de;
end
end
3 仿真结果
4 参考文献
[1]王璐璐, 张翀. 基于Arnold置乱的数字图像加密技术研究[J]. 国防技术基础, 2010(10):5.
部分理论引用网络文献,若有侵权联系博主删除。
5 MATLAB代码与数据下载地址
见博客主页