二维 Arnold 的图像置乱加密及解密——Matlab实现

本文介绍了使用二维Arnold变换在Matlab中实现的图像置乱加密和解密过程,涉及RGB图像处理、不同密钥的应用以及加密效果和周期性的讨论。文章详细展示了如何加密和解密图像,并分析了置乱度和周期性对加密性能的影响。

二维 Arnold 的图像置乱加密及解密——Matlab实现

二维 Arnold 的图像置乱加密及解密(1):RGB图像的处理
基于Arnol变换的图像置乱
Arnold变换是俄国数学家Vladimir I. Arnold提出的一种变换,一幅N ×N的数字图像的二维Arnold
变换定义为:

注意:x,y是原图像的像素坐标,x’,y’是变换后的像素坐标。保证|ad-bc|=1,如置换矩阵系数设为a=b=1,c=2,d=3,置换次数n=20,则他们被当作密钥key,用于解密。Arnol变换的图像类型只能是N*N的图片。
RGB图像的二维 Arnold 的图像置乱加密及解密
(1)编写一个arnold.m文件与iarnold.m文件(见上一篇日志《二维 Arnold 的图像置乱加密及解密——Matlab实现(1)》)
 
(2)图像处理程序
图像加密置乱:
a=imread(‘flower.jpg’);         %取预处理图像
R=a(:,:,1);                           %取图像的R层像素
G=a(:,:,2);                           %取图像的G层像素
B=a(:,:,3);                            %取图像的B层像素
subplot(2,2,1);imshow(a);title(‘original’);
subplot(2,2,2);imshow®;title(‘R’);
subplot(2,2,3);imshow(G);title(‘G’);
subplot(2,2,4);imshow(B);title(‘B’);
keyR=[5,5,2,7,3];keyG=[3,1,1,2,1];keyB=[6,3,2,4,3];           %分别为RGB三层设计三个不同密钥
aR=arnold(R,keyR);aG=arnold(G,keyG);aB=arnold(B,keyB);%对各层用不同的密钥加密
figure;subplot(2,2,1);imshow(aR);title(‘aR’);%加密后的图像
subplot(2,2,2);imshow(aG);title(‘aG’);
subplot(2,2,3);imshow(aB);title(‘aB’);
aa=cat(3,aR,aG,aB);                                       %各层加密后在合成彩色图像
subplot(2,2,4); imshow(aa); title(’ Permuted’);%RGB图像加密后的结果
imwrite(aa,‘aflower.bmp’);

图像解密还原:
 
b=imread(‘aflower.bmp’);                         %取加密后的图像
aR1=b(:,:,1);                                           %取图像R层的像素
aG1=b(:,:,2);                                          %取图像R层的像素
aB1=b(:,:,3);                                           %取图像R层的像素
subplot(2,2,1);imshow(b);title(‘original’);
keyR=[5,5,2,7,3];keyG=[3,1,1,2,1];keyB=[6,3,2,4,3];%由加密方提共的密钥
iaR=iarnold(aR1,keyR);iaG=iarnold(aG1,keyG);iaB=iarnold(aB1,keyB);%对各层进行解密
subplot(2,2,2);imshow(iaR);title(‘iaR’);
subplot(2,2,3);imshow(iaG);title(‘iaG’);
subplot(2,2,4);imshow(iaB);title(‘iaB’);
c=cat(3,iaR,iaG,iaB);                              %将RGB三层合成彩色图像
figure; imshow©; title(’ Decrypted’);      %最后还原的图像
imwrite(c,‘jiemi.bmp’);

加密的复杂性分析:

(1)置乱度
图像置乱的目的在于打乱图像,使非法获取图像者无法识别图像内容,图像置乱度表明了图像被打乱
的程度,图像经过置乱变换,越“乱”效果越好,保密性越好。从图中可以看出图像Arnold变换迭代次数较
少时,置乱效果不好,但是置乱效果并不随迭代次数的增加而增加,观测Arnold迭代50次和迭代100次的
图像,主观很难判断哪个图像更乱。
衡量图像置乱度图像置乱度的评价标准有观察者的主观标准,也有客观标准。主观标准可以按照人
眼对原始图像和置乱后的图像的视觉感官来判断,依据主观感受来划分等级。客观标准尚无统一的数学
模型,有些研究者提出用原图像中每个像素点的灰度值和周围像素点灰度值的差别来衡量置乱度,如柏森
等人提出的数学模型:

