1.一种基于矩阵奇异值分解的四元数彩色数字图像盲水印方法,其特征在于通过具体的水印嵌入过程和提取过程来实现的,其水印嵌入过程描述如下:第一步:彩色图像数字水印的预处理:首先,将一幅大小为N×N的彩色图像数字水印W依照红、绿、蓝三基色的顺序分成3个分层水印图像Wi;然后,将每个分层水印图像进行基于密钥Kai的Arnold置乱变换以提高水印的安全性;最后,将置乱后的分层水印图像中的每个2
十进制数表示的像素用8位二进制数表示,并依次连接形成长度为8N 的分层水印位序列SWi,其中i=1, 2, 3, 分别表示红、绿、蓝三层;
第二步:获取宿主图像的嵌入块:将一幅大小为M×M的原始彩色宿主图像H分成大小为2
m×m的图像块,每一个图像块纵向包含红、绿、蓝三层;根据分层水印信息长度8N ,利用Matlab系统内置函数randperm生成的伪随机序列在宿主图像H中选择合适位置的图像块,2
以提高水印抗剪切攻击的鲁棒性,其中3×8N <=(M×M)/(m×m);
第三步:选取一个图像块A,进行是否调整极端像素值的判断,如果图像块A蓝色通道的(1, 1)位置上的像素值为0,那么将其像素值改为1;然后,将彩色宿主图像H依照红、绿、蓝三基色的顺序分成3个分层宿主图像Hi,图像块A的每个像素值都通过Hi用四元数表示出来,得到四元数像素块qA,其中i=1, 2, 3, 分别表示红、绿、蓝三层;
第四步:根据公式(1),对四元数像素块qA进行奇异值分解(Singular Value Decomposition, SVD),得到左奇异矩阵U、右奇异矩阵V和对角矩阵S,其中S仅在主对角线上有奇异值;
[U,S,V]=svd(qA) (1)第五步:从分层水印序列SWi中按先后顺序取出一个嵌入水印信息w,依据该嵌入水印信息及公式(2)求得量化值sq;
(2)
其中,mval=mod(sm,T),sm是对角矩阵S中的最大值,T为量化步长,mod(.)为求余函数,T1=0.25×T,T2=0.75×T,judge1(mval)是当mval<=T/2+T/8或mval>=T‑T/8时返回true,否则返回false;judge0(mval)是当mval<=T/8或mval>=T/2‑T/8时返回true,否则返回false;
*
第六步:用量化值sq替换sm,得到S ;再利用公式(3)进行逆奇异值分解,得到含水印的*
四元数像素块qA ;
* * T
qA =U×S ×V (3)* *
第七步:将含水印的四元数像素块qA 转换为含水印的像素块A ,然后进行溢出判断:如* *
果sq≠sm,就按照公式(4)进行溢出判断得到sq ,并用其替换sm ;之后再利用公式(3)进行*
逆奇异值分解,得到最终的含水印的四元数像素块qA ,再进一步转换为最终的含水印的像*
素块A ;
(4)* * *
其中,sm 是对角矩阵S 中的最大值,T为量化步长, 是含水印的像素块A 在第p行第q列的像素值,1≤p,q≤m,m是图像块的尺寸大小;
第八步:重复执行上述第三步到第七步,直到所有的水印信息都被嵌入完成为止;最*
后,获得含水印图像H ;
其水印提取过程描述如下:
*
第一步:将含水印图像H 分成m×m的非重叠图像块,每一个图像块纵向包含红、绿、蓝三层;
第二步:利用上述水印嵌入过程中所提到的Matlab系统内置函数randperm生成的伪随机序列选择图像块;
* *
第三步:选取一个图像块A ,将含水印图像H 依照红、绿、蓝三基色的顺序分成3个分层* * *
含水印图像Hi ,图像块A 的每个像素值都通过Hi 用四元数表示出来,得到含水印的四元数*
像素块为qA ,其中i=1, 2, 3, 分别表示红、绿、蓝三层;
* *
第四步:根据公式(5),对含水印的四元数像素块qA 进行奇异值分解,得到对角矩阵S ;
* *
S =svd(qA) (5)* *
第五步:利用公式(6),提取含水印的四元数像素块qA 中所含有的水印w ;
(6)
*
其中,sm是对角矩阵S 中的最大值,mod(.)是求余函数,T为量化步长;
*
第六步:重复执行第三步到第五步,提取每层二进制水印序列SWi ,然后每8位二进制信息为一组转换成十进制的像素值,其中i=1, 2, 3, 分别表示红、绿、蓝三层;
第七步:对转化后的每层十进制像素执行基于密钥Kai的逆Arnold变换并获得分层水印*
Wi ,其中i=1, 2, 3, 分别表示红、绿、蓝三层;
* *
第八步:组合获得的分层水印Wi 形成最终的提取水印W ,其中i=1, 2, 3, 分别表示红、绿、蓝三层。