信息隐藏与数字水印实验2——WAV音频的LSB信息隐藏

一、实验目的

        了解WAV文件格式,掌握利用WAV格式音频文件实现LSB信息隐藏原理,设计并实现一种基于WAV文件的LSB信息隐藏算法,同时自行练习设计实现一种次第有效位的音频隐写算法。

        了解归一化相关系数NC的原理,利用NC对嵌入的水印图像和提取的图像水印进行比较。

二、实验环境

(1) Windows 11操作系统;

(2) Python3.7;

(3) Python的wave、numpy、matplotlib、opencv-python库;

(4) wave音频文件和二值水印图像文件。

三、实验步骤和结果

1. 将 carrier.wav 读入并转为直接数据,将灰度图读入转为一维数组并二值化,然后 采用次低有效位的方式将图像数据隐写到音频文件中。

        信息隐藏的代码中,核心部分即采用次低有效位嵌入的代码如下所示:

        运行代码,结果如下:

        完成LSB嵌入之后,首先我对LSB嵌入前后的音频文件进行听觉上的区分,二者靠人耳听不出任何差别。从上图也可以看出,

        LSB信息隐藏后,对原始音频的波形影响也非常小,几乎看不出任何差别,这说明LSB隐藏的音频透明性非常好。当然,和通过最低有效位进行隐写的方式相比,差距还是稍微大一些。

2. 将隐写后的音频文件读入并转为 numpy 数据,然后按照隐写时的方式提取水印,提取每一数据的次第有效位。

        然后将提取后的数据转为二维矩阵并转为 8bit 的灰度图保存,最后计算 NC值。

        信息提取的代码中,核心部分即提取次低有效位数据的代码如下所示:

        运行代码,结果如下:

        首先通过肉眼对比上图中原始水印图像和提取水印图像的差异,发现二者无法看出任何差异。

        然后计算这两张图像的NC值,在本例中,携密音频未发生任何变化,也就是说未对携密音频进行任何形式的攻击。因此提取出来的水印信息和原始的水印信息完全相同,归一化函数的值为1。运行计算NC值的代码后的结果如下:

        可以看到,NC值为100.0%,与预想结果一致。

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

(1)运行hide.py时,python环境没有cv2包,在pycharm的设置里面也无法顺利安装。

解决方法:

        选择国内源的镜像下载并安装。我选择的是https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/opencv-python/,将对应版本的cv2包下载后,打开Anaconda Prompt,进入pytorch虚拟环境,并跳转至保存cv2包的本地地址,进行安装即可:

五、实验心得体会和思考

        通过WAV音频的LSB信息隐藏实验,我更加深入地了解了信息隐藏和数字水印的基础技术、WAV文件格式和归一化相关系数NC的原理,较好地掌握了LSB针对WAV音频的隐写及提取的基本操作,在理论基础和动手实践方面都得到了很大的提升,这些都是仅在课堂学习中获取不到的宝贵经验,正所谓“实践方能出新知”。

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息隐藏是一种将附加数据嵌入到主数据中的技术,以便在传输或存储过程中对其进行保护或认证。DCT(离散余弦变换)是一种常用的数字图像处理技术,可以将图像转换为频域表示。在DCT域中,我们可以将水印嵌入到图像中,实现信息隐藏。 要在Java中实现DCT域水印,可以按照以下步骤进行: 1. 加载源图像和水印图像:首先,从文件系统中加载源图像和水印图像。可以使用Java中的图像处理库(如Java Advanced Imaging API)来加载和处理图像。 2. 进行离散余弦变换(DCT):使用Java库中的函数对源图像进行DCT变换。这将将图像从空间域转换为频域。 3. 对水印图像进行预处理:对水印图像进行必要的预处理,如调整大小和灰度化。确保水印图像的大小与源图像匹配,并且都是灰度图像。 4. 将水印图像嵌入到源图像:将水印图像的像素值嵌入到DCT变换的系数中。可以通过调整DCT系数的幅度或相位来嵌入水印。确保嵌入的水印不会显著改变图像的视觉质量。 5. 逆DCT变换:将嵌入了水印的DCT系数进行逆变换,将图像从频域恢复到空间域。这将得到带有水印的图像。 6. 保存带有水印的图像:将带有水印的图像保存到文件系统中,以供进一步使用或传输。 以上就是信息隐藏DCT域水印的Java实现的基本步骤。实际上,还可以根据需求进行更高级的操作,例如加密水印、扩展到视频或音频等。使用Java的图像处理库,我们可以方便地实现这些功能,并保护我们的信息免受未经授权的访问和篡改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值