随着图像压缩技术的发展,对压缩数据进行加密的方法不但提高了加密效率,而且取得了广泛应用。然而,由于图像数据量大、冗余度高,其压缩数据量较大,这种方法的加密速度仍难于满足图像的实时安全传输要求。为此,我们基于SPIHT的灰度图像部分加密方法,这种方法非常适用于灰度图像加密。
一、SPIHT编码原理
首先对图像进行离散小波变换,并将所有高频子带小波系数根据一定规则划分为空间方向树(Spatial OrientationTrees,SOT)集合。然后用渐进量化编码对小波系数进行编码。在编码中,SPIHT借助了3个链表:不重要系数链表(List ofInsignificant Pixels,LIP),不重要集合链表(List of InsignificantSets,LIS)和重要系数链表(List of Significant Pixels,LSP),并用小波系数矩阵中LL层的小波系数初始化LIP,用所有的SOT初始化LIS,初始化LSP为空集。
SPIHT编码由扫描3个链表完成。当阈值为Tk时,k=0,1,…,K(K由压缩率决定),扫描过程如下:
(1)LIP扫描:将不重要系数保留在LIP中,重要系数移入LSP,并输出表示系数重要性和符号的比特;
(2)LIS扫描:扫描LIS中所有的SOT,如果SOT中不包括重要系数(即SOT不重要)将其保留在LIS中;反之,则将SOT分裂为4个直接后代和更小的SOT,将小SOT加入到LIS链尾,并判断4个直接后代系数的重要性,不重要系数放入LIP中,重要系数放入LSP。同时,输出表示SOT重要性、系数重要性和符号的比特;
(3)LSP扫描:输出LSP中每个系数第n(n=1b(Tk))个位平面的比特Bk,LSP到压缩数据中。至此一个循环扫描完成,改变阈值Tk+1=Tk/2进入下一次扫描。如此迭代,直到输出数据达到要求的压缩率为止。
二、基于SPIHT算法的部分加密
3个链表扫描过程产生的不同类型压缩数据在解码中起着不同的作用。如果从中选择对解码极为重要的数据,则只对这部分数据进行加密即可保障图像安全,进而得到新的图像部分加密方案。
1、 SPIHT数据重要性分析
设SPIHT算法输出的压缩数据为B(比特流),B可以分成有序的子集B={Bo,B1,…,Bk),其中,Bk表示第k次迭代扫描产生的压缩数据。Bk可以进一步划分为Bk={Bk,LIP,Bk,LIS,
Bk,LSP),如图1所示。
其中,Bk.LIP,Bk.LIS和Bk.LSP分别表示LIP扫描、LIS扫描和LSP扫描产生的压缩数据。根据SPIHT编码原理,Bk,LIP和Bk,LIS又分别由Bk,LIP_sig,Bk.LIP_sgn和Bk,LIS_T,
Bk.LIS_sig,Bk,LIS_sgn组成(见图1)。
由上可见,SPIHT算法产生了Bk,LIP_sig,Bk.LIP_sgn,Bk,LIS_T,Bk.LIS_sig,Bk,LIS_sgn和Bk.LSP 6种类型数据,下面结合实验对其在解码中的重要性进行讨论:
(1)Bk,LIP_sig表示LIP链表中系数的重要性。LIP链表包含了所有低频子带系数和部分高频子带系数。由于低频子带集中了图像的绝大部分能量,这部分数据对图像重构极为重要。另外,在编码中如果bi(Bk,LIP_sig且bi=1,则bi+1∈Bk,LIP_sig;如果bi=0,则bi+1∈Bk,LIP_sig,即改变Bk,LIP_sig将直接影响后面比特的意义,进而产生连锁反应,直接影响后面大部分或所有数据的意义。所以,Bk,LIP_sig在解码中是重要数据。图2(a)是lena原始图像;图2(b)是改变这类数据后的重构图像,从中已不能分辨原图像的任何信息。
(2)Bk.LIP_sgn表示LIP链表中重要系数的符号。它只会影响一个系数值,不影响其他数据的意义,因此,不属于重要数据。图2(c)是改变Bk.LIP_sgn后的重构图像,尽管发生了失真,
但仍能获得原图像信息。
(3)Bk.LIS_T表示SOT的重要性,影响SOT中的所有系数值。SPIHT算法中SOT的前后状态相互关联。如果第七次迭代扫描产生的Bk.LIS_T值不确定,后面迭代产生的Bk.LIS_T(Ti>k)
都会受到影响。也就是说,这类数据不但影响所有高频子带系数值,而且还影响其后面数据的意义。图2(d)是改变Bk.LIS_T后的重建图像,从中已无法辨别原图像信息,表明了Bk.LIS_T
数据的重要性。
(4)Bk.LIS_sig表示SOT中系数的重要性。由于这些系数来自高频子带,表示图像的纹理和边缘,因此这部分数据错误仅导致图像模糊不清,但仍然可以分辨图像轮廓。图2(e)是改变这类数据后的重构图像,表明Bk.LIS_sig在解码中的重要性较低。
(5)Bk,LIS_sgn表示SOT中重要系数的符号。它的作用与Bk.LIP_sgn相似,也属于非重要解码数据。不同的是Bk.LIP_sgn产生于LIP扫描,而Bk,LIS_sgn产生于LIP扫描。图2(f)是改变
Bk,LIS_sgn后的重构图像,原图像信息仍然可见。
(6)Bk.LSP表示系数最高位平面以下的比特,它能使重构系数值逐渐逼近原系数值,从而进一步提高解压缩图像的质量。改变Bk,LSP只影n向小波系数值的大小,但不影响其他比特的意义,因此为非重要比特。图2(g)是改变这种类型比特后的重构图像。由图可见,只是图像的亮度发生了改变。
2、部分加密方案
根据上面的分析可知,Bk,LIP_sig,Bk,LIS-T在SPIHT算法中是重要数据。而且,这两类数据直接影响其它类型数据的意义。因此,只需加密前N次迭代产生的Bk,LIP_sig,Bk.LIS_T,便可达到保护所有图像数据的目的。据此,本文给出新的部分加密方案如图3所示。其中,图3(a)中“数据类型选择”和图3(b)中“数据类型判定”是在前N次迭代中确定Bk,LIP_sig
和Bk,LIS_T。“加密”环节采用了流加密算法,主要通过伪随机发生器产生的随机比特流与重要数据比特异或完成加密。
在部分加密应用中,迭代次数N的选择不宜小于2。由于图像经过小波变换后能量主要集中在低频子带,高频子带能量少且小波系数值较小,这样,前2次迭代扫描中SOT不重要的概率较大,产生的Bk.LIS_T编码数据中往往多数为“0”。根据这一特点,攻击方易于从“0”串中推断出加密数据的位置,进而用穷举搜索法攻击加密数据。因此,为了保障部分加密的安全性,N应至少选取为2。
三、仿真实验
本文基于Matlab7.0平台,以标准灰度图像库中的图像文件为对象进行了计算机仿真实验。其中,图4给出了2幅实验灰度图像文件(图4(a))及其部分加密结果。在实验中,加密了SPIHT算法前两次迭代(N=2)扫描产生的Bk,LIP_sig和Bk,LIS_T(k=0,1)。加密用随机比特流由BBS(Blum-Blum-Shub)产生‘u。图4(b)是由加密数据流重构的二幅图像,显然从中已无法辨别原图像信息。
为了进一步表明部分加密的安全性,本文比较了原始图像和图像文件加密的直方图。其中,图4(c)是二幅原始图像的直方图,图4(d)是二幅图像文件加密后的直方图。由图可见,部分加密打破了原始图像的统计特性,将原始图像的特殊分布直方图变成了近似均匀分布的直方图,大大降低了图像文件加密和原始图像的相关性。
本文与其他的部分加密数据量进行了比较,结果如表1所示。其中“加密百分比”是加密数据量与压缩数据量的比值。文献[3]提出的部分加密方法是将前2次迭代(k=0,1)中产生的所有压缩数据全部加密,而本文仅选择了其中的重要比特Bk,LIP_sig和Bk,LIS_T进行加密。因此,相比之下,本文的加密数据量减少近一半。同时,因为所选择加密数据的重要性,图像的数据安全仍可得到保障。
小知识之数据编码
数据编码是指把需要加工处理的数据库信息,用特写的数字来表示的一种技术,是根据一定数据结构和目标的定性特征,将数据转换为代码或编码字符,在数据传输中表示数据组成,并作为传送、接受和处理的一组规则和约定。