信息隐藏——数字水印

数字水印

【实验目的】:

实现W-SVD、DCT域混沌细胞自动机水印,实现细胞自动机水印的检测。
使用stirmark攻击嵌入细胞自动机水印的图片,对攻击后的图片进行水印的检测。
了解Stirmark攻击工具。
进行Stirmark攻击实验。

【实验内容】:

■实现W-SVD、DCT域混沌细胞自动机水印,实现细胞自动机水印的检测。
■使用stirmark攻击嵌入细胞自动机水印的图片,对攻击后的图片进行水印的检测。
■了解Stirmark攻击工具。
■进行Stirmark攻击实验。

■实现W-SVD、DCT域混沌细胞自动机水印,实现细胞自动机水印的检测。

1.W-SVD:
数学原理:对任意矩阵CA,都可以做奇异值(单值)分解CA=UsigmaV’。
其中U、V是正交矩阵(UU’=VV’=I,I是单位阵), sigma是对角矩阵(除主对角线外为0)。
水印模板生成策略:
1.对图像做小波分解得到低频系数CA。
2.对CA做单值分解 CA=UsigmaV’
3.用伪随机序列生成正交矩阵U、V ,对角矩阵sigma。
4.用随机矩阵U、V的后d列替换U、V的后d列,得到新的U、V。水印模板waterCA=U sigmaV’

水印生成之后,根据输入的水印强度,将生成的水印与原图融合,形成带水印的图片。
水印的检测:
由于数字水印一般是一种具有特定性质但不具备可读性的随机信号,所以不能采取“提取”的方式加以识别。我们采用检测的手段。
利用原始图像生成一个理论上存在的水印模板(原始水印),从待检测图像中提取可能存在的水印模板(待测水印),计算两者的相关性。
当两者高度相关时,待测图像含有水印;反之检测不出水印。
2.混沌细胞自动机数字水印
细胞自动机水印模板属于与原始图像相对独立的水印模板。
水印生成:
利用伪随机序列得到与原始图像相同大小的随机数模板。
将随机数模板转化为二值矩阵
将二值矩阵带入的细胞自动机,得到“凝聚模式”的水印模板
采用中值滤波方法,将水印凝聚模式转化为平滑模式
水印嵌入:
一般来说,混沌细胞自动机水印可以往DCT系数或小波低频系数中嵌入。
E(image)=IDCT(DCT(image)+alphawatermark)
E(image)=IDWT(DWT(image)+alpha
watermark)
其中参数alpha对水印强度进行控制。
水印检测:
d=|<W,W’>|/(||W||*||W’||)
d为相关系数,用来判断其相关性,进而判断图片中是否存在水印。

■使用stirmark攻击嵌入细胞自动机水印的图片,对攻击后的图片进行水印的检测。
■了解Stirmark攻击工具。
Stirmark是一个检测水印算法鲁棒性的攻击工具。做法是:给定嵌入水印的图像,Stirmark生成一定数量的修改图像,这些被修改的图像被用来验证水印是否能被检测出。

攻击手段包括线性滤波、非线性滤波、剪切/拼接攻击、同步性破坏攻击等。

■进行Stirmark攻击实验。

【实验分析】:

■实现W-SVD、DCT域混沌细胞自动机水印,实现细胞自动机水印的检测。

W-SVD水印嵌入:
在这里插入图片描述
水印强度为2,d/n的值为0.1,随机数种子选择10,嵌入水印,生成图片为108_test.png
在这里插入图片描述
结果如上。
W-SVD水印检测:
在这里插入图片描述
输入如上所示,调用plotcorr_coef.m,
在这里插入图片描述
结果如上所示,可以发现相关率较高,判断是存在水印的图片。

混沌自动机与水印生成:
输入如下:
在这里插入图片描述
在这里插入图片描述
我们使用cellauto.m文件生成水印,上图所示的是从生成随机模板,到进行细胞自动机处理,再到平滑处理最终生成水印的结果。

DCT域嵌入水印的函数:
输入如下,第三个参数是输入的文件扩展名,在这里我们当然是选择的.jpg
在这里插入图片描述
结果如下,可以发现,R层图片的左上角有很明显的痕迹。
在这里插入图片描述
检测水印:
在这里插入图片描述
在这里插入图片描述
输入如上所示,和上一个检测实验的原理和计算原理类似,在此不赘述。

■使用stirmark攻击嵌入细胞自动机水印的图片,对攻击后的图片进行水印的检测。

在这里插入图片描述
运行中…
让我们来看看我遇到了哪些bug,或者是运气好的时候获得的结果吧:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当然不只有这么多,在这里我每一种类型列举了一个结果。AFFINE的结果居然都不能跑了,可见他对图片DCT域变换后的矩阵size都进行了改变。可以发现,除了PSNR的极个别例子,相关性都有不小的差异。至于不同攻击的量化攻击效果,我们在后面的实验将继续完善。

■了解Stirmark攻击工具。
■进行Stirmark攻击实验。

我们使用Stirmark工具对DCT系数隐写的结果进行攻击,下图是我们进行隐写的程序。
在这里插入图片描述

提取结果与写入的字符串比较:

共304个字符;

为了计算错误率,我们写了一个脚本
在这里插入图片描述
我们来看一下结果

108_hide_SS_1 108_hide_SS_2 108_hide_SS_3
bit错误率 0.0888 0 0.0822
JPEG_15 JPEG_20 JPEG_25 JPEG_30 JPEG_35 JPEG_40 JPEG_50 JPEG_60 JPEG_70 JPEG_80 JPEG_90 JPEG_100
Bit错误率 0.0526 0.0395 0.0296 0.0526 0.0691 0.0428 0.0428 0.0329 0.0395 0.0329 0.0329 0.0263

由此可见,从位来看,错误率并没有特别高,可惜我输入的是汉字,所以结果一般都是这样的。。。
在这里插入图片描述

【实验代码】

information_hidding

猜你喜欢

转载自blog.csdn.net/HizT_1999/article/details/106951408