频域图像水印
频域图像水印
【实验目的】
了解频域水印的特点,掌握基于DCT系数关系的图像水印算法原理,设计并实现一种基于DCT域的图像水印算法。
【实验环境】
natlab/python stirmark工具
【实验原理】
在信号的频域(变换域)中隐藏信息要比在时域中嵌入信息具有更好的鲁棒性。一副图像经过时域到频域的变换后,可将待隐藏信息藏入图像的显著区域,这种方法比LSB以及其他一些时域水印算法更具抗攻击能力,而且还保持了对人类感官的不可察觉性。常用的变换域方法有离散余弦变换(DCT)、离散小波变换(DWT)和离散傅里叶变换(DFT)等。
本章介绍一种提取秘密信息的时候不需要原始图像的盲水印算法,算法的思想是利用载体中两个特定DCT系数的相对大小来表示隐藏的信息。载体图像分为8×8分块,进行二维DCT变换,分别选择其中的两个位置,比如用(u1,v1)和(u2,v2)代表所选定的两个系数的坐标。如果Bi(u1,v1)<Bi(u2,v2),代表隐藏1;如果相反,则交换两系数。如果Bi(u1,v1)>Bi(u2,v2),代表隐藏0;如果相反,则交换两系数。提取的时候接收者对包含水印的图像文件进行二维DCT变换,比较每一块中约定位置的DCT系数值根据其相对大小得到隐藏信息的比特串,从而恢复出秘密信息。但是在使用上述算法的过程中,如果有一对系数大小相差非常少,往往难以保证携带图像在保存和传输的过程中以及提取秘密信息的过程中不发生变化。因此在实际的设计过程中,一般都是引入一个Alpha变量对系数的差值进行控制,将两个系数的差值放大,可以保证提取秘密信息的正确性。
Dct嵌入水印代码(hiding.m)和提取水印代码(extract.m)已提供,hidden.txt里是嵌入水印的信息,提取到111.txt文件中
要求:
1、 计算原图与水印图片之间的PSNR。
2、 仿照dct变化的代码,实现离散小波变换(DWT)和离散傅里叶变换(DFT)嵌入水印的代码,并计算PSNR,嵌入信息为学号姓名。
hiding.m
1 |
|
extract.m
1 |
|
本文章仅完成了DWT隐写算法
【实验步骤】
1、使用matlab计算原图与嵌入水印图像的峰值信噪比PSNR,得到结果为66.5859。
2、查找资料编写DWT代码,成功隐写并提取信息,计算PSNR为 68.5620
3、查找资料编写DFT代码,发现当修改DFT频域值后,图像频域由于共轭复数产生不对称,逆变换后仍为复数,无法逆变换为实际图像。
【实验代码】
myDWT.m
1 |
|
myDWTdecode.m
1 |
|