数字图像水印算法的快速实现研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像水印算法的快速实现研究
数字图像水印算法的快速实现研究
摘要:数字水印技术作为数字多媒体作品版权保护和认证的重要手段,近几年来发展得很快。本文着重研究水印算法的快速实现。第一步提出一种基于图像盲水印算法:首先对原始图像进行分块处理,然后通过在分块Hadamard变换域中修改中频系数来嵌入水印,最后得出具有一定使用价值的结论。实验结果表明,算法对常用的图像处理如JPEG压缩、加噪、滤波等攻击具有较好的鲁棒性。第二步,在前人的研究基础上,实现GPU来执行快速Hadamard变换和反变换。实验结果表明,在Visual C++下利用GPU执行Hadamard变换在一定条件下比CPU更快,实验用显卡性能越强,实验效果越好。
关键词:数字水印;Hadamard变换;快速算法;GPU
0 引言
数字水印技术作为数字多媒体作品版权保护和认证的重要手段,近几年来发展得很快。数字水印技术是在数字媒体中嵌入特定信息的一种技术,根据所嵌入的载体不同,可分为图像水印、音频水印、视频水印等;根据嵌入位置不同,可分为空域水印[1]和变换域水印[2-4];而按检测过程,又可分为盲水印和非盲水印。其中用于版权保护的数字水印一般要求具有:鲁棒性、不可见性和安全性。目前,数字水印算法研究的重点是鲁棒性,应用最多的是变换域算法,包括DFT[2]、DCT[3]和DWT[4],经过国内外专家的多年研究、改进,基于变换域的数字水印算法具有较强的鲁棒性,但还是在一定程度上忽略对算法速度的关注,有些算法鲁棒性很高,但处理速度较慢,在小图像中嵌入水印的时间也可能要1分钟。而实际的应用图像往往非常大,有一些应用甚至有实时性的要求,计算工作量大,操作复杂的算法就存在实际应用推广价值低的问题,因此非常有必要研究快速的数字水印算法。哈达玛变换(Hadamard Transform,下文简称HT)的变换矩阵的元素取值最多只有两种,即{1,-1},所以有速度快、容易用硬件实现的优点。本研究首先提出了一种利用HT的快速数字图
像盲水印算法。其次,利用最新的GPU技术,通过GPU执行快速Hadamard变换和反变换,仿真实验表明,在Visual C++下GPU上执行Hadamard变换在一定条件下比CPU更快,对于处理高像素图像,速度优势更明显。
1 快速数字图像盲水印算法原理
1.1 图像的Hadamard变换
相比DFT、DCT和DWT等变换,HT的主要优点在于计算复杂度低,速度快,容易用硬件实现。二维HT已经在图像处理和图像压缩领域得到广泛的应用。令X代表源图像,Y代表经过变换后的图像,二维HT定义如下:
式(1)中Hn代表一个N×N的HT矩阵,N=2n, n=1,2,3…,其元素值取为+1或-1。
N阶的HT矩阵可以由n-1阶矩阵使用Kronecker积来实现,具体如下:
1.2 预处理算法
1.2.1 原始水印置乱
首先,为了增加鲁棒性,先对原始水印图像w重复四次,也就是2×2居中平铺,设原始二值水印图像w大小为m×m,令m*=2m,预处理后,得到m*×m*大小的w*。然后对水印图像进行置乱加密处理以消除图像像素之间的相关性。本研究采用一种计算简单、容易实现的置乱方法。设二值水印图像大小为m×m,具体的置乱方法为:1)先生成一个1到m*×m*的序列,根据密钥key进行置乱,得到随机序列P;
2)设该序列的第n个元素是Pn,令:n=k*m*+l;Pn=i*m*+j;
3)交换像素位置:将原始水印的像素(i,j)放到新位置(k,l),即完成水印的置乱处理。
其次,本文用两个0、1组成的互补序列分别表示二值水印图像中的像素值0和1。令L为序列长度,这两个序列分别定义为:
1.2.2 原始图像预处理
首先将原始图像分割成大小相等的子图像块,若子图像块尺寸选为4×4大小,虽然计算速度快,但因图像子块可变换的系数较少,
会导致水印信息的嵌入量较少;若子图像块尺寸选为16×16大小,图像子块可变换的系数增多了,相应的计算工作量也增大了。所以经过权重考虑,选择将原始灰度图I进行8×8不重叠分块,然后对每一子块进行HT。
1.3 水印嵌入和提取算法
1.3.1 嵌入算法
设原始灰度图像I大小为M×N,原始图像经过分块处理后,得到(M/8)×(N/8)个8×8的图像子块。由上一步得原始水印图像预处理后,得到m*×m*的置乱图像。然后对选中的子块进行HT,得到系数矩阵HBk,j=HT(Bk),其中k表示第k个子块,j表示第j个系数,其取值为1到64。对图像块按ZigZag顺序读取出HBk,j中的第22到36共15个中频系数,得到序列pi。依次嵌入上面得到的置乱图像像素值wi所对应的序列,具体嵌入准则定义如下:其中L是序列的长度,本文中取15,pi'是修改过的中频系数值。
最后对每个分块进行Hadamard反变换,最终得到含水印图像。
1.3.2 提取算法
本研究的提取算法是盲水印算法,即在水印提取时不需要原始图像,只需要知道嵌入过程中的置乱水印密钥key。具体的提取步骤是:1)含水印图像处理。先对水印的图像进行8×8不重叠分块,并对每个子块进行HT,得到系数矩阵。
2)水印的提取。按ZigZag读取顺序提取出每个8×8子块系数矩阵中嵌入位置对应的15个中频系数组成新的一维序列pi,j。分别求pi,j与代表水印像素值0和1的序列w0,i和w1,i的相关系数值C(0)和C(1),公式如下:
比较C(0)和C(1)的大小以确定第j块嵌入的像素值是0还是1:
3)水印反置乱。将提取出的水印信息利用密钥key进行反变换,得到新的二维矩阵wi*。由原始水印的预处理步骤可知,wi*其实含有4个m×m大小水印。运用多数原则,为每个对应的像素统计像素值为1的个数,将像素统计值大于2的像素值取为1。即可得到原始水印信息。 1.4 实验结果