基于MATLAB的图像信息隐藏算法研究与实现

2019-01-19 02:04陈小娥
关键词:变暗余弦分块

陈小娥

(福建船政交通职业学院 信息工程系,福建 福州 350007)

0 引言

在互联网、物联网、泛在网等网络技术的共同发展下,如何安全地传输图像信息,如何保证图像信息传输的可靠性、图像信息来源的不可抵赖性,以及如何保护数字图像版权信息等都是非常棘手的问题.对信息进行隐藏是保证隐秘数据安全的重要手段,信息隐藏技术在信息安全保障、隐蔽通信、版权保护等方面具有重要的应用价值.图像信息隐藏作为图像安全研究的重要内容,正逐渐受到国内外学者的广泛关注.

图像信息隐藏指的是通过某些算法,结合一定的数据加密技术,将一个待隐藏的信息嵌入到原始载体图像中,嵌入隐藏信息后的载体图像与原始载体图像相比,不能被人的感知系统察觉出有明显的差别,以实现隐藏信息的目的.通过隐藏信息,可以跟踪侵权行为或者证明版权的归属.嵌入的信息一般要求既不影响原载体的使用和价值,同时也不易被修改或清除.

图像信息隐藏技术主要分为空间域与变换域两大类.空间域算法比较经典的有最低有效位方法、文档结构微调方法等;变换域算法比较常见的有离散余弦变换、小波变换等.如文献[1]提出了基于块匹配和多层校验格编码的大嵌入率图像隐藏算法,可同时提高载密图像和提取图像的视觉质量;文献[2]首先对由原始图像进行Contourlet变换得到的低频子带进行分块,然后对子块进行QR分解,最后采用QIM方法进行信息的嵌入,该文献所提出的算法能有效抵抗各种常见的攻击;文献[3]通过结合中国剩余定理和PCA方法提出的信息嵌入算法,则具有很好的不可感知性.

本文主要以现有图像信息隐藏算法为基础,借助MATLAB开发平台,提出了一种图像信息隐藏算法,实现待隐藏信息的嵌入和提取、对嵌入隐藏信息后的图像进行多种常见攻击及其效果显示、对攻击后的图像进行再检测或者再提取隐藏信息等功能.

1 算法相关

1.1 算法实现的编程环境

本文采用的编程环境为MATLAB R2018a.MATLAB由美国MathWorks公司发布,它主要面对科学计算、可视化以及交互式程序设计的高科技计算环境.可进行矩阵运算、绘制函数和数据、分析数据、创建用户界面、实现算法、连接其他编程语言的程序等,被广泛应用于数据分析、无线通信、深度学习、计算视觉、量化金融和风险管理、机器人、控制系统、信号处理等方面.

1.2 cat映射

为了更好地隐藏信息,一般可通过对待隐藏信息进行差错控制编码、置乱、伪随机化等进行预处理.其中置乱就有多种方法,每种方法又可以采用不同的置乱模板算法设置不同的参数,这里的置乱模板算法和参数也可作为待隐藏信息加密和解密的密钥.本文采用俄国数学家弗拉基米尔·阿诺德提出的cat映射,将图像中各像素点的位置进行置换,达到加密的目的.cat映射变换的示意图如图1所示,其基本原理是先作X轴方向的错切变换,再作Y轴方向的错切变换,最后通过模运算作切割回填操作.cat映射是一种在有限区域内进行反复折叠、拉伸变换的混沌映射方法.

1.3 Zigzag扫描

在图像编码的算法中,经常需要将一个给定的方阵进行Z字形扫描(Zigzag Scan).对于给定的一个n×n的矩阵,Z字形扫描的过程如图2(a)所示,即从左上角第一个像素开始以Z字形进行编排.图2(b)为本文采用的Zigzag扫描得到的矩阵.

图1 cat映射变换示意图

(a)扫描过程 (b)得到的矩阵

图2 Zigzag扫描示意图

2 信息隐藏算法设计

2.1 算法框架

一般的信息隐藏算法基本包含两大部分,即隐藏信息的嵌入和隐藏信息的提取.本文实现的信息隐藏算法的主要框架如图3所示.隐藏信息的嵌入过程如下:首先,将待隐藏信息进行加密,使其成为表面上无规律的、不可知觉的信息;然后,通过一定的信息嵌入算法将加密后的信息嵌入到原载体图像中,形成包含隐藏信息的图像.隐藏信息的提取过程如下:结合原载体图像和包含隐藏信息的图像,通过信息提取算法,先提取出直接隐蔽信息,该信息可能是杂乱无章的;接着根据之前加密过程使用的密钥,再将提取的隐蔽信息经过信息解码算法,恢复成最终所需要的明文信息.

