基于傅立叶变换的数字水印嵌入技术 第6页

基于傅立叶变换的数字水印嵌入技术 第6页

第四章         基于傅立叶域相关性检测的半盲水印

 

4.1 引言

 

目前,图像水印技术的研究对于水印鲁棒性的要求比较高,有相当一部分算法采用伪随机噪声来构造水印,与之相应,采用相关性检验来检测被检测图像中是否含有水印。当被检测图像中所提取的待测序列与原始水印具有较强的相关性时,表示该被检测图像中含有水印,否则,不含有水印。然而在另外一些情况下,对嵌入图像中的水印信息要求比较高。比如要求所嵌入的信息是可读的或可视的,如有意义的信息(文字,图像等)。这种有意义的水印具有无意义水印无可比拟的优点。因此,本章结合伪随机序列与有意义水印,提出了基于傅立叶域相关性检测的水印算法。为了提高水印的安全性,在嵌入水印前用Aronld变换对水印图像进行了置乱,下面先介绍Aronld变换。

 

4.2 基于Arnold变换的图像置乱算法

 

Arnold变换,又称猫脸变换,是Arnold在研究遍历理论过程中提出的一种变换。假设图像为 。令

                                 (4.1)

这就是单位正方形上的Arnold变换。实际上,可以令离散图像的像素坐标扩展到一幅图像上,对于一幅大小为N×N的图像,有下述的Arnold变换

                       (4.2)

由此做迭代变换,A= ,式中 为输入,左端 为输出,

考虑其反馈,

                          (4.3)

通过离散点的置换,同时把图像信息移植过来,当遍历了原图象的所有点之后,便产生了一副新的图像。

对于数字图像而言,我们所说的位置移动其实是对应点的灰度值或RGB颜色值的移动,即原来点 处象素对应的灰度值或RGB值移动至变换后的点 处。如果我们对一个数字图像迭代地使用离散化的Arnold变换,即将左端输出的 作为下一次Arnold变换的输入,可以重复这个过程一直下去。当迭代到某一步时,如果出现的图像符合我们对图像的“杂乱无章”标准的要求,这即是一幅基于Arnold变换的置乱图像。

注意到(4.2)式定义的Arnold变换实际上是一种点的位置移动,且这种变换是一一对应的。此外,这种变换可以迭代地做下去。类似的变换还有面包师变换。需要注意的是,Arnold变换具有周期性,即当迭代到某一步时,将重新得到原始图像。DysonFalk分析了离散Arnold变换的周期性,给出了对于任意N>2Arnold变换的周期

本算法采用的水印图像尺寸为 ,变换周期为30。即迭代的进行30Arnold置乱后,水印图像将恢复原来面目。下表为不同阶数N下,二维数字图像的Arnold变换周期[12]

4.1 Arnold变换周期

                          Chart 4.1 Arnold transform cycle

N

2

3

5

6

7

10

12

16

18

19

24

32

周期

3

4

10

12

8

30

12

12

12

9

12

24

N

35

36

40

45

48

54

60

64

72

80

96

100

周期

40

12

30

60

12

36

60

48

12

60

24

150

N

125

128

200

250

256

280

300

384

400

480

512

513

周期

250

96

150

750

192

120

300

96

300

120

384

36

 

4.3 水印算法

 

4.3.1 算法原理

4.3.1.1 嵌入算法原理

  4.1 水印嵌入流程图若图片无法显示请联系QQ3249114

Fig. 4.1 watermark embed flow chart

4.1是嵌入算法流程图。为了提高传统相关性检测方法的准确率,本算法采取嵌入两个不相关伪随机序列的方法,有效的提高了提取的准确率。

首先将原始图像划分子块,对每一图像块进行DFT变换,将二值水印图像用Arnold变换置乱。产生两个伪随机序列。置乱水印矩阵值为0时用一个伪随机序列与原始图像的幅度谱进行乘性叠加,矩阵值为1时,用另一个伪随机序列与原始图像幅度谱进行乘性叠加。

1.子块划分

将原始图像分成8×8的图像子块

                                    (4.4)若图片无法显示请联系QQ3249114

