图像保密通信技术之 Arnold 变换
一、作业目的
1.利用 Matlab 实现数字图像 Arnold 变换的置乱及恢复。
2.深入学习通讯保密技术,进一步了解图像保密通讯技术。
3.向大家展示实现图像保密技术的方法和技术。
二、作业介绍
近年来,随着网络带宽和速度的极大提高,多媒体数据特别是数字图像的流传和使用越
来越广。而人们对安全性和隐私的也愈发关注,图像加解密技术得到了极快地发展。在机要、
军事、政府、金融和私人通信中,数字图像所占的比例越来越大,它所承载的信息的安全成
为当前人们关心的焦点。如何确保基于网络的图像/视频信息的安全,是当前信息处理技术
领域的亟待解决的难点和研究热点之。本次作业主要研究 Matlab 实现数字图像 Arnold 变换
的置乱及恢复。
置乱技术是一种图像加密技术,它利用数字图像具有的数字阵列的特点,搅乱图像中像
素的位置或颜色使之变成一幅杂乱无章的图像,从而达到无法辨认出原图像的目的,可用于
数字图像水印的预处理和后处理过程。置乱过程不仅可以在数字图像的空间域上进行,还可
以在其频率域上进行。常见置乱方法有Arnold变换、幻方变换、Hilbert曲线、Conway游戏、
广义Gray码变换、仿射变换、正交拉丁方变换等。
1. 置乱技术的特点及优点:
置乱技术具有以下特点:置乱技术一般来说具有周期性;置乱变换之后的图像大小不
发生改变,直方图不变,只是打乱图像各像素的次序;置乱技术是可逆变换,水印在提取
后需要进行置乱变换的逆变换。
对水印进行置乱处理的优点:
1)采用置乱技术的合法使用者可以自由控制算法的选择、参数的选择以及使用随机数
技术,从而使非法使用者难以破译图像内容,即可以提高水印信息的安全性。
2)置乱技术可以分散错误比特的分布, 提高数字水印的视觉效果从而增强其鲁棒性。
2. Arnold 变换及其 Matlab 实现
Arnold变换 是Arnold在遍 历理 论研 究中提 出的 一种 变换, 俗称 猫脸 变换, 即“cat
mapping”。根据所选择不同的相位空间可分为二维、三维、四维直至N维的Arnold变换。本
文针对的研究对象因为是二维图像故采用的是二维Arnold变换。其定义为:
1 1
1 2
x
y
mod
N
x
y
'
'
其中,(x, y)是原图像的像
素点,(x’,y’)是变换后新
图像的像素点,n 是图像阶数,即图像的尺寸大小,一般多为正方形图像。由于 Arnold 变
换具有周期性,因此可利用其周期性 Period 来对图像进行反变换,即在水印嵌入过程中可
将水印置乱次数作为密钥 key,再进行水印嵌入,当水印提取出来时,再将其继续置乱(Period
—key)次即可使其恢复至原图。这就是利用 Arnold 的正变换来进行的置乱恢复方案。由于
这种方案用到了 Arnold 周期性,如果置乱次数 key 较小而周期较大时,就比较浪费时间。
这里,我们对二维 Arnold 的反变换进行了 Matlab 实现, 在恢复时只需根据密钥 key,置乱
相同的次数:key 次便可恢复出原水印图像,从而大大减少了置乱处理的时间,且也不像利
用正变换恢复那样需要先进行周期计算,省去麻烦的一步,提高了效率。在实际情况中,我
们应以处理时间最短为准则,根据置乱密钥来自由选择正、反变换策略恢复图像。
三、作业过程
1.Arnold 变换
打开 Matlab 软件,新建一个 M—file ,在里面打入如下代码:
function Arnold(Image,key)
%图像数值矩阵 Arnold 转换函数
%key: 图像需要变换迭的次数
%M:转换后图像数据矩阵
if nargin<2
disp('请按程序的输入参数格式输入参数!!!');
return;
end
%将 Q 赋值给 M,计算 Q 的大小
Q=imread(Image);
M = Q ;
Size_Q = size(Q);
%Arnold 转换
n = 0;
K = Size_Q(1);
M1_t = Q;
M2_t = Q;
for s = 1:key
n = n + 1;
if mod(n,2) == 0
for i = 1:K
for j = 1:K
c = M2_t(i,j);
M1_t(mod(i+j-2,K)+1,mod(i+2*j-3,K)+1) = c;
end
end
else
for i = 1:K
for j = 1:K
c = M1_t(i,j);
M2_t(mod(i+j-2,K)+1,mod(i+2*j-3,K)+1) = c;
end
end
end
end
if mod(key,2) == 0
M = M1_t;
else
M = M2_t;
end
imwrite( double(M)/255,strcat( 'Arnold_',num2str(key),'_',Image ),'bmp' );
imshow(M);
然后保存为 Arnold.m 并运行,然后随便找一个图片,放在 D:\MATLAB7\work 文件夹里,
而 后 在 Matlab 窗 口 的 Command Window 里 按 照 格 式 Arnold(Image,key) 输 入
Arnold('001.bmp',1)回车,这是 1 次 Arnold 变换,可以改变 key 的值来改变变换次数,如
如下图:
原图:
1 次 Arnold 变换
2 次 Arnold 变换
2.Arnold 反变换
再新建一个 M—file ,在里面打入如下代码:
%文件名:FanArnold.m
%函数功能:本函数将完成对按Arnold置换策略进行置乱的图像的置乱恢复
%输入格式举例:FanArnold('lena.bmp',3)
%参数说明:Key为置乱控制密钥
function FanArnold(Image,key)
[X,map]=imread(Image);w1=X;w0=double(w1)/255;w1=w0;subplot(2,2,3);
imshow(w1,[]);title('待恢复的图像'); Size_X = size(X); n=Size_X(1); %将图像的阶数赋
值给n
for k=1:key
for x=1:n
for y=1:n
x1=2*x-y; y1=y-x; x2=2*x-y-n; y2=n+y-x;
x3=n+2*x-y; y3=y-x; x4=2*x-y; y4=n+y-x;
if(x1=0)&(y1=0)
if x1==0
x1=n;
if y1==0
y1=n;
end;
end;
w1(x1,y1)=w0(x,y);
elseif(x2=0)&(y2=0)
if x2==0
x2=n;
if y2==0
y2=n;
end;
end;
w1(x2,y2)=w0(x,y);
elseif(x3=0)&(y3=0)
if x3==0
x3=n;
if y3==0
y3=n;
end;
end;
w1(x3,y3)=w0(x,y);
if x4==0
x4=n;
if y4==0
y4=n;
end;
end;
w1(x4,y4)=w0(x,y);
else
end
end
end
w0=w1;
end
subplot(2,2,4); imshow(w0,[]); title('置乱反变换后的原图');
然 后 保 存 为 FanArnold.m 并 运 行 , 在 Matlab 窗 口 的 Command Window 里 按 照 格 式
FanArnold(Image,key)输入并回车,
如图:输入 FanArnold('Arnold_1_001.bmp',1)将一次 Arnold 变换所置乱的图像恢复
可以看到只要知道密钥 key 就可利用这个新程序可以将杂乱无章的图形还原出来。假如你
不知道置乱的次数 key 你就没有办法将图像还原,
如果输入 FanArnold('Arnold_1_001.bmp',5)得到如下图形:
这要你就无法恢复出原图了,这样就大大的保证了图像的保密性。