1.一种融合DCT和DHT的空域彩色数字图像盲水印方法,具体包含水印嵌入和水印提取两个过程,其水印嵌入过程描述如下:第一步:对一幅大小为M×M的24位彩色载体图像H作降维处理,得到红、绿、蓝三个分层载体图像Hi,并将各分层载体图像中的像素划分为m×m的非重叠像素块,其中i=1, 2, 3分别表示红、绿、蓝三层;
第二步:对一幅大小为N×N的24位彩色水印图像W作降维处理,得到红、绿、蓝三个分层水印图像,同时,为了提高水印的安全性,对每个分层水印图像进行基于密钥Kai的Arnold变换得到置乱后的三个分层水印图像Wi;将分层水印图像Wi中的每个十进制像素值转换为8位二进制数,依次连接成长度为8N2的水印位序列SWi,其中i=1, 2, 3分别表示红、绿、蓝三层;
第三步:按先后顺序依次从分层载体图像Hi中选择像素块A,根据公式(1),在空域中直接计算像素块A在离散余弦变换(DCT)结果中的直流系数dc,此处i=1, 2, 3分别表示红、绿、蓝三层;
(1)
其中,m为像素块的行(列)的大小,f(x, y)为像素块A第x行第y列的像素值;
第四步:重复执行本过程的第三步,直到获得分层载体图像Hi中所有像素块的直流系数为止,然后,组合所有的直流系数得到大小为p×p的直流系数矩阵DC-mapi,并将其划分为m×m的非重叠直流系数块,其中i=1, 2, 3分别表示红、绿、蓝三层,p=M/m;
第五步:利用基于密钥Kbi的MD5哈希伪随机选择算法从直流系数矩阵DC-mapi中随机选择直流系数块B,根据公式(2),在空域中直接计算其在离散哈特利变换(DHT)结果中的直流分量dh,此处i=1, 2, 3分别表示红、绿、蓝三层;
(2)
其中,m为直流系数块B的行(列)的大小,g(x, y)为直流系数块B第x行第y列的值;
第六步:按照先后顺序从分层水印序列SWi中选取待嵌入水印位w;利用公式(3),对直流分量dh进行量化以嵌入水印信息w,得到新的直流分量dh*;
(3)
其中,w为待嵌入水印位, 为量化系数,round(.)为四舍五入函数,Ti为第i层的量化步长,i=1, 2, 3分别表示红、绿、蓝三层;
第七步:利用公式(4),计算g*(x, y)并用其替换原矩阵块中相应位置的直流系数g(x, y),得到含水印的直流系数块B*;
(4)
*
第八步:将含水印的直流系数块B 更新到其在直流系数矩阵DC-mapi中的相应位置,其中i=1, 2, 3,分别表示红、绿、蓝三层;
第九步:重复执行本过程的第五步到第八步,直到所有的水印信息都被嵌入完成为止,由此得到含水印的直流系数矩阵DC-mapi*,其中i=1, 2, 3,分别表示红、绿、蓝三层;
第十步:按先后顺序依次从分层载体图像Hi中选择像素块A,并选取含水印的直流系数矩阵DC-mapi*中相应的直流系数dc*,依据公式(5),用修改后的像素值f*(x, y)替换原像素块A相应位置的像素值f(x, y),得到含水印像素块A*,并更新到其在分层载体图像Hi中的相应位置,得到含水印的分层载体图像Hi*;最后,组合三层含水印的分层载体图像Hi*得到含水印的彩色载体图像H*,其中i=1, 2, 3分别表示红、绿、蓝三层;
(5)
其水印提取过程描述如下:
第一步:通过降维处理将含水印载体图像H*分成红、绿、蓝三个分层图像Hi*;同时,将每*个含水印分层图像Hi 分成大小为m×m的非重叠像素块,其中i=1, 2, 3分别表示红、绿、蓝三层;
第二步:按先后顺序依次从含水印分层图像Hi*中选择含水印像素块A*,根据公式(6),在空域中直接计算含水印像素块A*在离散余弦变换(DCT)结果中的直流系数dc*,此处i=1,
2, 3分别表示红、绿、蓝三层;
(6)
其中,m为含水印像素块A*行(列)的大小,f*(x, y)为含水印像素块A*第x行第y列的像素值;
第三步:重复执行本过程的第二步,直到获得含水印分层图像Hi*中所有像素块的直流系数为止,然后,组合所有的直流系数dc*得到大小为p×p的含水印直流系数矩阵DC-mapi*,并将其划分为m×m的非重叠直流系数块,其中i=1, 2, 3分别表示红、绿、蓝三层,p=M/m;
第四步:利用基于密钥为Kbi的MD5哈希伪随机选择算法从含水印的直流系数矩阵DC-mapi*中选择含水印的直流系数块B*;根据公式(7),在空域中直接计算含水印的直流系数块B*在离散哈特利变换(DHT)结果中的直流分量dh*,其中i=1, 2, 3分别表示红、绿、蓝三层;
(7)
其中,m为含水印的直流系数块B*行(列)的大小,g*(x, y)为含水印的直流系数块B*第x行第y列的值;
第五步:使用对应层的量化步长Ti,利用公式(8)提取水印位w*;
(8)
其中, 为量化系数,round(.)为四舍五入函数,Ti为第i层的量化步长,i=1, 2, 3分别表示红、绿、蓝三层;
*
第六步:重复执行本过程的第四步到第五步,得到提取的二进制水印序列SWi ,将二进制水印序列SWi*中每8位二进制信息划分为一组并转换成十进制的像素值,形成分层水印图像,其中i=1, 2, 3分别表示红、绿、蓝三层;
第七步:对分层水印图像进行基于密钥Kai的逆Arnold变换,获得各层的提取水印图像Wi*;组合各层的提取水印图像Wi*形成最终的提取水印图像W*,其中i=1, 2, 3分别表示红、绿、蓝三层。