【图像隐藏】基于DCT算法实现数字水印嵌入提取附matlab代码

1 简介

 随着计算机网络的迅猛发展,信息安全越来越受关注.信息隐藏技术是一种重要的信息安全技术,而数字图像水印算法又是信息隐藏技术研究的一个热点.水印加密和水印嵌入是水印算法的关键问题.本文提出一种新的混沌置乱水印加密算法:首先使用Arnold映射对水印置乱,然后和Logistic生成的混沌序列进行异或运算,即克服了Arnold的周期性带来的不安全性,又达到了抗剪切目的.在水印加密的基础上,本文又提出一种基于DCT的水印嵌入算法,该算法以二值图像为水印,水印嵌入前对水印进行信息扩大映射,增加了嵌入的灵活性,提高了提取准确性;嵌入中对宿主图像进行8×8分块,并结合人类视觉系统(HVS),根据各块的复杂度自适应嵌入,使水印的不可见性和稳健性达到很好平衡;嵌入时采取多重嵌入更增强了抵抗攻击能力.本文算法已得到编程实现.实验证明该算法在无攻击时提取水印的归一化相关系数(NC)为1,宿主图像在剪切1/2,JPEG压缩50%时提取水印仍可辨认,NC分别为0.77,0.73.

在图像隐写分析中,这几个特征是比较经典的 图像隐写分析中DCT特征与Markov特征展现出了极大a的潜力,小波变换的奇异值分解(Wavelet Singular Value Decomposition , WSVD)特征也有奇效,本文实现前人论文的特征提取编程代码。 先说说理论知识 1 扩展DCT统计特征提取 大多数的隐密算法都是对JPEG图像的DCT系数进行操作,以此来嵌入秘密信息。DCT系数统计特征,旨在捕捉DCT系数的统计量的特征,以此来区分载体图像和隐密图像。 DCT系数统计算法由Fridrich【1】提出,其中包含了DCT系数直方图,共生矩阵,空域块间相关性等部分。首先用DCT系数替换相同位置的原始图像像素,使用dij(k) 来表示DCT系数矩阵,其中i,j=1, … ,8,k=1, … ,nB。而dij(k)则代表的是在第k个8×8 DCT块中处于(i,j)位置的DCT系数,而DCT块一共有nB 块。为了减少计算量和特征维度,在计算特征之前需要进行预处理,将所有DCT系数值范围限定在[-5,5]之间,大于和小于该范围内的值全部变换为-5到+5之间。

其中,Ir和Ic表示图像DCT系数块的两种排列方式,分别是行扫描顺序和列扫描顺序。 接下来的两个特征Bα是从解压的JPEG图像中计算,也是一种块间相关性的特征: 在DCT系数统计的隐密分析中,Fridrich首次提出了用于隐密分析的“校准”概念和计算原理:特征计算函数F,训练或测试图像J1,将图像J1解压到空域并沿各个方向裁剪四个像素,然后使用同J1相同的量化表压缩得到的图像J2。f表示最终获取的特征,而最后的特征由f=F(J1)-F(J2)计算得到。

采用如此计算方式的原理如下:裁剪之后的图像和原始图像内容上大体上完全一致,虽然裁剪之后的图像失去了原来的DCT分块,但是其统计特征应与原来相差不多。而这个过程会对嵌入的信息十分敏感,使裁剪前后的特征差别较大。经过实验证明,如此提取特征的方法非常有效果。

总结来说,DCT系数统计特征对DCT系数全局和局部进行了统计分析,并且捕获DCT系数的块间相关性和空域像素的相关性等特征。对于JPEG图像来说,所有隐密算法都是针对DCT系数进行修改,该算法确实是有一定的效果。实验中,该特征集展现了不错的分析效果,在0.2的嵌入率情况下可以达到平均95%的准确率,但是对MB算法的效果一般,尤其是MB2。

原始DCT统计特征已经有一定的检测效果,本文先对其进行扩展,加强特征的检测效果。对于全局直方图函数H,可以得到范围在[-5,+ 5]中的元素个数的差异,包括全局直方图和局部直方图,局部直方图选择的位置为{(1, 2),(2, 1),(3, 1),(2, 2),(1, 3)}。因此,直方图特征是:

如此的DCT扩展特征共有193维,其特征组成见下表。

​2 部分代码

%文件名:PSNR.m%函数功能:本函数将完成对输入图像的峰值信噪比计算%输入格式举例:psnr=PSNR('lena.jpg','mark.jpg');%参数说明:%original为原始图像%test为加有水印的图像%psnrvalue为两者峰值信噪比%实际上也计算了MSE,SNR值function psnrvalue=PSNR(lena,withmark);%计算原始图像的信号功率A=imread('lena.bmp');%A=rgb2gray(A);A=double(A);B=imread('withmark.bmp');%B=rgb2gray(B);B=double(B);%计算MSE%判断输入图像是否有效[m,n]=size(A);[m2,n2]=size(B);if m2~=m||n2~=n    error('图像选择错误');end%计算MSEmsevalue=0;for i=1:m    for j=1:n        msevalue=msevalue+(A(i,j)-B(i,j))^2;    endendmsevalue=msevalue/(m*n);if msevalue==0    error('图像选择错误');end%计算信噪比,峰值信噪比signal=0;for i=1:m    for j=1:n        signal=signal+A(i,j)^2;    endendsignal=signal/(m*n);snrvalue=signal/msevalue;snrvalue=10*log10(snrvalue);psnrvalue=255^2/msevalue;psnrvalue=10*log10(psnrvalue);

3 仿真结果

4 参考文献

[1]吴和静, 闵昆龙, 刘芳,等. 基于DCT域的图像数字水印算法及matlab实现[J]. 中国科技信息, 2014(9):2.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值