码流映射的JPEG2000遥感图像无损信息隐藏
2019-11-26
西安空间无线电技术研究所 空间微波技术国家级重点实验室,西安 710100
随着航天技术的飞速发展,越来越多的空间遥感探测飞行器在军事侦察、国土勘测及天气预报等国计民生方面得到应用,高光谱、可见光、红外和SAR (Synthetic Aperture Radar)多种形式的遥感图像被传输到地面[1]。其中应用最广的是高光谱和可见光图像,因其具有分辨率高、持续性强的优点,长期观测有很大的优势。国外的WorldView、Landsat,国内的高分系列、吉林1号被应用于军事和民用领域,发挥了重要的作用[2-3]。随着海量高清晰度的遥感图像需要通过有限的卫星信道带宽传输至地面,遥感数据需要进行压缩才能星上设备存储并转发[4-5]。卫星在运行过程中,会执行地面站的其他额外任务或者对感兴趣目标标注附加信息,而此时星上设备需要单独执行数据的采集和传输任务,额外增加通信信道,这样影响了传输效率[6]。
JPEG2000(Joint Photographic Experts Group 2000)作为新一代的图像压缩标准,以其编码效率高、可固定压缩比的特点被广泛应用于航天器的图像传输领域。为了尽可能清晰地将可见光、高光谱图像的内容保留,一般采用JPEG2000的4倍压缩格式,这样图像质量很高,可以高保真地显示原始图像信息,与未压缩的原始图像相比肉眼难以区分,同时数据量有了很大的下降。在实际的传输过程中,会产生一些遥测数据和备注信息,为了搭载这些数据,重新分配带宽会增加硬件开销,而信息隐藏可以将秘密信息直接嵌入到JPEG2000的码流数据中,不需要额外带宽。本文提出的压缩域无损信息隐藏压缩码流没有解压缩过程,直接利用数据内部的相关性来隐藏数据,隐藏前后文件没有膨胀,载体和秘密信息都可以无损恢复和提取,在已建立好通信协议的环境下,可以实现附加数据的搭载功能,降低了硬件和频谱开销,具有很强的应用价值。
可逆信息隐藏是将秘密信息隐藏在图像中,在接收端秘密信息可以无损提取而载体也能可逆恢复。从实现载体上分,可逆信息隐藏可以分为空域[7-8],变换域[9-11],压缩域[12-22]。以压缩图像为载体的压缩域信息隐藏从实现技术上可以分为无损压缩[9],更改量化系数[17-18],修改编码表[13,16,21-22]以及在加密码流中隐藏[19-20]。
Chang等[12]提出了一种在JPEG (Joint Photographic Experts Group)加密码流中的隐藏算法,他是将一部分码流无损压缩来预留出一部分空间来嵌入秘密信息。Qiu等[13]建立了一个JPEG码字的最优映射,将每幅图像中没有用到的和使用过的VLC码字进行映射来代表不同的二进制信息。Huang等[14]对JPEG的每一个DCT (Discrete Cosine Transform)块的系数进行直方图移位-1和1来嵌入秘密信息。Qin等[15]提出了一种VQ (Vector Quantization)的可逆隐藏算法,通过自适应修改VQ的编码索引表来隐藏秘密信息。Hong等[16]利用自适应VQ隐藏算法,将编码表的下标重新排列使得相关性更强来更好地预测原有编码信息。Lin等[17]提出了一种BTC (Block Truncation Coding)隐藏算法,他使用中值边缘检测更好地预测量化值。Kasana等[18]将秘密信息嵌入在JPEG2000图像中,将码流解压到DWT (Discrete Wavelet Transform)域,利用直方图平移的方法来调整小波系数。Zhang等[19]是将秘密信息作为备注信息,使用标准注释符号将秘密信息嵌入在JPEG以及JPEG2000的文件头中。Zhou等[20]随后提出多种替换和插值策略,寻找最优的嵌入参数将秘密信息直接替换到JPEG2000的最不重要的区域。Lu等[21]将JPEG2000图像解压至DWT域,利用DWT域中数据的相关性来隐藏秘密信息。Fu等[22]通过量化DWT系数,将多比特标志数据嵌入到JPEG2000数据流中。他所提出的嵌入方法具有灵活的位定位特性,使得嵌入位置尽可能靠近覆盖数据的最高位,从而增强了鲁棒性。虽然压缩域信息隐藏得到实现,但是文献[12-17]是关于JPEG、VQ和BTC图像为载体的,将其直接应用到JPEG2000图像存在兼容问题,而文献[18-19,21-23]隐藏后JPEG2000文件膨胀,文献[20]主要考虑的是码流的大容量非无损信息隐藏。
在JPEG2000文件大小不变的前提下实现无损隐藏是目前研究的热点。文献[12]中载体数据可以无损恢复,但是需要对数据进行加密,并利用数据分布的不均匀性来无损压缩空余出额外的空间,运算复杂而且隐藏容量较小。文献[20]对码流数据分析,得出数据部分是按照重要性由前置后的顺序排列,只是对数据末尾最不重要的部分进行置换,隐藏前后数据量不发生改变,隐藏容量不是很大的情况下载体损失很少,可以做到近无损,但仍无法做到无损隐藏。
受文献[19-20]的启发,压缩后的数据流仍然具有相关性,码流不只在排列顺序中存在重要性关系,在编码过程中不同的DWT系数出现的次数不同,其对应的码字使用频率不同,可以用不同的灰度值代表不同的秘密信息,数据即使遭到破坏,仍然可以根据出现的频率校正恢复。本文提出JPEG2000图像的隐藏算法,通过建立码流关联直接对数据进行操作来实现无损隐藏,降低了运算复杂度,提升了隐藏容量,同时文件没有膨胀,适用于卫星的信息搭载。
1 JPEG2000压缩原理
JPEG2000是以DWT变换和算术编码为核心,将整幅图像由RGB通道变为CCbCr通道,再二维DWT变换到32×32的分辨率,对每个块进行位平面编码,然后得出算术编码后的映射,这时得到的是未压缩的数据,再根据质量层采用PCRD的思想,截断刚才的码字,按照压缩倍数的参数要求保留所对应的质量最高的数据,并将码流和数据头拼接起来组成JPEG2000压缩文件。具体编码过程如图1所示。
图1 JPEG2000编码流程Fig.1 JPEG2000 encoding flowchart
JPEG2000文件分为数据头和数据体,数据头包括量化系数、原始图像尺寸、压缩文件数据长度、备注信息以及颜色变换之前的预处理信息。在颜色变换前,为了降低运算的复杂度,需要将图像裁剪,例如4 096×4 096的遥感图像,图像太大难以直接压缩,需要将图像裁剪成1 024×1 024大小,然后进行JPEG2000后续压缩。任何一个JPEG2000文件都只有一个文件头,即使图像经过裁剪。而对于大小为512×512的图像,不需要裁剪直接压缩即可。
在JPEG2000文件中,数据头的标志位SOC为FF4F,数据体的标志位SOD为FF93,文件结束的标志位EOC为FFD9。在标志位SOD后面的10个字节表示数据体的长度,后面直至标志位EOC的码字才是真正的编码数据。
2 本文算法
本文主要是对数据体进行操作,将编码码流看成一幅图像,统计该图像的直方图,对出现次数最多和出现次数为0的灰度值建立映射关系,用不同的映射来代表不同的二进制秘密信息,其算法流程如图2所示。
图2 嵌入算法流程Fig.2 Embedding scheme flowchart
2.1 统计直方图与单级映射
图像经过iter-1编码后,上下文信息和标示符对应的算术编码索引值仍然在一定程度上反映了图像的基本信息。虽然编码过后,码流变成图像直观角度上是一张噪声,但是像素值之间仍然具有相关性,灰度值分布并不均匀,一部分出现次数比较高,一部分出现次数比较低甚至次数为0。这样编码产生冗余,一部分灰度值没有用到,可以用来代表秘密信息。截取一部分码流,长度127×127字节,其对应的图像和直方图如图3和图4所示。
图3 截取码流对应图像Fig.3 Corresponding truncated codestream image
图4 截取码流直方图Fig.4 Truncated codestream histogram
这里选取使用次数最多的灰度值作为映射,是因为出现的次数与隐藏容量相关。假设灰度值m0为使用次数最多的灰度值,出现次数为N,灰度值m1没有使用,则m0代表比特信息s“1”,m1代表比特信息s“0”,隐藏容量为N比特。其映射关系如图5所示。
图5 单级映射示意Fig.5 Single-level mapping sketch
这样所有的灰度信息被充分利用,少数码流被修改后,图像仍然可以正常显示。单比特映射存在隐藏容量较低的问题,甚至出现极个别情况,所有灰度值都被使用,这样导致没有空余的灰度值和最多次数的灰度值进行映射,此时隐藏容量为0,该算法失效。
2.2 图像分块与多级映射
为了进一步增强隐藏容量,提高隐藏效率,同时为了提高本文算法的鲁棒性,使得所有的图像都可以隐藏数据,本文将码流组成的图像分块,保证每个图像块中有出现次数为0 的灰度值,这样映射关系才能建立。当块中出现次数为0的灰度值个数大于1时,块内部可以建立多级映射,即一个映射可以代表多个比特。单级映射下小块的隐藏容量小于整幅图像,但是通过多级映射,图像分块下整体容量有了一定的提升。假设小块图像中出现次数最高的灰度值为m,出现次数为N,没有出现的灰度值为m1,m2,,mK-1。这样就有K个选择,一个映射就可以隐藏⎣log2K」比特信息,这个小块的隐藏容量为N×⎣log2K」比特。令K为4,则有2级映射,一个映射可以隐藏2比特信息。隐藏效果如图6所示。
图6 多级映射示意Fig.6 Multiple-level mapping sketch
这样图像分块又可以进一步增加隐藏容量,虽然修改的码字对解码有干扰,而JPEG2000具有容错性,遇到解码错误就会将该部分的码字跳过而解码下一段码字,这样图像仍然能够正常显示。在解码端只需要根据隐藏的灰度值就可以完整恢复出秘密信息,同时将载体码字统一修改为原有出现次数最高的灰度值。
2.3 数据嵌入过程
秘密信息嵌入按照如下步骤:
1)读取JPEG2000压缩文件。将标志位FF93后面的10个字节之前的部分作为数据头,这些数据是不能改变的,如果发生更改,图像会出现解码错误。剩下的部分将最后的标志位FFD9作为数据体部分,这些是嵌入载体,并将其转化为10进制整数。
4)取二进制数L比特,并为了安全性,产生伪随机码,与伪随机码取mod2,得到加密后的秘密信息,载体中的原始信息根据图像块的映射关系和秘密信息,替换为相应的字节。
5)将每个图像块转换为码流,并与剩余的码流合并作为数据体,和数据头拼接成隐藏后的JPEG2000压缩文件。
2.4 数据提取和恢复过程
数据提取和恢复的过程相反,需要按照如下步骤:
2)根据被替换的灰度信息,建立映射关系,将子图像中被替换的灰度值对应的秘密信息提取出来,并恢复为原来的出现次数最多的灰度值。
3)将所有秘密信息合并,并与伪随机数取mod2,得到最终的秘密信息。
4)将所有子图像转化为码流,和剩下的未使用的码流合并作为数据体,和数据头拼接一起作为最终恢复的载体。
3 图像质量评价
隐藏后的图像峰值信噪比 (Power Signal-to-Noise Ratio,PSNR)和隐藏容量EC (Embedding Capacity)是衡量隐藏好坏的两个标准[23]。因为恢复图像在秘密信息提取后是无损恢复,图像最终显示与原始载体没有任何差别,所以本文将载密图像的PSNR作为衡量标准,
对钻孔灌注桩半湿孔作业的几点建议:(1)在充分调研当地地质特性的基础上,可尝试使用半湿孔作业法,如遇特殊软土地层或地下水位较高的情况,慎用本方法,总之,需与地质地层情况相适应;(2)注意干湿交界面的设定,需充分考虑地下水的影响并尽量设置在耐水浸性地层上;(3)钻进过程中泥浆补浆方法有待进一步优化,可考虑带卷扬机的软管直接送至孔底或通过钻杆灌浆。
其中,MSE表示原图和载密图像每个像素的均方差。PSNR越高,说明本文算法对于载体码流的伤害越少,图像显示越清晰,当其值大于30 dB,图像显示效果较好,人眼难以分辨出和原始图像的区别。
另外一个就是隐藏容量EC。EC越高,说明能够嵌入更多的秘密信息,本文的嵌入效率越高。
4 试验结果分析
本文采用6幅标准测试图[24]和6幅遥感图像,图像 Lena,Peppers,Elaine,Boat,Baboon,F16, Aerial,Square,Harbour和Mountains大小为512×512,图像Airport大小为1024×1024,图像Moon大小为256×256。将图像压缩成4倍灰度JPEG2000文件,随机均匀产生二进制数,伪随机数种子为10,每个子图像块大小为127×127。试验平台为Matlab R2013a,操作系统为64位Windows7,CPU为i5-5200U,主频2.2 GHz,内存8 GB。
对于Lena的4倍JPEG2000压缩文件,文件长度为64946字节,数据头部分长度196字节,数据体部分为64 748字节,剩下2字节为结束符FFD9。将这64 748字节的数据转换成10进制的图像,图像大小为254×254字节,剩余232字节不作改变。将图像分块为127×127的大小,这样就会产生4个图像块,对这些图像块进行统计,按照本文算法进行映射嵌入。Lena的嵌入效果如图7所示,7(a)表示原始4倍JPEG2000图像,7(b)表示4倍载密图像,7(c)表示恢复后的图像。其余嵌入效果如图8~18所示。
图7 Lena隐藏效果Fig.7 Lena in concealment
图8 Peppers隐藏效果Fig.8 Peppers in concealment
图9 Elaine隐藏效果Fig.9 Elaine in concealment
图10 Boat隐藏效果Fig.10 Boat in concealment
图11 Baboon隐藏效果Fig.11 Baboon in concealment
图12 F16隐藏效果Fig.12 F16 in concealment
图13 Aerial隐藏效果Fig.13 Aerial in concealment
图14 Airport隐藏效果Fig.14 Airport in concealment
图15 Moon隐藏效果Fig.15 Moon in concealment
图16 Square隐藏效果Fig.16 Square in concealment
图17 Harbour隐藏效果Fig.17 Harbour in concealment
图18 Mountains隐藏效果Fig.18 Mountains in concealment
前6幅为标准测试图,常规图像的图像质量较好,算法的泛化性能较强,每幅图像的子块大小为127×127。后6幅为遥感图像,Aerial,Square,Harbour和Mountains的子块大小为127×127,Moon图像较小,为63×63,Airport图像较大,为255×255。遥感图像细节复杂,压缩显示大于30 dB图像质量就很好,载密图像可以正常显示,恢复图像的PSNR有进一步的提升。
表1 隐藏前后图像PSNR
隐藏容量如表2所示,可以看到与文献[12]比较,本文的隐藏容量有了一定提升。文献[12]是对码流进行再次无损压缩以获取隐藏空间,而本文是统计码流在灰度值上的使用次数来建立映射,利用映射来嵌入秘密信息。两个方法都是利用了数据的相关性。单纯地从数据角度来看,数据之间的相关性不大,即使再次压缩,余留出的比特数也不会很多。算术编码的索引与JPEG编码用到的Huffman编码类似,都存在一部分没有码字没有使用,而一部分使用次数很多的情况。反映在256个灰度值上就会有几个灰度出现次数为0,而有灰度使用次数最多。文献[12]是利用出现的不均匀来压缩,而本文是建立映射关系,使没有出现的灰度代替出现次数最多的灰度来表征不同的秘密信息。这样映射更加利用了数据的相关性,隐藏容量更大,效率更高。
为了进一步提高映射后的容量,本文图像分块和多级映射来代替单级映射。图像分块和未分块的效果如表3所示。当整幅图像作为载体时,信息量较大,算术编码使用的索引数较多,灰度值涵盖的范围较大,当然出现频数最高的灰度值的出现次数比未分块前多。但是出现次数为0的个数比较小,同时个别条件下没有出现为0的灰度值,这时算法失效,隐藏容量EC为0。为了提高算法的鲁棒性并进一步提升容量,本文采用图像分块,这样保证了每个图像块都有灰度值没有出现,并利用多级映射,当没出现的灰度值个数K-1>1时,建立⎣log2K」映射关系,来代表多比特数据。
表2 隐藏容量EC对比
表3 单级映射与多级映射EC对比
最后计算本文算法的仿真时间,如表4所示,本文的嵌入、提取和恢复时间控制在1 s内,这样就具有实时性,可以快速隐藏秘密信息。
表4 仿真时间
5 结束语
本文提出了码流映射的无损隐藏算法,得到以下结论:
压缩后的码流分布不均匀,数据之间存在相关性,本文将整个码流转换成图像,使用次数最多的和没有使用的灰度值建立映射,来联合代表不同的二进制秘密信息。
当图像较大或者图像本身内容比较复杂时,会出现所有灰度值都出现的情况,这样隐藏容量为0,算法失效。为了提升容量和鲁棒性,本文将码流分块并建立多级映射来实现多比特信息嵌入。
与文献[12]比较,本文在6幅标准测试图像隐藏容量平均提升366 bit,在6幅遥感图像平均提升887 bit,并且载密图像和恢复图像均可以正常显示,PSNR值大于30 dB,满足实际要求。
本文算法在遥感图像上效果良好,并具有很好的泛化能力,可以应用于各类图像,算法简单,运算复杂度低,平均耗时在1 s左右,可以实时处理图像,适用于航天器的信息搭载。
目前只是处于算法提出和仿真验证阶段,需要结合硬件实现来进一步验证算法的准确性和可靠性。