图像置乱
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.3数字图像置乱技术研究
6.3.1图像置乱原理
图像置乱技术属于图像加密技术,它通过对图像像素矩阵的重排,破坏了图像矩阵的相关性,以此实现信息的加密,达到安全传输图像的目的。
图像置乱的实质是破坏相邻像素点间的相关性,使图像“面目全非”,看上去如同一幅没有意义的噪声图像。
单纯使用位置空间的变换来置乱图像,像素的灰度值不会改变,直方图不变,只是几何位置发生了变换。
置乱算法的实现过程可以看做是构造映射的过程,该映射是原图的置乱图像的一一映射,如果重复使用此映射,就构成了多次迭代置乱。
我们假设原始图像为0A ,映射关系用字母σ表示,得到的置乱图像为1A ,则原图到置乱图像的关系,可简单的表示为:
1
0A A −→−σ
例如:原始图像用矩阵0A 表示,置乱后的图像为1A , ij a 代表坐标为(),x y 的像素点的灰度:
⎥
⎥
⎥⎥
⎦⎤
⎢⎢⎢⎢⎣⎡=3332
31
30
2322212013121110
03020100
0a a a a a a a a a a a a a a a a A ⎥⎥⎥⎥
⎦
⎤⎢⎢⎢⎢⎣⎡=1200
21
33
11201002300132
03
312322131a a a a a a a a a a a a
a a a a A (6.3.1) 置乱映射σ的元素存在两种形式:一种是序号形式,用()j width i +*表示图像中像素的排列序号;一种是坐标形式,()j i ,表示第i 行第j 列。
则相应的置乱映射σ可表示如下:
⎥
⎥
⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡=1253720131011511948614σ或者()
()
()()()
()()()()()()()()()()
()⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢
⎣⎡0,31,13,03,12,00,01,32,21,03,33,21,20,10,22,12,3 (6.3.2) 映射τ中的元素表示:原图中该点元素在置乱后图像中的位置。
比如坐标为(0,1)的像素点最后变换到(1,2)这个位置上。
因此使用置乱映射σ进行迭代置乱,原图0A 应用映射τ迭代适当的次数后,能够得到理想置乱图像。
对1A 应用逆置乱映射,还原得到原始图像0A :
11
0A A −−→−-σ
6.3.2基于变换矩阵的图像置乱
我们一般处理的图片都是平面图片,即所谓的二维图片。
二维数字图像可以看作是平面区域D 上的二元函数D y x y x F Z ∈=),(),,(。
在绝大多数情况下区域D 是一个矩形,对D 中任意的点y x y x ,),,(表示其像素点的位置,而),(y x F 代表图像的信息(灰度图像是灰度值,彩色图像是RGB 分量值等)。
当图像数字化之后,图像),(y x F Z =则对应于数学中的一个矩阵,其元素所在的行与列),(y x 对应于自变量取值,数字图像离散化后是相应于元素之间有相关性的一类特别的矩阵。
通过数学中矩阵的初等变换可以将图像转换为另一幅图像,从而达到置乱的目的,但其置乱作用较差,因为初等变换是整行或整列进行变换,并不是对矩阵中每个点进行变换。
而一些非线性变换则有可能对图像置乱起到较好的作用。
现介绍目前几种常见的图像置乱方法。
1 基于Fibonacci 变换的图像置乱
Fibonacci 变换的基本原理与Arnold 变换一样,只是变换的矩阵稍有不同。
设图像的像素的坐标},1N ,,2,1,0{S y ,x -=∈ Fibonacci 变换为:
)(mod 0111''N y x y x ⎥⎦
⎤
⎢⎣⎡⎥⎦⎤⎢
⎣⎡=⎥⎦⎤
⎢⎣⎡ (6.3.3) 如图6.1表示380×380的miingxing 图像进行Fibonacci 变换的置乱效果
图6.3.1 fibonacci 算法的置乱图像
Fig.6.3.1Fibonacci algorithm scrambling image
用MATLAB 实现fibonacci 变换置乱的程序如下:
function [ fibonacci ]
i=imread('mingxing.jpg');%进行fibonacci 变换的原图
(a )原图
(b)7次置乱
(c)30次置乱
k=imresize(i,[380,380]);%把图片尺寸变换成380×380的
j=rgb2gray(k);%灰度化处理
subplot(1,3,1),imshow(j),title('原始图片')
size_j=size(j);
q=size_j;
for t=1:7
for a=1:q
for b=1:q
c=a-1;
d=b-1;
e=mod(c+d,380);
d=mod(c+0*d,380);
m=e+1;
n=d+1;
h(m,n)=j(a,b);
end
end
j=h;
end
subplot(1,3,2),imshow(j),title('7次置乱图片')%输出7次置乱图片for t=1:23
for a=1:q
for b=1:q
c=a-1;
d=b-1;
e=mod(c+d,380);
d=mod(c+0*d,380);
m=e+1;
n=d+1;
h(m,n)=j(a,b);
end end j=h; end
subplot(1,3,3),imshow(j),title('30次置乱图片')%输出30次置乱图片 end
2 基于排列变换的图像置乱
设图像像素的坐标}1N ,,2,1,0{S y ,x -=∈ ,排列变换表示为:
Z k S y x N y x k k y x ∈∈⎥⎦
⎤⎢⎣⎡⎥⎦⎤⎢
⎣⎡+=⎥⎦⎤⎢⎣⎡,,),(mod 111
'' (6.3.4)
式子(6.3.4)和Arnold 变换的变换方法一样,也只是变换矩阵有些变化,很容易看出:Fibonacci 变换就是式(6.3.4)中,k=0,Arnold 变换就是k=1。
如图6.3.2用大小为380×380的baoba 灰度图像表示置乱效果,假设k=6。
图6.3.2 排列算法(k=6)的置乱图片
Fig.6.3.2 arrangement algorithm scrambling image
3 基于亚仿射变换的图片置乱
设图像像素坐标}1N ,,2,1,0{S y ,x -=∈ ,亚仿射变换为:
(a)原图
(b)1次置乱
(c)10次置乱
Z d c b a S y x N y x d c b a y x ∈∈⎥⎦
⎤
⎢⎣⎡⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡,,,,,,),(mod '' (6.3.5) 其中1c b d a ±=⨯-⨯,同样亚仿射变换依然和前面介绍的Arnold 变换方法一样。
只是变换矩阵更加的一般化。
取33d ,7c ,14b ,3a ====,如图6.3.3是用大小为450×450的图像表示其置乱效果。
图6.3.3 亚仿射算法的置乱图片
Fig.6.3.3 The affine algorithm scrambling image
6.3.3基于Arnold 变换的数字图像置乱
Arnold 变换置乱
Arnold 变换又称猫脸变换,设想在平面单位正方形内绘制一个猫脸图像,通过下述变换,猫脸图像将由清晰变的模糊。
矩阵表示即为:
)mod(2111''N y x y x ⎪⎪⎭
⎫
⎝⎛⎪⎪⎭⎫ ⎝⎛=⎪⎪⎭⎫ ⎝⎛ (6.3.6) )','(y x 是图像中),(y x 的像素变换后的新的位置。
反复进行此变换,即可得到置乱的
图像。
图像的二维Arnold 变换,实现像素位置的置乱,所以经过Arnold 变换处理的图像,其灰度直方图与原图一样。
下面以380×380的renwu 图像进行10次、50次、90次置乱之后的图像,在90次置乱后,又回到原始图像。
(a)原图
(b)10次置乱
(c)50次置乱
(a)原图(b)10次置乱(c)50次置乱(d)90次置乱
图6.3.4 Arnold算法置乱图片
Fig.6.3.4 Arnold algorithm scrambling image
用MATLAB实现Arnold变换的程序如下:
function [ Arnold ]
i=imread('renwu.jpg');%进行Arnold变换的原始图片
k=imresize(i,[380,380]);%图片尺寸变换为380×380的
j=rgb2gray(k);%图片进行灰度化处理
subplot(1,4,1),imshow(j),title('原始图片')
size_j=size(j);
q=size_j;
for t=1:10
for a=1:q
for b=1:q
h(mod(a+b,q)+1,mod(a+2*b,q)+1)=j(a,b);%进行矩阵变换
end
end
j=h;
end
subplot(1,4,2),imshow(j),title('10次置乱图片')%输出10次置乱图片for t=1:40
for a=1:q
for b=1:q
h(mod(a+b,q)+1,mod(a+2*b,q)+1)=j(a,b);
end
end
j=h;
end
subplot(1,4,3),imshow(j),title('50次置乱图片')
for t=1:40 for a=1:q for b=1:q
h(mod(a+b,q)+1,mod(a+2*b,q)+1)=j(a,b); end end j=h; end
subplot(1,4,4),imshow(j),title('90次置乱图片')%输出一个变换周期后的图片
Arnold 变换的周期性
对于数字图像来说,可以将其看成是一个函数在离散网格点处的采样值,这样我们就得到了一个表示图像的矩阵.矩阵中元素的值是对应点处的灰度值。
对于正方形数字图像,我们的离散化的Arnold 变换式(6.3.6),其中N 为图像的宽度和高度,即图像矩阵的阶数。
数字图像经过Arnold 变换后,变得混乱不堪,继续使用Arnold 变换若干次后,会呈现与原图一样的图片,说明Arnold 变换具有周期性。
置乱变换的周期性变换性质,对于研究图像的恢复有积极的作用。
定理6.3.1 给定自然数2>N ,Arnold 变换式(6.6)的周期N m ,是使式(6.3.7)成立的最小自然数n :
⎥⎦⎤
⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦
⎤
⎢⎢⎢
⎢⎢⎢⎣
⎡
⎥⎥⎦⎤⎢⎢⎣⎡⎪⎪⎭⎫ ⎝⎛--⎪⎪⎭⎫ ⎝⎛+⎥⎥⎦⎤⎢⎢⎣⎡⎪⎪⎭⎫ ⎝⎛--⎪⎪⎭⎫ ⎝⎛+++++11)mod (251251512512515
13
2322222N n n n n (6.3.7) 此定理的证明此处不再详细描述。
由定理6.3.1可以得出以下推论:给定自然数
2>N ,Arnold 变换式(6.3.6)的周期N m ,是使式(6.3.8)成立的最小自然数n :
()⎥
⎦
⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡11N mod 11n A (6.3.8)
其中
⎥
⎦⎤
⎢⎣⎡=2111A ,N 是图像矩阵的阶数。
由于Arnold 变换具有周期性,不同大小的图像经过一定的迭代变换就可以恢复到原始
图像。
表6.3.1是不同阶数下的图像迭代恢复到原始图像的周期M 。
表6.3.1 各种大小为N N 的图像的二维Arnold 变换周期
N 2 3 4 5
6
7 8 9 10 11 12 16 24 25 周期 3
4
3
10 12
8
6
12
30
5
12
12
12
50
N
32 40 48 49 56 60 64 100 120 125 128 256 380 450
周期 24 30 12 56 24 60 48 150
60
250
96
192
90
300
基于传统Arnold 变换的图像恢复
Arnold 变换具有周期性,当迭代到某一步时,将重复得到原始图像。
传统的Arnold 变换的图像恢复是利用Arnold 变换的周期性。
由图6.3.5可使256×256的renwu 图像进行置乱与恢复(表6.3.1可得图像大小为256×256的周期为192)。
图6.3.5 传统Arnold 置乱的图像恢复
Fig.6.3.5 Traditional Arnold algorithm scrambling image recovery 观察表6.3.1,Arnold 变换的周期与图像大小相关,但并不成正比关系。
例如,对于128×128的数字图像,它的置乱周期为96,即原图要经过96次Arnold 变换之后才能恢复原图。
如果原图已经经过了30次Arnold 置乱,那么,只需再进行(96-30)次即66次Arnold 变换,便可恢复原图;对于已经置乱了200次的图像,要想恢复原图,需要变换的次数为96 - (200 mod 96)=88。
利用周期性进行置乱恢复,方法简单、便于理解和实现。
但是必须知道图像的大小,才能计算出Arnold 变换的周期。
下面命题引出了Arnold 逆变换式,无需知道变换的周期,直接根据置乱次数,即可恢复出原图像。
(b) 置乱192次后的图像
(a) 原图
定理6.3.2 对于变换式(6.3.6)的矩阵A ,如果用逆矩阵⎥⎦
⎤⎢⎣⎡--=-11121
A 替代,即变成如
下变换:
⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣
⎡--=⎥⎦⎤⎢⎣⎡y x y x 1112// (6.3.9)
则式(6.3.9)与Arnold 变换式(6.3.6)周期相同,如果把置乱图像当成输入,则式(6.3.9)可以作为Arnold 逆变换式。
由此式可以通过迭代恢复原图,无需计算变换的周期数,与周期无关。
但是,如果置乱次数很大,同样会增加逆运算的运算量。
所以应根据具体情况选择恢复算法,不能一概而论。
对于置乱次数小的图像,可以采用Arnold 逆变换。
通过Arnold 逆变换算法对置乱图像进行恢复。
程序运行后得到图6.3.6所示结果:
图6.3.6 应用Arnold 逆算法恢复原图
Fig.6.3.6 application of inverse Arnold algorithm
由图6.3.6可以看出置乱图像应用Arnold 逆算法解密后,能够顺利恢复出原始图像。
从以上置乱方法来看,图像置乱只是使图像中的像素位置发生了改变,从而使一幅有意义的图像变成了一幅“杂乱无章”的图像。
重要的是,这种变换一定要有周期性,从而可以保证置乱图像的还原,如果不能保证图像置乱后还原,合法用户也不能提取原有的秘密信息,则图像置乱就失去了原有的意义。
还有很多经典的图像置乱方法,比如图像分存、根据混沌理论的图像置乱算法,离散余弦变换等。
思考题
(a )置乱图片
(b)置乱恢复
已知图像⎥⎥⎥⎥
⎦
⎤⎢⎢⎢
⎢⎣⎡=805020016821024015010017018013070901262068M 。
根据Arnold 置乱算法的原理,试计算出图像M 经过2次置乱后的图像N 。
参考答案:
已知Arnold 置乱变换公式: )mod(2111''N y x y x ⎪⎪⎭
⎫
⎝⎛⎪⎪⎭⎫ ⎝⎛=⎪⎪⎭⎫
⎝⎛ N=4,12332)4mod(32)mod(112111m N =⎪⎪⎭⎫ ⎝⎛=⎪⎪⎭⎫ ⎝⎛=⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫
⎝⎛,1
1441)4mod(322111m =⎪⎪⎭
⎫ ⎝⎛=⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛,1
1221)4mod(142111m =⎪⎪⎭⎫ ⎝⎛=⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛。
经过计算,得到一次Arnold 置乱变换后的图像1N : ⎥⎥⎥⎥⎦
⎤
⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=8012613010070210502020068170240180150168904413
22
31
2134431242112433
23324114
1m m m m m m m m m m m m m m m m N 同理,根据变换公式得到2次
置乱变换的矩阵N :⎥
⎥
⎥⎥⎦
⎤
⎢⎢⎢⎢
⎣⎡=⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=8015017020
24070126168130902002106850
100
180144113
122
131121
134143112142111124133123
1
32141114m m m m m m m m m m m m m m m m N。