一般地,可以用下面的Matlab程序测试任意大小的图像迭代多少次后回到原图。
X=1;y=1;n=240;k=1;
t=x;x=x+y;y=t+2*y;
while x~=1&y~=1
k = k+1;
if x > n
x = mod(x, n);
end
if y > n
y = mod(y, n);
end
t = x; x = x + y; y =t + 2*y;
end
k
通过给出的程序, 可以求出不同阶数下数字图像的Arnold变换周期, 如表1所示。可以观察得出, Arnold变换的周期性与图像大小有关, 但并不成正比。
表1 不同阶数下数字图像的Arnold循环次数 阶级循环
次数 阶级循环
次数 阶级循环
次数 3 4 3 10 12 8 6 12 30 12 12 50 50 150 60 60
100 150
120 60
125 250
256 192
512 383
基于Arnold变换的图像置乱Matlab程序如下:
forn=1:iTimes
foru=1:Mm
forv=1:Nm
temp=tempImg(u,v);
ax=mod((u-1)+(v-1),Mm)+1;
ay=mod((u-1)+2*(v-1),Nm)+1;
outImg(ax,ay)=temp;
end
end
tempImg=outImg;
end
iTimes: 置乱次数 tempImg:置乱前图像 outImg:置乱后图像
Arnold变换实现效果图如下所示:
4. 魔方变换及图像的魔方加密算法
4.1 魔方变换的定义
魔方玩具是一个被分割成若干子块的立方体结构, 转动子块可以在魔方的表面上拼凑成特定的图案, 也可以把拼好的图案打乱。可以对数字图像进行类似的置乱变换,一幅二维数字图像可以看成是一个矩阵,矩阵中各个元素表示图像中像素点的灰度值。按照魔方玩具的规则,对图像矩阵的各行各列进行“转动”, 考虑到图像矩阵的二维性, 引入循环移位的思想,“转动”某一行可以看作是对该行按某个方向循环移动位。为方便起见, 称为移位参数, 可以由特定的算法确定。对图像矩阵的各列可以同样处理,当每一行每一列都进行了一次循环移位后完成一次变换操作, 得到一幅新的图像,即:=, 其中表示从到的变换映射。本文定义这种变换为魔方变换,实际应用中可以按上述步骤进行多次迭代以得到期望的加密效果。
4.2 加密算法步骤
具体的加密算法步骤如下:
(1)输入图像文件InImage,矩阵表示为, 图像宽为, 高为;
(2)输入初始值和迭代次数;
(3)取λ= 2, 由Logistic映射生成混沌序列:;
(4)对上述序列进行适当处理, 得到自然数混沌序列, 即混沌映射的轨迹点所形成的序列:
,作为魔方变换移位参数集合;
(5)对图像逐行进行参数为的循环移位,然后再逐列进行移位。各行列的移位参数取自步骤4中所得到的移位参数集合;
(6)按步骤5操作重复进行次;
(7)得到加密输出图像文件OutImage。
魔方变换实现效果图如下所示:
5.置乱技术的应用
假设数字水印图像的像素大小为64×64, 如图5(b)所示。利用水印算法将数字水印图像嵌入到图5(a)所示像素大小为512×512的Lena图像中, 然后将Lena图像左上角1/4大小的面积剪切掉。如果未利用置乱技术, 则恢复的数字水印图像必然会像图5(c)那样出现左上角1/4大小的面积缺损,视觉效果也比较差。左上角1/4大小面积是出现错误的位置, 如果这些错误集中于一处必然会严重影响视觉效果, 如果这些错误元素分散在整个矩阵中, 则视觉效果必会得到提高,错误元素越分散, 视觉效果就越好。为了改善视觉效果, 应在水印嵌入之前运用Arnold置乱技术,恢复出的数字水印图像如图5(d)所示。