1.一种基于Slant变换的空域自适应彩色图像盲水印方法,其特征在于通过4个过程来实现的,具体包括预处理过程、水印嵌入过程、图像矫正过程和水印提取过程:
过程1:预处理过程,其具体步骤描述如下:
Step 1:彩色载体图像的预处理:对大小为M×M×3的三维彩色载体图像H作降维处理,得到红、绿、蓝三个二维的分层载体图像Hp,并将各层中的像素划分为2×2的非重叠像素块,p=1, 2, 3分别表示红、绿、蓝三层;
Step 2:彩色水印图像的预处理:对大小为N×N×3的三维彩色水印图像W作降维处理,得到红、绿、蓝三个二维的分层水印图像;随之,对每层水印图像进行基于密钥Kp的仿射变换得到置乱后的分层水印图像Wp;然后,将各分层水印图像Wp中的每个十进制像素值转换为一个8位的二进制序列,并依次拼接得到二进制序列wap;由前至后将二进制序列wap的每4位编码为7位的汉明纠错码,并依次拼接得到纠错码序列wbp;根据当前可嵌入的水印容量,自适应地选择水印编码方式:如果水印容量不小于(N×N×3×8×7)/(M×M×3×4)=14×N2/M2,那么水印序列whp取纠错码序列wbp,且cmk=2;否则,水印序列whp取二进制序列wap,且cmk=1,其中,编码标志cmk表示水印的编码方式,其值为1时表示二进制码,其值为2时表示汉明码,p=1, 2, 3分别表示红、绿、蓝三层;
Step 3:生成选块矩阵:利用三个选块密钥间的自定义关系和蓝层的选块密钥rky3,得到红层的选块密钥rky1和绿层的选块密钥rky2;然后再根据选块密钥rkyp、编码标志cmk、彩色载体图像的长度或宽度尺寸M和彩色水印图像的长度或宽度尺寸N,借助MATLAB函数randperm(.)伪随机生成选块矩阵BSMp,p=1, 2, 3分别表示红、绿、蓝三层;
过程2:水印嵌入过程,其具体步骤描述如下:
Step 1:选择像素块:在上述预处理过程之后,利用选块矩阵BSMp从分层图像Hp中选择大小为2×2的像素块slantblock,p=1, 2, 3分别表示红、绿、蓝三层;
Step 2:计算最大能量系数:利用公式(1),不需要进行真正的Slant变换,在空域中直接求出需经Slant变换后所得系数矩阵中的最大能量系数Emax;
(1)
其中,slantblock(i, j)为像素块slantblock第i行、第j列的像素值;
Step 3:计算边界值:依次从水印序列whp中取一位信息w,利用公式(2)求得最优增量add的下边界值chlow和上边界值chhigh;
(2)
其中,为量化系数,Tp为第p层的初始量化步长,mod(.)是求余函数,p=1, 2, 3分别表示红、绿、蓝三层;
Step 4:计算最大能量系数的最优增量:利用公式(3)求得最优增量add;
(3)
其中,chlow和chhigh分别表示最优增量add的下边界值和上边界值,abs(.)为取绝对值函数;
Step 5:分配最优增量:利用公式(4)将最优增量add分配到各像素值中;
(4)
其中,slantblock*(i, j)为含水印像素块slantblock*第i行、第j列的像素值;
Step 6:重复执行本过程中的Step 1到Step 5,直到所有的信息嵌入完成为止,此时就得到了含水印的分层载体图像Hp*,最后重组含水印的分层载体图像Hp*,并得到含水印的彩色载体图像H*;
Step 7:获取最优量化步长:以初始量化步长T3为循环变量,重复执行本过程中的Step1到Step 6,当含水印载体图像的质量满足峰值信噪比PSNR值大于40dB且结构相似性SSIM值大于0.96时,即可得到蓝层的最优量化步长TT3和质量最优的彩色含水印载体图像HL*;其中,绿层的最优量化步长TT2和红层的最优量化步长TT1都是由TT3和载体图像各层步长间的关系得到的;
Step 8:将密钥加密,隐写至载体文件中:使用函数encodekeys(.)将整数密钥M、N、TT3、K3、cmk和rky3加密为一个大整数密钥key,然后将其转换为二进制序列keybits,最后借助函数addkeytofileend(.)将二进制序列keybits隐写到彩色含水印载体图像HL*的文件结构中,得到含有密钥信息的彩色含水印载体图像HM*;其中,整数密钥M、N、TT3、K3、cmk和rky3分别表示彩色载体图像的长度或宽度尺寸,彩色水印图像的长度或宽度尺寸,蓝层的最优量化步长,蓝层的仿射变换密钥,编码标志以及蓝层的选块密钥,encodekeys(.)为自定义的整数配对函数,可将整数密钥序列加密为一个大整数密钥,addkeytofileend(.)为自定义函数,可将二进制密钥信息隐写到BMP格式的文件结构中或读取文件结构中隐藏的二进制密钥信息;
过程3:图像矫正过程,其具体步骤描述如下:
Step 1:计算几何属性:计算被攻击的含水印载体图像I*的内部有效图像的各顶点(A(x1, y1), B(x2, y2), C(x3, y3), D(x4, y4),)、各边(l1, l2, l3, l4)、各边与水平线的夹角()和四个内角的度数();
Step 2:判断攻击类型:假设已知含水印载体图像HM*的行数为MR、列数为MC,被攻击的含水印载体图像I*的行数为NR、列数为NC;根据内部有效图像的边角信息,可有如下14个条件:①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,⑪,⑫,⑬,⑭;其中,Q为整数阈值,|.|表示取绝对值计算;被攻击的含水印载体图像I*所受攻击的类型具体分为以下8种情况:
1)若图像的几何属性满足条件:①⑥⑧⑩⑫,则含水印载体图像I*所受攻击的类型为旋转攻击;
2)若图像的几何属性满足条件:②④⑥⑧⑩⑫,则含水印载体图像I*所受攻击的类型为缩小攻击;
3)若图像的几何属性满足条件:②④⑥⑨⑩⑫,则含水印载体图像I*所受攻击的类型为放大攻击;
4)若图像的几何属性满足条件:②④⑥⑧⑪或②④⑥⑧⑬,则含水印载体图像I*所受攻击的类型为平移变换攻击;
5)若图像的几何属性满足条件:③⑤⑦,则含水印载体图像I*所受攻击的类型为仿射变换攻击;
6)若图像的几何属性满足条件:③④⑦,则含水印载体图像I*所受攻击的类型为水平剪切攻击;
7)若图像的几何属性满足条件:②⑤⑦,则含水印载体图像I*所受攻击的类型为垂直剪切攻击;
8)若图像的几何属性满足条件:②④⑥⑩⑫⑭,则含水印载体图像I*所受攻击的类型为压缩攻击、加噪攻击、滤波攻击等不改变含水印载体图像尺寸的常规攻击;
Step 3:矫正被攻击图像:根据上述判断得出的攻击类型,矫正含水印载体图像I*,具体分为以下8种情况;
1)矫正旋转攻击后的图像:根据本过程Step 2中各边长与水平线的夹角,计算图像逆时针旋转的角度angle,然后,调用旋转函数imrotate(.),逆时针旋转-angle角度,最后去除黑色边缘,并将得到的内部有效图像调整到大小为M×M×3的三维含水印彩色载体图像IM*;
2)矫正缩小攻击后的图像:根据本过程Step 2中的各边长,计算图像缩小比例,调用图像尺寸调整函数imresize(.),得到已矫正的大小为M×M×3的三维含水印彩色载体图像IM*;
3)矫正放大攻击后的图像:根据本过程Step 2中的各边长,计算图像放大比例,调用图像尺寸调整函数imresize(.),得到已矫正的大小为M×M×3的三维含水印彩色载体图像IM*;
4)矫正平移变换攻击后的图像:根据本过程Step 2中的各顶点,计算经过各顶点的内部有效图像边界的数量,并确定平移变换的类型,最后进行相应的逆平移变换,得到已矫正的大小为M×M×3的三维含水印彩色载体图像IM*;
5)矫正仿射变换攻击后的图像:确定仿射矩阵AF=[a, b, 0; c, d, 0; 0, 0, 0],其中,a=y2/MC,d=x4/MR,c=(NC-MC)×a/MC,b=((NR-MR)×d/MR);计算仿射矩阵的逆矩阵AF-1并调用图像变换函数imtransform(.),得到已矫正的大小为M×M×3的三维含水印彩色载体图像IM*;
6)矫正水平剪切攻击后的图像:水平剪切攻击是仿射变换攻击的一个特例,该攻击没有缩放因子,因此,仿射变换矩阵AF中的元素a=1,d=1;水平剪切攻击时的元素c=0,b=(NR-MR)/MR;然后,计算仿射变换矩阵AF的逆矩阵AF-1,最后调用图像变换函数imtransform(.),得到已矫正的大小为M×M×3的三维含水印彩色载体图像IM*;
7)矫正垂直剪切攻击后的图像:垂直剪切攻击是仿射变换攻击的另一个特例,该攻击也没有缩放因子,因此,仿射变换矩阵AF中的元素a=1,d=1;垂直剪切攻击时的元素b=0,c=(NC-MC)/MC;然后,计算仿射变换矩阵AF的逆矩阵AF-1,最后调用图像变换函数imtransform(.),得到已矫正的大小为M×M×3的三维含水印彩色载体图像IM*;
8)矫正常规攻击后的图像:由于压缩攻击、加噪攻击、滤波攻击等常规攻击不改变含水印彩色载体图像的尺寸,因此,彩色含水印载体图像HL*即为已矫正的大小为M×M×3的三维含水印彩色载体图像IM*;
过程4:水印提取过程,其具体步骤描述如下:
Step 1:获取密钥信息并解密:针对上述图像矫正过程获得的大小为M×M×3的三维含水印彩色载体图像IM*,使用函数addkeytofileend(.)从载体文件中获取密钥的二进制序列keybits,然后将二进制序列keybits转换为一个大整数密钥key;最后借助函数decodekeys(.)将大整数密钥key解密为整数密钥序列keys={M, N, TT3, K3, cmk, rky3};其中,整数密钥M、N、TT3、K3、cmk和rky3分别表示彩色载体图像的长度或宽度尺寸,彩色水印图像的长度或宽度尺寸,蓝层的最优量化步长,蓝层的仿射变换密钥,编码标志以及蓝层的选块密钥,decodekeys(.)为自定义的整数配对函数,可将大整数密钥解密为整数密钥序列,addkeytofileend(.)为自定义函数,可将二进制密钥信息隐写到BMP格式的文件结构中或读取文件结构中隐藏的二进制密钥信息;
Step 2:利用三个选块密钥间的自定义关系和蓝层的选块密钥rky3,分别得到红层、绿层的选块密钥rky1和rky2;然后再根据选块密钥rkyp、编码标志cmk、彩色载体图像的长度或宽度尺寸M和彩色水印图像的长度或宽度尺寸N,借助MATLAB函数randperm(.)伪随机生成选块矩阵BSMp;利用载体图像各层间的相关关系和蓝层的最优量化步长TT3,分别得到红层、绿层的最优量化步长TT1和TT2;利用三个仿射变换密钥间的自定义关系和蓝层的仿射变换密钥K3,分别得出红层、绿层的仿射变换密钥K1和K2,其中,p=1, 2, 3分别表示红、绿、蓝三层;
Step 3:针对上述图像矫正过程获得的大小为M×M×3的三维含水印彩色载体图像IM*,执行本方法预处理过程中的Step 1,得到分层的含水印载体图像IMp*和2×2的非重叠像素块,其中,p=1, 2, 3分别表示红、绿、蓝三层;
Step 4:选择含水印像素块:利用选块矩阵BSMp从分层载体图像IMp*中选择含水印像素块slantblock*,其中,p=1, 2, 3分别表示红、绿、蓝三层;
Step 5:计算最大能量系数:利用公式(5),在空域中直接求出经Slant变换后所得系数矩阵中的最大能量系数Emax*,而不需要进行真正的Slant变换;
(5)
其中,slantblock*(i, j)为像素块slantblock*第i行、第j列的像素值;
Step 6:提取水印信息:利用公式(6)提取水印信息w*;
(6)
其中,mod(.)为取余函数,TTp为第p层的最优量化步长,p=1, 2, 3分别表示红、绿、蓝三层;
Step 7:重复执行本过程中的Step 4到Step 6,直到所有的水印信息均被提取为止,此时,得到了含水印序列whp*,p=1, 2, 3分别表示红、绿、蓝三层;
Step 8:针对含水印序列whp*、仿射变换密钥Kp、编码标志cmk、彩色载体图像的长度或宽度尺寸M和彩色水印图像的长度或宽度尺寸N,执行本方法预处理过程中Step 2的逆处理,得到最终的提取水印W*。