本发明属于网络空间安全技术领域,涉及彩色数字图像作为数字水印的版权保护。
背景技术:
随着互联网和多媒体技术的飞速发展,彩色数字图像等数字多媒体信息的传输量呈现爆炸式增长,但随之也产生了一系列诸如盗版、侵权、篡改等安全问题,因此多媒体数据的版权保护问题受到国内外学者的日益关注。数字水印技术作为一种有效的数字产品版权保护和数据安全维护技术应运而生。数字水印技术能够利用一定的方法将含有版权信息的水印标识嵌入到数字载体中,且在视觉上不容易被觉察,当产生版权纠纷时,可以通过检测出的水印信息来判断数字产品的版权归属和完整性,从而达到保护数字产品版权的目的。
根据宿主图像工作域的不同,数字水印算法被划分为空域水印算法和频域水印算法,前者具有计算简单、运算高效的优点,但鲁棒性相对较差,而后者虽具有鲁棒性强的优点,但算法复杂度较高,实时性较差。因此,如何充分结合二者的优点,设计一种高不可见性、强鲁棒性和高实时性的数字水印算法成为目前亟待解决的问题之一。
技术实现要素:
本发明的目的是提供一种融合多级离散傅里叶变换的空域彩色数字图像盲水印方法,其特征在于包括水印嵌入和水印提取两个具体过程,其水印嵌入过程描述如下:
第一步:对一幅大小为m×m的三维彩色宿主图像h作降维处理,得到红、绿、蓝三个分层宿主图像hi,并将各分层宿主图像hi分为m×m的非重叠像素块,其中i=1,2,3分别表示红、绿、蓝三层;
第二步:对一幅大小为n×n的三维彩色水印图像w作降维处理,得到红、绿、蓝三个分层水印图像,同时,为了提高水印的安全性,对每个分层水印图像进行基于密钥kai的仿射变换得到置乱后的三个分层水印图像wi;将分层水印图像wi中的每个十进制像素值转换为8位二进制数,依次连接成长度为8n2的水印位序列swi,其中i=1,2,3分别表示红、绿、蓝三层;
第三步:按照先后顺序依次从分层宿主图像hi中选取像素块a,并依据公式(1),在空域中直接计算出像素块a经过离散傅里叶变换(discretefouriertransform,dft)后的最大能量系数cfmax,此处i=1,2,3分别表示红、绿、蓝三层;
其中,m为像素块a的尺寸大小,f(x,y)为像素块a第x行第y列的像素值;
第四步:重复执行本过程的第三步,直到获得分层宿主图像hi中所有像素块的最大能量系数为止,然后组合所有的最大能量系数得到p×p大小的最大能量系数矩阵cf-mapi,并将其划分为m×m的非重叠最大能量系数块,其中p=m/m,i=1,2,3分别表示红、绿、蓝三层;
第五步:利用matlab内置函数randperm(.)生成的伪随机序列从最大能量系数矩阵cf-mapi中随机选择最大能量系数块b,并依据公式(2),在空域中直接计算出最大能量系数块b经过dft后的最大能量系数cffmax,此处i=1,2,3分别表示红、绿、蓝三层;
其中,m为最大能量系数块b的尺寸大小,ff(x,y)为最大能量系数块b第x行第y列的像素值;
第六步:按照先后顺序依次从分层水印序列swi中选取待嵌入水印位w;依据公式(3)、(4)对最大能量系数cffmax进行量化以嵌入水印信息w,得到两个边界值cfflow与cffhigh;
其中,w为待嵌入水印位,mod(.)是取余函数,
第七步:依据公式(5),计算最佳边界值
其中,abs(.)是绝对值函数,
第八步:依据公式(6),计算嵌入水印后的像素值ff*(x,y),并用其替换原矩阵块中相应位置的像素值ff(x,y),得到含水印的最大能量系数块b*并将其更新到最大能量系数矩阵cf-mapi中的相应位置;
第九步:重复执行本过程的第五步到第八步,直到所有的水印信息都被嵌入完成为止,由此得到含水印的最大能量系数矩阵cf-mapi*,其中i=1,2,3分别表示红、绿、蓝三层;
第十步:按先后顺序依次从分层宿主图像hi中选择像素块a,并选取含水印的最大能量系数矩阵cf-mapi*中对应的最大能量系数
第十一步:重复执行本过程的第十步,直到所有含水印像素块更新完毕为止,得到含水印的分层宿主图像hi*,组合三层含水印的分层宿主图像hi*得到含水印的彩色宿主图像h*,其中i=1,2,3分别表示红、绿、蓝三层;
其水印提取过程描述如下:
第一步:通过降维处理将含水印宿主图像h*分成红、绿、蓝三个含水印的分层宿主图像hi*;同时,将每个含水印的分层宿主图像hi*分成大小为m×m的非重叠像素块,其中i=1,2,3分别表示红、绿、蓝三层;
第二步:按照先后顺序依次从含水印分层宿主图像hi*中选取含水印像素块a*,并依据公式(8),在空域中直接计算出像素块a*经过dft后的最大能量系数
其中,m为像素块a*的尺寸大小,f*(x,y)为像素块a*第x行第y列的像素值;
第三步:重复执行本过程的第二步,直到获得分层宿主图像hi*中所有含水印像素块的最大能量系数为止,然后组合所有的最大能量系数得到p×p大小的最大能量系数矩阵cf-mapi*,并将其划分为m×m的非重叠最大能量系数块,其中p=m/m,i=1,2,3分别表示红、绿、蓝三层;
第四步:利用matlab内置函数randperm(.)生成的伪随机序列从最大能量系数矩阵cf-mapi*中随机选择最大能量系数块b*,并依据公式(9)在空域中直接计算出最大能量系数块b*经过dft后的最大能量系数
其中,m为最大能量系数块b*的尺寸大小,ff*(x,y)为最大能量系数块b*第x行第y列的像素值;
第五步:依据公式(10),在各层间选用不同的量化步长,提取最大能量系数块b*中所含有的水印位w*;
其中,mod(.)为取余函数,round(.)为四舍五入函数,ti为第i层的量化步长,i=1,2,3分别表示红、绿、蓝三层;
第六步:重复执行本过程的第四步到第五步,得到提取的二进制水印序列swi*,然后,依次将二进制水印序列swi*中每8位二进制信息划分为一组并转换成十进制的像素值,最终形成提取的分层水印图像,其中i=1,2,3分别表示红、绿、蓝三层;
第七步:对提取的分层水印图像进行基于密钥kai的逆仿射变换,获得提取的分层水印图像wi*,其中i=1,2,3分别表示红、绿、蓝三层;
第八步:组合提取的分层水印图像wi*形成最终的提取水印图像w*,其中i=1,2,3分别表示红、绿、蓝三层。
该方法利用多级图像变换的能量聚集特性,结合在空域中直接求得离散傅里叶变换最大能量系数的原理及该系数变化量在空域像素中的分布规律,在空域中完成了彩色水印图像的嵌入与盲提取,该方法不仅具有较强的鲁棒性,而且还具有较好的水印不可见性和较高的算法实时性。
附图说明
图1(a)、图1(b)是两幅原始彩色宿主图像。
图2(a)、图2(b)是两幅原始彩色水印图像。
图3(a)、图3(b)是将图2(a)所示的水印依次嵌入到宿主图像图1(a)、图1(b)后所得到的含水印图像,其结构相似度ssim值依次是0.9684、0.9655,其峰值信噪比psnr值依次是40.0210db、40.0767db。
图4(a)、图4(b)是依次从图3(a)、图3(b)中提取的水印,其归一化互相关系数nc值分别是1.0000、1.0000。
图5(a)、图5(b)、图5(c)、图5(d)、图5(e)、图5(f)是将图3(a)所示的含水印图像依次进行jpeg2000压缩(4:1)、jpeg压缩(70)、椒盐噪声(0.2%)、中值滤波(3×3)、缩放(4:1)、剪切(12.5%)等攻击后所提取的水印,其归一化互相关系数nc值分别是1.0000、0.9996、0.9872、0.9668、1.0000、0.9823。
图6(a)、图6(b)是将图2(b)所示的水印依次嵌入到宿主图像图1(a)、图1(b)后所得到的含水印图像,其结构相似度ssim值依次是0.9692、0.9675,其峰值信噪比psnr值依次是40.0329db、40.1695db。
图7(a)、图7(b)是依次从图6(a)、图6(b)中提取的水印,其归一化互相关系数nc值分别是1.0000、1.0000。
图8(a)、图8(b)、图8(c)、图8(d)、图8(e)、图8(f)是将图6(a)所示的含水印图像依次进行jpeg2000压缩(4:1)、jpeg压缩(70)、椒盐噪声(0.2%)、中值滤波(3×3)、缩放(4:1)、剪切(12.5%)等攻击后所提取的水印,其归一化互相关系数nc值分别是1.0000、0.9998、0.9851、0.9632、1.0000、0.9897。
具体实施方式
本发明的目的是提供一种融合多级离散傅里叶变换的空域彩色数字图像盲水印方法,其特征在于包括水印嵌入和水印提取两个具体过程,其水印嵌入过程描述如下:
第一步:对一幅大小为512×512的三维彩色宿主图像h作降维处理,得到红、绿、蓝三个分层宿主图像hi,并将各分层宿主图像hi分为2×2的非重叠像素块,其中i=1,2,3分别表示红、绿、蓝三层;
第二步:对一幅大小为32×32的三维彩色水印图像w作降维处理,得到红、绿、蓝三个分层水印图像,同时,为了提高水印的安全性,对每个分层水印图像进行基于密钥kai的仿射变换得到置乱后的三个分层水印图像wi;将分层水印图像wi中的每个十进制像素值转换为8位二进制数(例如:可将十进制数225转换为二进制序列‘11100001’),依次连接成长度为8×322=8192的水印位序列swi,其中i=1,2,3分别表示红、绿、蓝三层;
第三步:按照先后顺序依次从分层宿主图像hi中选取像素块a,并依据公式(1),在空域中直接计算出像素块a经过离散傅里叶变换(discretefouriertransform,dft)后的最大能量系数cfmax,此处i=1,2,3分别表示红、绿、蓝三层;
其中,m为像素块a的尺寸大小,f(x,y)为像素块a第x行第y列的像素值;此处,设i=1,从宿主图像红色层中选取的像素块a为
第四步:重复执行本过程的第三步,直到获得分层宿主图像hi中所有像素块的最大能量系数为止,然后组合所有的最大能量系数得到256×256大小的最大能量系数矩阵cf-mapi,并将其划分为2×2的非重叠最大能量系数块,其中i=1,2,3分别表示红、绿、蓝三层;
第五步:利用matlab内置函数randperm(.)生成的伪随机序列从最大能量系数矩阵cf-mapi中随机选择最大能量系数块b,并依据公式(2),在空域中直接计算出最大能量系数块b经过dft后的最大能量系数cffmax,此处i=1,2,3分别表示红、绿、蓝三层;
其中,m为最大能量系数块b的尺寸大小,ff(x,y)为最大能量系数块b第x行第y列的像素值;此时,i=1,从最大能量系数矩阵cf-mapi中随机选择的最大能量系数块b为
第六步:按照先后顺序依次从分层水印序列swi中选取待嵌入水印位w;依据公式(3)、(4)对最大能量系数cffmax进行量化以嵌入水印信息w,得到两个边界值cfflow与cffhigh;
其中,w为待嵌入水印位,mod(.)是取余函数,
第七步:依据公式(5),计算最佳边界值
其中,abs(.)是绝对值函数,
第八步:依据公式(6),计算嵌入水印后的像素值ff*(x,y),并用其替换原矩阵块中相应位置的像素值ff(x,y),得到含水印的最大能量系数块b*并将其更新到最大能量系数矩阵cf-mapi中的相应位置;
此时,m=2,依据公式(6)得到含水印的最大能量系数块b*=
第九步:重复执行本过程的第五步到第八步,直到所有的水印信息都被嵌入完成为止,由此得到含水印的最大能量系数矩阵cf-mapi*,其中i=1,2,3分别表示红、绿、蓝三层;
第十步:按先后顺序依次从分层宿主图像hi中选择像素块a,并选取含水印的最大能量系数矩阵cf-mapi*中对应的最大能量系数
此时,i=1,m=2,从宿主图像红色层中选择的像素块a为
第十一步:重复执行本过程的第十步,直到所有含水印像素块更新完毕为止,得到含水印的分层宿主图像hi*,组合三层含水印的分层宿主图像hi*得到含水印的彩色宿主图像h*,其中i=1,2,3分别表示红、绿、蓝三层;
其水印提取过程描述如下:
第一步:通过降维处理将含水印宿主图像h*分成红、绿、蓝三个含水印的分层宿主图像hi*;同时,将每个含水印的分层宿主图像hi*分成大小为2×2的非重叠像素块,其中i=1,2,3分别表示红、绿、蓝三层;
第二步:按照先后顺序依次从含水印分层宿主图像hi*中选取含水印像素块a*,并依据公式(8),在空域中直接计算出像素块a*经过dft后的最大能量系数
其中,m为像素块a*的尺寸大小,f*(x,y)为像素块a*第x行第y列的像素值;此时,设i=1,从含水印宿主图像红色层中选取的含水印像素块a*为
第三步:重复执行本过程的第二步,直到获得分层宿主图像hi*中所有含水印像素块的最大能量系数为止,然后组合所有的最大能量系数得到256×256大小的最大能量系数矩阵cf-mapi*,并将其划分为2×2的非重叠最大能量系数块,其中i=1,2,3分别表示红、绿、蓝三层;
第四步:利用matlab内置函数randperm(.)生成的伪随机序列从最大能量系数矩阵cf-mapi*中随机选择最大能量系数块b*,并依据公式(9),在空域中直接计算出最大能量系数块b*经过dft后的最大能量系数
其中,m为最大能量系数块b*的尺寸大小,ff*(x,y)为最大能量系数块b*第x行第y列的像素值;此时,i=1,从最大能量系数矩阵cf-mapi*中随机选择的最大能量系数块b*为
第五步:依据公式(10),在各层间选用不同的量化步长,提取最大能量系数块b*中所含有的水印位w*;
其中,mod(.)为取余函数,round(.)为四舍五入函数,ti为第i层的量化步长,i=1,2,3分别表示红、绿、蓝三层;此时,i=1,t1=171.6000,则依据公式(10),得到提取的水印位w*=‘0’;
第六步:重复执行本过程的第四步到第五步,得到提取的二进制水印序列swi*,然后,依次将二进制水印序列swi*中每8位二进制信息划分为一组并转换成十进制的像素值,最终形成提取的分层水印图像,其中i=1,2,3分别表示红、绿、蓝三层;
第七步:对提取的分层水印图像进行基于密钥kai的逆仿射变换,获得提取的分层水印图像wi*,其中i=1,2,3分别表示红、绿、蓝三层;
第八步:组合提取的分层水印图像wi*形成最终的提取水印图像w*,其中i=1,2,3分别表示红、绿、蓝三层。
该方法既具有较强的鲁棒性,还具有较好的水印不可见性和较高的算法实时性,适用于彩色图像作为数字水印的版权保护场合。
本发明有效性验证
为了证明本发明的有效性,选择如图1(a)、图1(b)所示的两幅大小为512×512的24位标准彩色图像作为宿主图像,并分别用如图2(a)、图2(b)所示的两幅大小为32×32的24位彩色图像作为数字水印进行验证。
图3(a)、图3(b)是将图2(a)所示的水印依次嵌入到宿主图像图1(a)、图1(b)后所得到的含水印图像,其结构相似度ssim值依次是0.9684、0.9655,其峰值信噪比psnr值依次是40.0210db、40.0767db;图4(a)、图4(b)是依次从图3(a)、图3(b)中提取的水印,其归一化互相关系数nc值分别是1.0000、1.0000;图5(a)、图5(b)、图5(c)、图5(d)、图5(e)、图5(f)是将图3(a)所示的含水印图像依次进行jpeg2000压缩(4:1)、jpeg压缩(70)、椒盐噪声(0.2%)、中值滤波(3×3)、缩放(4:1)、剪切(12.5%)等攻击后所提取的水印,其归一化互相关系数nc值分别是1.0000、0.9996、0.9872、0.9668、1.0000、0.9823。
图6(a)、图6(b)是将图2(b)所示的水印依次嵌入到载体图像图1(a)、图1(b)后所得到的含水印图像,其结构相似度ssim值依次是0.9692、0.9675,其峰值信噪比psnr值依次是40.0329db、40.1695db;图7(a)、图7(b)是依次从图6(a)、图6(b)中提取的水印,其归一化互相关系数nc值分别是1.0000、1.0000;图8(a)、图8(b)、图8(c)、图8(d)、图8(e)、图8(f)是将图6(a)所示的含水印图像依次进行jpeg2000压缩(4:1)、jpeg压缩(70)、椒盐噪声(0.2%)、中值滤波(3×3)、缩放(4:1)、剪切(12.5%)等攻击后所提取的水印,其归一化互相关系数nc值分别是1.0000、0.9998、0.9851、0.9632、1.0000、0.9897。
该算法在平台1.60ghzcpu,8.00gbram,win10,matlab(r2017a)上进行过近万次运行,其数字水印的平均嵌入时间是0.768521秒,平均提取时间是0.417093秒,总计时间为1.185614秒。
综上所述,所嵌入的数字图像水印具有较高的不可见性,满足了水印算法的不可见性要求;同时,从各种受攻击图像中提取的数字图像水印具有较好的可鉴别性和较高的nc值,说明该方法具有较强的鲁棒性;另外,该算法的平均运行时间较短,满足了多媒体大数据快速版权保护的需要。
1.一种融合多级离散傅里叶变换的空域彩色数字图像盲水印方法,其特征在于包括水印嵌入和水印提取两个具体过程,其水印嵌入过程描述如下:
第一步:对一幅大小为m×m的三维彩色宿主图像h作降维处理,得到红、绿、蓝三个分层宿主图像hi,并将各分层宿主图像hi分为m×m的非重叠像素块,其中i=1,2,3分别表示红、绿、蓝三层;
第二步:对一幅大小为n×n的三维彩色水印图像w作降维处理,得到红、绿、蓝三个分层水印图像,同时,为了提高水印的安全性,对每个分层水印图像进行基于密钥kai的仿射变换得到置乱后的三个分层水印图像wi;将分层水印图像wi中的每个十进制像素值转换为8位二进制数,依次连接成长度为8n2的水印位序列swi,其中i=1,2,3分别表示红、绿、蓝三层;
第三步:按照先后顺序依次从分层宿主图像hi中选取像素块a,并依据公式(1),在空域中直接计算出像素块a经过离散傅里叶变换(discretefouriertransform,dft)后的最大能量系数cfmax,此处i=1,2,3分别表示红、绿、蓝三层;
其中,m为像素块a的尺寸大小,f(x,y)为像素块a第x行第y列的像素值;
第四步:重复执行本过程的第三步,直到获得分层宿主图像hi中所有像素块的最大能量系数为止,然后组合所有的最大能量系数得到p×p大小的最大能量系数矩阵cf-mapi,并将其划分为m×m的非重叠最大能量系数块,其中p=m/m,i=1,2,3分别表示红、绿、蓝三层;
第五步:利用matlab内置函数randperm(.)生成的伪随机序列从最大能量系数矩阵cf-mapi中随机选择最大能量系数块b,并依据公式(2),在空域中直接计算出最大能量系数块b经过dft后的最大能量系数cffmax,此处i=1,2,3分别表示红、绿、蓝三层;
其中,m为最大能量系数块b的尺寸大小,ff(x,y)为最大能量系数块b第x行第y列的像素值;
第六步:按照先后顺序依次从分层水印序列swi中选取待嵌入水印位w;依据公式(3)、(4)对最大能量系数cffmax进行量化以嵌入水印信息w,得到两个边界值cfflow与cffhigh;
其中,w为待嵌入水印位,mod(.)是取余函数,
第七步:依据公式(5),计算最佳边界值
其中,abs(.)是绝对值函数,
第八步:依据公式(6),计算嵌入水印后的像素值ff*(x,y),并用其替换原矩阵块中相应位置的像素值ff(x,y),得到含水印的最大能量系数块b*并将其更新到最大能量系数矩阵cf-mapi中的相应位置;
第九步:重复执行本过程的第五步到第八步,直到所有的水印信息都被嵌入完成为止,由此得到含水印的最大能量系数矩阵cf-mapi*,其中i=1,2,3分别表示红、绿、蓝三层;
第十步:按先后顺序依次从分层宿主图像hi中选择像素块a,并选取含水印的最大能量系数矩阵cf-mapi*中对应的最大能量系数
第十一步:重复执行本过程的第十步,直到所有含水印像素块更新完毕为止,得到含水印的分层宿主图像hi*,组合三层含水印的分层宿主图像hi*得到含水印的彩色宿主图像h*,其中i=1,2,3分别表示红、绿、蓝三层;
其水印提取过程描述如下:
第一步:通过降维处理将含水印宿主图像h*分成红、绿、蓝三个含水印的分层宿主图像hi*;同时,将每个含水印的分层宿主图像hi*分成大小为m×m的非重叠像素块,其中i=1,2,3分别表示红、绿、蓝三层;
第二步:按照先后顺序依次从含水印分层宿主图像hi*中选取含水印像素块a*,并依据公式(8),在空域中直接计算出像素块a*经过dft后的最大能量系数
其中,m为像素块a*的尺寸大小,f*(x,y)为像素块a*第x行第y列的像素值;
第三步:重复执行本过程的第二步,直到获得分层宿主图像hi*中所有含水印像素块的最大能量系数为止,然后组合所有的最大能量系数得到p×p大小的最大能量系数矩阵cf-mapi*,并将其划分为m×m的非重叠最大能量系数块,其中p=m/m,i=1,2,3分别表示红、绿、蓝三层;
第四步:利用matlab内置函数randperm(.)生成的伪随机序列从最大能量系数矩阵cf-mapi*中随机选择最大能量系数块b*,并依据公式(9)在空域中直接计算出最大能量系数块b*经过dft后的最大能量系数
其中,m为最大能量系数块b*的尺寸大小,ff*(x,y)为最大能量系数块b*第x行第y列的像素值;
第五步:依据公式(10),在各层间选用不同的量化步长,提取最大能量系数块b*中所含有的水印位w*;
其中,mod(.)为取余函数,round(.)为四舍五入函数,ti为第i层的量化步长,i=1,2,3分别表示红、绿、蓝三层;
第六步:重复执行本过程的第四步到第五步,得到提取的二进制水印序列swi*,然后,依次将二进制水印序列swi*中每8位二进制信息划分为一组并转换成十进制的像素值,最终形成提取的分层水印图像,其中i=1,2,3分别表示红、绿、蓝三层;
第七步:对提取的分层水印图像进行基于密钥kai的逆仿射变换,获得提取的分层水印图像wi*,其中i=1,2,3分别表示红、绿、蓝三层;
第八步:组合提取的分层水印图像wi*形成最终的提取水印图像w*,其中i=1,2,3分别表示红、绿、蓝三层。
技术总结