2.2 隐藏信息的加密

为了使嵌入的隐藏信息具有更好的不可见

图3 图像信息隐藏算法框架

性,同时也为了实现隐藏的信息即使被攻击者窃取也不易被破解的目的,通常可以在嵌入载体图像前对隐藏信息进行一定程度的加密,如将隐藏信息转变成具有不可预测的随机性信号.本文采用的是cat映射,对于大小为N×N的图像,映射方程为:

其中,(xn+1,yn+1)是变换后图像的像素点,(xn,yn)是原图像的像素点.

2.3 隐藏信息的嵌入

隐藏信息的嵌入算法主要采用离散余弦变换域方法.对于一幅M×M的图像,它的离散余弦变换公式是:

其中,x,y=0,1,…,M-1;

图像经过离散余弦变换后,输出的频率系数矩阵最左上角的直流系数的幅度最大.对于二维图像的离散余弦变换,如果将变换后得到的矩阵按照“之”字形(Zig-Zag)排序成一维序列,则序列前面部分主要是低频系数,序列后面部分主要是高频系数.

隐藏信息嵌入的具体步骤如下:

(1)加密待隐藏信息.将待隐藏信息经过cat映射变换进行加密,将其转换成较无规律可循的信息.

(2)图像空间的转换.将原载体图像由RGB颜色空间转换为YUV颜色空间,并选择U通道作为待隐藏信息的嵌入层.

(3)为限制离散余弦变换对全局的影响,采用基于图像分块的离散余弦变换[5].即,首先将原载体图像U通道进行分块处理,每分块分别进行离散余弦变换;接着再将第一步加密得到的信息分散嵌入到各分块的离散余弦变换系数中.调整系数的公式如下:

上式中的s1和s2是两个随机序列.s(i)为加密后的信息构成的序列值,实验中将其转换成二值图像,所以只有0和1两个值.当s(i)=1时取s1作为随机序列;当s(i)=0时取s2作为随机序列.将s1和s2进行传递,作为之后提取隐藏信息的密钥.

(4)将加密信息加入到载体图像的各分块系数中,各分块再进行离散余弦逆变换,逆变换公式为:

其中,x,y,c(u),c(v)的取值同上.

(5)合并图像各分块,将图像由YUV颜色空间转换回RGB颜色空间,从而完成信息的隐藏.

2.4 隐藏信息的提取

隐藏信息的提取可看成是隐藏信息嵌入的逆变换.将加入隐藏信息的图像同样进行分块处理,对每分块进行离散余弦变换,通过对比提取序列与S1的相关系数、提取序列与S2的相关系数,即可提取直接隐蔽信息.

2.5 隐藏信息的解密

由上一步提取的直接隐蔽信息,经过cat映射逆变换即可获取最终隐藏信息.采用的cat映射逆变换方程如下:

具体参数含义同2.2.

如果加入隐藏信息的图像受到某种攻击,可以将获取的隐藏信息与原待隐藏信息进行对比,计算其归一化相关系数或者峰值信噪比,以进一步评价算法或者提取信息的质量.

3 算法实现

3.1 主要界面

在算法实现过程中,将隐藏信息的加密过程所采用cat映射的迭代次数设置为10,载体图像大小为512 pixel×512 pixel,待隐藏信息的图像大小为64 pixel×64 pixel.图4为用MATLAB编程实现的图像信息隐藏算法主要界面.该算法实现了待隐藏信息和原载体图像的选择,加隐藏信息后的图像的生成,不受任何攻击的加隐藏信息图像的信息提取,加隐藏信息图像遭受各种攻击后效果图的显示以及受攻击后隐藏信息的提取等功能.其中,图4侧重显示了加隐藏信息的图像在遭受高斯噪声攻击后的效果图以及从该图像提取的隐藏信息效果图.

图4 图像信息隐藏算法实现示意图

3.2 部分关键代码

在隐藏信息嵌入过程中,采用MATLAB所提供的一个专门的块处理函数(blkproc函数) 对原载体图像U通道进行分块处理.该块处理函数简化了很多复杂运算,可以自动实现图像块处理的整个过程.以下是隐藏信息嵌入过程中的部分关键代码及相关注释说明.

%将载体图像的U通道分成8*8个块(需要时填充零),对每个块调用函数′dct2′,并重新将结果组合到输出图像original

original=blkproc(U,[8 8],′dct2′);

result=original;

开始嵌入隐藏信息

for i=1:markrow

for j=1:markcolumn

if binimage(i,j)==1

sequence=sequence1;

else