也有的研究者提出用原图像的像素位置移动的远近来表明置乱度。
 
(2)加密的周期性
经过一定次数的置乱后图像变得杂乱无章,和原始图像已经完全不同,然而对于合法的用户,需要还
原出原始图像。Arnold变换之所以成为一种得到广泛应用的置乱算法,是因为Arnold变换具有周期性,
如果重复的进行Arnold变换,经过一定的次数之后必然会还原出原始图像。Arnold变换的周期性与图像
的大小有关系,但是不成正比。如大小为128 ×128的图像的Arnold变换的周期为96,大小为240 ×240
第3期黄仿元等:基于Arnold变换的图像置乱算法及实现·277·
的图像的Arnold变换的周期为60。表给出了不同N值与Arnold变换的周期T之间的关系。

计算Arnold变换的周期T可以利用一下MATLAB程序来实现。
x = 1; y = 1;N = 128; %N ×N为128 ×128的图像
T = 1;
t = x; x = x + y; y = t + 23 y;
while x~ = 1&y~ = 1;
  T = T + 1;
  if x >N
    x =mod ( x,N) ;
  end
  if y >N
    y =mod ( y,N) ;
  end
  t = x; x = x + y; y = t + 23 y;
end
T %所得的T值即为Arnold变换的周期

### 回答1: 二维Arnold加密解密是一种基于Arnold映射的图像加密方法。该方法通过对图像进行操作,使得图像中的像素位发生变化,从而达到加密的目的。在解密时,通过对后的图像进行反向操作,即可还原出原始图像。 在Matlab实现二维Arnold加密解密,可以使用Matlab自带的图像处理工具箱,结合Arnold映射算法实现。具体实现步骤如下: 1. 读取待加密图像,将其转换为灰度图像。 2. 对灰度图像进行Arnold操作,得到后的图像。 3. 对后的图像进行Arnold操作,得到解密后的图像。 4. 将解密后的图像保存为文件。 需要注意的是,在进行Arnold操作时,需要选择合适的参数,以保证加密效果和解密效果的可靠性。同时,在实现过程中,还需要考虑到图像的大小和像素值范围等因素,以确保程序的正确性和稳定性。 总之,二维Arnold加密解密是一种简单有效的图像加密方法,可以在Matlab中进行实现。通过该方法,可以保护图像的安全性和隐私性,防止图像被非法获取和篡改。 ### 回答2: 二维Arnold算法是一种基于混沌现象的加密算法,它主要应用于图像加密,以保护图像的隐私性和安全性。在图像加密过程中,二维Arnold算法不仅能够混淆图像中的像素值,还能够扰动图像中的像素位,从而使得其具有较高的安全性和防抵押性。 在Matlab实现二维Arnold算法时,首先需要对输入图像进行一些必要的预处理,如将图像转为灰度图像,将图像的大小调整为二的幂次方等。接着,利用Arnold变换实现图像,其中Arnold变换是一种二维换矩阵,通过不断迭代,它可以实现图像中像素位的混淆。 在Arnold变换中,其参数可用于控制强度,一般取一个较小的值,例如3或4。后的图像可以进一步进行AES加密,以增强加密的安全性。加密过程完成后,可以将加密后的图像传输给接收方,接收方通过解密算法即可还原出原始的图像解密算法实现过程与加密算法过程类似,只是在Arnold变换中需要将强度的参数取相反的数值,并将所得的图像进行解密运算。最终得到的图像与原始图像一致,即可根据需要进行后续处理和应用。 需要注意的是,二维Arnold算法虽然具有较高的加密安全性和难度,但在实际应用中仍需考虑到算法的效率和速度。因此,在实现过程中需要结合具体应用需求和场景来进行调整和优化,以提高算法的效率和应用性能。 ### 回答3: 二维 Arnold图像加密解密,是一种常见的图像加密算法。该算法基于 Arnold 换、混沌映射等数学原理,以图像的像素矩阵为基础,通过多次换和混沌映射来加密图像,使得加密后的图像在视觉上无法被识别和还原。本文将以 MATLAB 为例,介绍二维 Arnold图像加密解密的具体实现方法。 一、算法流程 1.读取原始图像,获取像素信息。 2.使用 Arnold 换对像素进行。 3.使用混沌映射加密后的图像。 4.将加密后的图像保存至文件中。 5.对保存的加密图像进行解密。 6.使用逆混沌映射解密图像。 7.使用逆 Arnold 换对图像进行还原。 8.将还原后的图像保存至文件中。 二、算法原理 1.Arnold Arnold 换是一种旋转映射,其基本思想是通过若干次旋转运算,将一个二维距阵“塞”到另一个二维矩阵中,从而实现图像。具体地说,Arnold 换的矩阵运算公式为: f(x, y) = [(1 1) (1 2)] [x y] mod N 其中,(1 1) 和 (1 2) 表示矩阵的两个元素,x 和 y 分别表示被图像像素的坐标,N 表示换次数。 2.混沌映射 混沌映射是一种非线性的动力系统,其基本特点是非周期性、无规则性和混性。通过调整混沌映射的参数,可以产生不同的混沌序列,从而实现图像加密的目的。 本文中,我们使用了一种常见的混沌映射算法,即 Logistic 映射。其运算公式为: x(n+1) = ax(n)(1-x(n)) 其中,x(n) 表示第 n 个时刻的值,a 为控制参数,通常取值为3.97。 三、实例展示 1.读取原始图像: 使用以下代码读取原始图像。 im = imread('test.jpg'); 2.Arnold 换: 使用以下代码对图像进行。 N = 4; for i = 1:N for j = 1:N if mod(i+j, 2) == 0 && i <= N/2 % 顺时针旋转90度 im(i:i+N/2-1, j:j+N/2-1, :) = ... im(i:i+N/2-1, j:j+N/2-1, [2 1 3]); end if mod(i+j, 2) == 1 && i > N/2 % 逆时针旋转90度 im(i:i+N/2-1, j:j+N/2-1, :) = ... im(i:i+N/2-1, j:j+N/2-1, [2 1 3]); end end end 3.混沌映射加密: 使用以下代码对后的图像进行加密。 a = 3.97; % 混沌映射参数 x = 0.1; % 初始值 N = size(im, 1); % 图像尺寸 for i = 1:N for j = 1:N x = a*x*(1-x); im(i, j, :) = bitxor(uint8(x*255), im(i, j, :)); end end 4.保存加密后的图像: 使用以下代码将加密后的图像保存至文件中。 imwrite(im, 'test_encrypted.bmp'); 5.解密加密后的图像: 使用以下代码读取加密后的图像。 im = imread('test_encrypted.bmp'); 6.逆混沌映射解密: 使用以下代码对加密后的图像进行解密。 a = 3.97; % 混沌映射参数 x = 0.1; % 初始值 N = size(im, 1); % 图像尺寸 for i = 1:N for j = 1:N x = a*x*(1-x); im(i, j, :) = bitxor(uint8(x*255), im(i, j, :)); end end 7.逆 Arnold 换还原图像: 使用以下代码对解密后的图像进行还原。 N = 4; for i = N:-1:1 for j = N:-1:1 if mod(i+j, 2) == 0 && i <= N/2 % 逆时针旋转90度 im(i:i+N/2-1, j:j+N/2-1, :) = ... im(i:i+N/2-1, j:j+N/2-1, [2 1 3]); end if mod(i+j, 2) == 1 && i > N/2 % 顺时针旋转90度 im(i:i+N/2-1, j:j+N/2-1, :) = ... im(i:i+N/2-1, j:j+N/2-1, [2 1 3]); end end end 8.保存还原后的图像: 使用以下代码将还原后的图像保存至文件中。 imwrite(im, 'test_decrypted.jpg'); 四、总结 本文简要介绍了二维 Arnold图像加密解密实现方法,其中涉及到的数学知识和 MATLAB 编程技巧,可能对初学者来说有些困难。但是,只要认真分析算法流程和程序实现,按照步骤逐一实现,就能够成功完成图像加密解密的操作。同时,该算法的可靠性和安全性还需要进行更加深入的研究和探索。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值