2.对每一图像块进行DFT变换

                  (4.5)

然后做FFT平移,对于二维矩阵将一、三象限与二、四象限互换,使得直流分量位于中间。

3.将二值水印用Arnold变换置乱

4.产生两个不相关的伪随机序列

5.修改相应幅度谱值

由于DFT域的幅度谱具有对称性,为了水印嵌入后保持这种对称性不变,也为了确保恢复

图像像素值为实数,嵌入水印时采用对称嵌入,即:

              (4.6)

式中 为取复数的幅度, 为嵌入信息。

嵌入规则为当水印矩阵元素为‘0’时,将一个伪随机序列与幅度谱对应元素进行乘性叠加。当水印元素为‘1’时,用另一个伪随机序列与幅度谱对应元素进行乘性叠加。嵌入时以滤波矩阵选择嵌入块中的位置。

6.对每一图像块进行DFT逆变换,得到含水印图像

                          (4.7)若图片无法显示请联系QQ3249114

                                          (4.8)

4.3.1.2 提取算法原理

 

4.2 水印提取流程图

Fig. 4.2 watermark recovering flow chart

水印提取算法是嵌入算法的逆过程

1.子块划分     若图片无法显示请联系QQ3249114

将嵌入水印图像分成8×8的图像子块:

                                                  (4.9)

2.对每一图像块进行DCT变换

                            (4.10)

然后做FFT平移,对于二维矩阵将一、三象限与二、四象限互换,使得直流分量位于中间。

3.产生两个不相关的伪随机序列。

4.计算嵌入水印幅度谱与伪随机序列的相关性,并按照嵌入时的规则产生水印矩阵。

5.将水印矩阵用Arnold变换进行置乱得到提取水印。

4.3.2 算法的matlab实现步骤

4.3.2.1 嵌入算法步骤

Step0.设置嵌入强度系数,滤波矩阵,分块大小并保存开始时间。

Step1.读入原始图像cover_object,并读出其尺寸为

Step2.读入水印图像message,并读出其尺寸为

Step3.message进行Arnold置乱,并将置乱后水印图像重新排列为向量message_vector

Step4.检查水印信息是否过大,如果水印信息过大返回错误信息,“水印信息过大”。

Step5.设置伪随机密钥key,并按照滤波矩阵的1的个数,生成两个不相关的伪随机序列pn_sequence_one,pn_sequence_zero

Steo6.对原始图像进行8×8分块,并对每一分块进行二维傅立叶变换。将低频部分移至中间,计算幅值与相位。如果水印向量元素为零,则将pn_sequence_zero嵌入滤波矩阵为1处所对应的幅值。如果水印向量元素为零,则将pn_sequence_one嵌入滤波矩阵为1处所对应的幅值。

Step7.对每一分块进行二维傅立叶逆变换,将图像变换回空域。

Step8.将嵌入水印图像保存,计算运行时间,计算psnr,显示水印、嵌入水印图像与原始图像。

4.3.2.2 提取算法步骤

水印提取算法不需要原始图像,但需要原始水印的部分信息(原始水印的尺寸)

   Step0.设置滤波矩阵,分块大小并保存开始时间。

   Step1.读入嵌入水印图像watermarked_image,并读出其尺寸为

   Step2.读入原始水印图像orig_watermark,并读出其尺寸为

   Step3.设置与嵌入算法中相同的伪随机密钥key,并按照滤波矩阵的1的个数,生成两个不相关的伪随机序列pn_sequence_one,pn_sequence_zero

   Step4.对嵌入水印图像进行8×8分块,并对每一块进行二维傅立叶变换.将低频部分移至中间,计算幅值。

   Step5.分别计算pn_sequence_one,pn_sequence_zero与幅值的相关性,如果pn_sequence_zero与幅值的相关性大于pn_sequece_one与幅值的相关性,那么将提取水印向量message_vector0’,反之赋1’

Step6.将提取水印向量进行Arnold置乱,并按原始水印尺寸排列。

Step7.计算运行时间,显示提取水印与原始水印。

 

4.4 算法的matlab实现

上一页  [1] [2] [3] [4] [5] [6] [7] [8] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有