音频数字水印的嵌入和提取
作者:互联网
目录
提到水印大家的第一反应都是下图这样的,在图片上有个大大的白色的字。但是数字水印和这种水印稍微有点区别,数字水印不仅仅可以嵌入在图片中,在各种多媒体数据中均可以嵌入水印,以保证生产方的知识产权和版权。
音频数字水印,顾名思义就是把数字水印嵌入到音频中去。由于音频载体的特殊性,音频数字水印要保证数字水印的嵌入过程不会对音频本身造成较大的失真,本文就介绍数字水印中的一基本的技术。
1. 最低有效位
前面说到音频数字水印不能对语音质量造成较大的损害,不然语音失真产品就卖不出去了。为了同时兼顾不可感知性和数字水印,有人提出了修改最低有效位( Least significant bit,LSB)来嵌入数字水印的方法。如果有的读者对语音压缩编码有些了解,就会知道在一些编解码器的码本表上会标明LSB和MSB(最高有效位,Most significant bit)。其中LSB表示影响最低的比特位,MSB表示影响最高的比特位。但是语音信息总是存在人耳可以接受的冗余,对语音质量进行细微的修改不会使人听出失真,因此可以对最低有效位进行修改来嵌入数字水印。
基于LSB的音频数字水印嵌入过程不是很难,在正式介绍之前给读者们举个LSB的例子,修改语音单个采样点的LSB不是很好的例子,这里以图像为例。我们用8个bit来表示单个像素点灰度值,那么灰度值范围为(0~255)。如下图所示,我们有两个纯色的图像,其中一个图像的灰度值为(0,0,255),另一个图像灰度值为(0,0,254),读者们能分别找出对应的图像么?
正是这种细微的差别不会使人的感觉出现较大的偏差,因此可以利用这一特性嵌入水印。图像利用的是视觉冗余,语音则可以利用听觉冗余来实现数字水印的嵌入,下面介绍具体的实现过程。
2. 数字水印的嵌入和提取
基于LSB的音频水印嵌入流程如下:
-
对水印信息编码成二进制比特流,记为A = {a1, ..., an}
-
找到音频数据的LSB位,记为记为B = {b1, ..., bm}
-
如果header+m+ender<=n可以嵌入,否则不能嵌入(header和ender为自定义的起始符号和终止符号)
-
在音频数据的每一个LSB位嵌入一个水印bit,嵌入方法为:如果ai==bj则什么都不做;反之将ai的值修改为bi
提取的过程就是将嵌入的过程反过来。以上只是最基本的流程,为了数据的安全性有时候还需要对水印信息进行加密,或者采用不同的嵌入率来对水印进行嵌入。
最后看下频谱,可以发现添加数字水印前后语音频谱并没有明显的差别:
值得一提的是这种方法除了可以用来做水印之外,还可以用来传输消息。你可以通过这个方式和你的好朋友进行悄悄话,这种使用方式叫做信息隐藏。
本文相关的数据和Python代码可以在语音算法组公众号菜单栏点击->More ->Code->SpeechAlgorithms->Watermarking中获得
标签:嵌入,LSB,音频,水印,语音,数字水印 来源: https://blog.csdn.net/sinat_35821976/article/details/112064534