二维 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(R);title('R'); subplot(2,2,3);imshow(G);title('G'); subplot(2,2,4);imshow(B);title('B'); 三个不同密钥 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(aR,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(c); 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变换的周期