信息隐藏与数字水印实验1——《信号处理基础》

一、实验目的

(1) 掌握基于 python 的数字音频及图片常用操作方法;
(2) 了解音频和图像变换系数特点,掌握离散余弦和时空域基本操作;
(3) 了解 LSB 隐写技术原理,掌握 LSB 隐写及提取基本操作

二、实验环境

(1) Windows 11操作系统;

(2) Python3.7;

(3) 图像文件;

(4) 音频文件。

三、实验步骤和结果

1.选取文件夹中的图片“test.bmp”,将其转为灰度图。

“test.bmp”如下所示:

        将其转化为灰度图的具体操作如下:

(1)使用函数imread读取图片,并设置参数cv2.IMREAD_GRAYSCALE将原始彩色图像像素转换灰度图像像素;

(2)使用函数resize通过插值的方式改变图片尺寸,将期望的输出图像大小尺寸dsize设置为512*512;

(3)使用函数imwrite将转换后的灰度图保存为BMP文件,并命名为flag.bmp;

(4)使用函数imshow对比展示原始彩图图像与转换后的灰度图像。

        运行代码后的结果如下(其中第一行第一列输出彩色图,标注的名称为“彩色图像”,第一行第二列为灰度图像,标注的名称为“灰度图像”。同时这个输出的名称为“2020211950+刘綦勋+彩色图和灰度图对比”):

2. 在灰度图中使用 LSB 隐写技术隐藏秘密信息“BUPT”。

(1)选取秘密信息“BUPT”,其ASCII码为:

(2)使用generate(msg)函数转为二进制转化结果如下,为32bit的秘密信息:

3.对比隐写前后的图像,在屏幕中一行两列输出。

        如下所示,第一行第一列输出原始灰度图,标注的名称为“载体图像”,第一行第二列为嵌入秘密信息后的图像,标注的名称为“携密图像”。同时这个输出的名称为本人的学号+姓名+载体图和携密图对比(2020211950+刘綦勋+载体图和携密图对比):

         对比两张图片,通过肉眼观察发现并没有明显的区别。

4. 提取隐藏的LSB隐写信息,对比原信息,判断是否提取成功。

(1)将含有隐写信息的图片encode.bmp读入程序中,然后提取其最低位的信息,并还原为二进制信息,结果如下:

        可以看到,上图的32bit的秘密信息和之前加密得到的是一致的。

(2)转成文本,可以看到提取的文本信息是BUPT:

4. 提取隐藏的LSB隐写信息,对比原信息,判断是否提取成功。

(1)将含有隐写信息的图片encode.bmp读入程序中,然后提取其最低位的信息,并还原为二进制信息,结果如下:

        可以看到,上图的32bit的秘密信息和之前加密得到的是一致的。

(2)转成文本,可以看到提取的文本信息是BUPT:

5. 计算携密图像的峰值信噪比。

        峰值信噪比取小数点后四位,读取原始图像flag.bmp和隐写后的图像encode.bmp,然后可以根据公式计算其峰值信噪比。

        由于实验原始代码在嵌入的过程中是将像素值-1(例如150减去1,变成149),而嵌入本来是可以-1也可以+1的,因此接下来展示-1+1两种情况得到的峰值信噪比(还需要注意,嵌入时是既可以按行操作也可以按列操作,因此总共有4种情况,对应有4个不同的峰值信噪比的值,下面展示的是像素值+1-1并按列操作的两种情况)

1)像素值-1并按列操作

        如下图所示,计算可以得到原始图片和隐写后的图片的峰值信噪比是86.5184

2)像素值+1并按列操作

        如下图所示,计算可以得到原始图片和隐写后的图片的峰值信噪比是89.7635

四、实验遇到的问题及解决方法

1.在运行相应的脚本时,pycharm报错,原因是没有安装相应的包。使用“pip install 包”这个命令,解决了问题。

2.在将打印的图像的标注设置为中文时,会无法正常显示:

        解决方法是,在代码中添加如下语句:

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

        重新运行代码,便能够正常显示中文了:

3.原给的encode.py代码是处理彩色图像的,不能直接拿来处理灰度图像。解决方法:将源代码的主干部分修改为如下即可:

4..默认输出的峰值信噪比的小数位数不为4,要解决这个问题,只需导入decimal模块,并在代码最后输入相应语句即可。

五、实验心得体会和思考

        通过本次信号处理基础实验,我更加深入地了解了信息隐藏和数字水印的基础技术,较好地掌握了LSB隐写及提取的基本操作,在理论基础和动手实践方面都得到了很大的提升,这些都是仅在课堂学习中获取不到的宝贵经验,正所谓“实践方能出新知”。

        同时,我对python这门语言以及相应的开发工具(pycharm)的使用有了更进一步的熟练掌握,也真真切切地感受到了编程语言应用于实际场景的快捷和便利。

​​​​​​

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基础水印算法是在数字媒体(如图片、音频、视频等)中嵌入特定的标识信息,以实现版权保护和信息追溯等目的。信息隐藏技术是水印算法的一种重要应用,它可以将信息隐藏在数字媒体中而不影响其原始内容。 常见的基础水印算法有LSB(最低有效位)、DCT(离散余弦变换)和DWT(离散小波变换)等。其中,LSB算法是最简单的一种,它在像素的最低位中嵌入水印信息,不易被察觉,但是容易受到攻击。DCT和DWT算法则是一种更高级的水印算法,它们可以在频域中嵌入水印信息,使得水印更加鲁棒。 攻击水印算法的主要手段有两种:攻击水印的鲁棒性和攻击水印的安全性。攻击水印的鲁棒性是指攻击者通过对数字媒体进行修改或处理,使得水印信息被破坏或无法检测。攻击水印的安全性则是指攻击者通过分析数字媒体和水印算法,破解水印信息的加密和解密过程。 常见的攻击水印算法有:去水印攻击、冲突攻击、伪造攻击和隐写分析攻击等。去水印攻击是指攻击者通过修改数字媒体的内容,使得嵌入的水印信息被破坏或无法检测。冲突攻击则是指攻击者通过在数字媒体中嵌入多个水印信息,使得水印信息冲突,难以分辨真伪。伪造攻击是指攻击者通过仿造数字媒体和原始水印信息,生成和嵌入新的水印信息。隐写分析攻击则是指攻击者通过分析数字媒体的统计特征和嵌入水印信息的算法,破解水印信息的加密和解密过程。 检测水印算法的主要手段有两种:基于统计分析的检测和基于机器学习的检测。基于统计分析的检测是指通过对数字媒体进行统计分析,检测其中是否嵌入了水印信息。基于机器学习的检测则是指通过训练机器学习模型,对数字媒体进行分类,判断其中是否嵌入了水印信息。这种方法通常可以提高检测水印的准确率和鲁棒性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值