网络的快速发展,需要对大量的图像进行加密以保证安全可靠。作者提出一种对图像压缩和加密相结合的新算法,该算法达到了较好的加密效果且加密速度得到提升……
近年来,视频压缩编码和视频加密这两个领域的研究均十分活跃,其中主要的研究技术也较为成熟,但是作为图像处理的两个重要的方面,人们对他们结合起来的分析和研究还缺乏足够的重视和足量的人力物力的投入。
混沌理论是近年来发展较快的非线性科学的重要分支,因其具有非周期、连续宽频带、类噪声和长期不可预测等特点,所以特别适用于保密通信等领域。分形编码有着精细的结构,具有任意小比例下存在某种自相似细节的特点。分形理论的特点决定了人们着重研究它在图像压缩方面的作用,但是它在图像加密方面的应用还没有被人们开发出来。本文通过对现有图像压缩算法和加密算法发展方向的分析,提出一种将分形压缩编码和混沌保密算法相结合的算法。经分析该算法具有较好的压缩加密效率,并且能够满足对图像的安全的要求。
分形图像压缩
分形图像压缩是利用原始图像所具有的自相似性,构造一个迭代函数系统(IFS),利用IFS抽取图像的自相似性,即用图像中的一个子块经过分形仿射变换来逼近同一图像中的另一子块,而且仅仅将仿射变换系数记录下来,从而达到压缩图像数据的目的。
分形压缩理论主要包括:分形空间上的压缩映射,迭代函数系统,压缩映射的不动点定理,拼帖定理及仿射变换等理论。
一般的分形压缩编码过程为:
(1)将原始图像分块
把原始图像分别分割成尺度K*K的值域块 Ri和L*L的定义域块 Di,一般取L=2K.
(2)寻找合适的分形变换参数
利于图像局部之间的相似性,根据了IFS拼贴定理,为图像中每一个值域块Ri 寻找与之最匹配的定义域块 Di及相应的仿射变换 wi.
(3)存储分形变换参数
找到最佳匹配块,记下坐标值和应用误差值,依次完成对原图像的编码,从而实现图像的压缩。
经过上面的分析可以看出在分形图像压缩算法中最核心的部分就是对图像的仿射变换 的选取。下面我们来详细分析其算法:
首先定义图像f(x,y)上的映射 wi:F →F为:
在变换中,常数Si 控制灰度图像的对比度,Qi 控制图像的亮度。
空间压缩变换一般可以简化成8种形式,即旋转0°,90°,180°,270°,垂直中线反射,水平中线反射,相对45°反射以及相对135°反射。我们用c++编程实现仿射变换,主要编码如下:
对当前定义域块做变换(8种)
for(t=0;t<8;t++)
{ if(t==0)
{ for(k=0;k
for(l=0;l
TransDomain[k][l]=Domain[m+k][n+l]; }
//旋转
同样类似其余七种变换主要形式如下:
TransDomain[k][l]=Domain[m+k][n+BLOCKSIZE-1-l]; //旋转90°
TransDomain[k][l]=Domain[m+BLOCKSIZE-1-k][n+l]; //旋转180°
TransDomain[k][l]=Domain[m+l][n+k];
//旋转270°
TransDomain[k][l]=Domain[m+l][n+BLOCKSIZE-1-k]; //垂直中线反射
TransDomain[k][l]=Domain[m+BLOCKSIZE-1-l][n+BLOCKSIZE-1-k]; //水平中线反射
TransDomain[k][l]=Domain[m+BLOCKSIZE-1-k][n+BLOCKSIZE-1-l]; //相对45°反射
TransDomain[k][l]=Domain[m+BLOCKSIZE-1-l][n+k]; //相对135°反射
通过寻找图像的反射变换,我们可以得到变换后的图像与原图像之间的误差,设其为erri ,预先给定一个误差标准 ε,只要每一块的误差 erri<ε ,就认为完成了图像的分形编码,否则将值域块分割成更小的值域子块,重复该过程,直到误差满足要求或者值域块的分割已经达到预先确定的最小值则认为完成了图像的分形编码。分形编码中对图像的分割越小,则编码的精确程度就会越高,但同时高的编码质量却影响了压缩率和计算速度。
对一幅图像进行分形编码后,存储的文件中是原图像的所有变换参数。我们可以明显看出,对一幅图像来说,存储映射参数所需的存储空间要远远小于存储原图像的空间,因此我们很好的实现了图像压缩的目的。在上节的处理中我们把变换参数存进了一个M*N的矩阵中,设为Y(M,N)。编程时定义了一个结构体用于存储编码参数:RangeX,RangeY,DomainX,DomainY,TransformNo,Scale,Offset,因此M的大小就是由定义域块 、值域块 的位置与大小及仿射变换 wi确定的,取M=7;而N的大小可以定义为:N=IMAGESIZE/BLOCKSIZE。
混沌加密算法
混沌现象是在确定性非线性动力系统中出现的确定性、类随机的过程,它对初始值有极其敏感的依赖性。因此混沌加密技术非常适合用于图像加密。
Logistic序列的混沌特性和统计特性分析如下:
(1)
其中 xk为映射变量,u 为系统参数,取值范围为-1
算法原理步骤:
第一步:根据Logistic映射(1),利用密钥u 、x0 生成一组混沌序列 xk,从 xr(r>0)开始取M×N个元素构成N×M矩阵 G,G(i,j)∈[-1,1]。因此可知此混沌序列的密钥为 xr。
第二步:根据式(1)生成混沌序列 xk,令L=2。首先,把 xk整数化,生成置乱矩阵G,并令其值 [0,255],取整算法:
gk =round( *255/2+255/2) k=0,1,…MN-1 (2)
第三步:对原图像进行加密处理。将分形压缩后形成的参数矩阵Y与置乱矩阵G中相对应的 进行位的异或运算,生成加密图像M,
即 mk=yk ^ gk=0,1,…MN-1 (3)
第四步:对加密图像M进行行列置乱处理。将M中元素位置为1的元素移到元素位置为2的位置,将2移到3的位置,依此类推,最后将M×N移到1的位置。即得到最终加密图像 。
解密算法
输入正确的密匙 xr,生成相同的混沌序列 xk,及 gk。接着进行加密第四步和第三步的逆运算即可。
加密流程图如图1所示:
图1 加密流程图
算法的编程实现
实验中我们我们取 x0=0.3,并先跌代300次后开始取之后的M*N个元素作为矩阵G,取 u=1.42,对编码后的图像进行加密,我们用matlab仿真,图2为原图像,图3为加密后的图像。我们可以看出图像的加密效果很好。在解密时候只有正确输入密钥 xr(r=300)、 u才能得到正确的解密图像。
本算法先对图像进行了压缩处理,编码后的文件大大缩小,有利于下一步的加密处理;加密时置乱矩阵是随机选取的,只有知道正确的密钥解密后才能够得到正确图像,利用混沌序列大大提高了安全性。通过大量实验证明,此压缩加密算法在加密文件数据量大,要求加密速度高的情况下具有较好的效果,因此在许多领域能够得到广泛应用。
图2 原图像
图3 加密图