sequence=sequence2;

end;

for k=1:8

result((i-1)*8+k,j*8-k+1)=original((i-1)*8+k,j*8-k+1)+weight*sequence(k);

end

end;

end;

%嵌入完成后,对result分成8*8分块,对每个块通过调用函数′idct2′进行DCT逆变换,然后再重新组合结果给result.

result=blkproc(result,[8 8],′idct2′);

4 算法分析

4.1 信息隐藏质量评价标准

为评价提取出来的隐藏信息的质量,采用以下两个指标进行衡量.

(2)峰值信噪比(Peak signal-to-noise ratio,PSNR)可以用于表示图像的失真度.PSNR的值越大,说明两幅图像越相近,即嵌入的隐藏信息的不可见性越好.其定义为:

其中,p,q表示图像的大小为p×q,A取255,f(x,y)表示原始载体图像在位置(x,y)的值,ρ(x,y)表示加隐藏信息的图像在位置(x,y)的值.

4.2 性能分析

通过PSNR的值可以评价算法对信息的隐藏效果.如图5所示,图5(a)为原载体图像,图5(b)为待隐藏的信息,即带有“信息工程”4个字的图像;图5(c)为图5(b)经过cat映射加密后的信息;图5(d)为经过本文算法加入隐藏信息后的图像.计算图5原载体图像和加隐藏信息后的图像的峰值信噪比为45.3988 dB,说明本文的算法能较好地保证隐藏信息的不可见性.

分别对本文算法生成的添加隐藏信息的图像进行剪切、添加噪声以及图像的增亮、变暗等常见攻击试验.图6(a)~图6(c)分别为对添加隐藏信息的图像进行中间、上方、下方1/16的剪切攻击,为更好地观察效果,给这3幅图增加了边框;图6(d)~图6(f)为与其对应的提取信息效果图.图7(a)~图7(c)分别为对添加隐藏信息的图像进行均值为0、方差为0.001和0.002的高斯噪声攻击,以及方差为0.005的椒盐噪声攻击;图7(d)~图7(f)为与其对应的提取信息效果图.图8(a)为图像增亮攻击,图像增亮采用取原图像灰度值的2倍值方式;图8(b)为图像变暗攻击,图像变暗采用取原图像灰度值的1/2值方式;图8(c)为增亮后提取的信息;图8(d)为变暗后提取的信息.

(a)原载体图像 (b)待隐藏的信息

(c)cat映射加密后的信息 (d)加入隐藏信息后的图像

(a)中间剪切 (b)上方剪切 (c)下方剪切

(d)提取的信息 (e)提取的信息 (f)提取的信息

图6剪切攻击及其提取的隐藏信息

(a)高斯0.001 (b)高斯0.002 (c)椒盐0.005

(d)提取的信息 (e)提取的信息 (f)提取的信息

(a)图像变亮攻击 (b)图像变暗攻击

(c)提取的信息 (d)提取的信息

经过各种攻击后,待隐藏信息与提取出的隐藏信息的NC值,以及原载体图像和加隐藏信息后的图像的PSNR值如表1所示.由表1数据可见,本文算法对常见的多种攻击能保持较强的鲁棒性.

表1 各种攻击性能测试

攻击类型参数NCPSNR/dB中间剪切1/160.905 845.816 1上方剪切1/160.955 145.402 4下方剪切1/160.961 746.561 2高斯噪声0,0.0010.953 038.811 6高斯噪声0,0.0020.812 135.432 2椒盐噪声0.0050.892 238.807 2图像变亮20.751 330.838 9图像变暗1/20.962 024.848 3

5 结语

本文提出并实现了一种基于MATLAB的图像信息隐藏算法,即:先利用cat映射将待隐藏的信息进行一定程度的加密;接着对原载体图像分块进行离散余弦变换;最后在变换后的系数中按照一定规律嵌入加密的待隐藏的信息,完成信息的隐藏.攻击试验表明,该算法具有较强的鲁棒性,能有效地应对常见的攻击;但是对于图像增亮与变暗的攻击,该算法处理效果还不是很理想,可进一步通过改进算法来提高其抗攻击的能力.

猜你喜欢
变暗余弦分块
孤独者
分块矩阵在线性代数中的应用
两个含余弦函数的三角母不等式及其推论
爱这个字
实施正、余弦函数代换破解一类代数问题
反三角分块矩阵Drazin逆新的表示
分数阶余弦变换的卷积定理
基于自适应中值滤波的分块压缩感知人脸识别
图像压缩感知在分数阶Fourier域、分数阶余弦域的性能比较
基于多分辨率半边的分块LOD模型无缝表达