🥳原文: Embedding color watermark image to color host image based on 2D-DCT
🥳前言: 这是一篇 2023 年的 SCI 物理 3 区,采用量化机制实现的盲水印嵌入。
- 本人对量化的介绍:数字水印 | 盲水印嵌入:量化索引机制 QIM
1 Watermark Embedding Procedure
本文所提出的水印嵌入过程如下图所示:
步骤一
针对一个大小为 M × M M × M M×M 的原始图像 H H H:
- ① 将其分离成 R , G , B \mathsf{R,G,B} R,G,B 三层,并把它们视作载体图像 H i ( i = 1 , 2 , 3 ) H_i(i=1,2,3) Hi(i=1,2,3);
- ② 将 H i H_i Hi 分割成大小为 4 × 4 4 × 4 4×4 的非重叠图像块。
针对一个大小为 N × N N × N N×N 的水印 W W W:
- ① 将其分离成 R , G , B \mathsf{R,G,B} R,G,B 三层;
- ② 为了提高算法的安全性,将基于密钥 K a i Ka_i Kai 的仿射变换和基于密钥 K b i Kb_i Kbi 的 A r n o l d \mathsf{Arnold} Arnold 变换依次分别应用于 3 3 3 个水印层,从而得到 3 3 3 个混沌的水印层 W i W_i Wi;
- ③ 将 W i W_i Wi 的像素由十进制值转换为二进制值,并将所有结果拼接起来,得到一个长度为 8 N 2 8N^2 8N2 的序列 S W i SW_i SWi,其中 i = 1 , 2 , 3 i=1,2,3 i=1,2,3 代表 R G B \mathsf{RGB} RGB 颜色模型中的 3 3 3 层。
说明:本文处理的水印是彩色水印,因此像素值不是 0 0 0 和 1 1 1。而在后面使用量化机制进行水印嵌入时,我们希望水印信息是以 01 01 01 的二进制形式出现的,因此这里将水印转换为二进制序列。
步骤二
为了提高抵抗裁剪攻击的鲁棒性,利用 randperm()
函数生成随机数矩阵,并基于密钥 K c i Kc_i Kci 和 K d i Kd_i Kdi 从 H i H_i Hi 中选择一个图像块 A A A,其中 i = 1 , 2 , 3 i=1,2,3 i=1,2,3 代表 R G B \mathsf{RGB} RGB 颜色模型中的 3 3 3 层。
说明:
randperm()
是 Matlab 提供的一个函数,用于生成随机数矩阵。但我感觉原文对各个密钥的使用都没有进行具体介绍,不过大家应该都知道如何对水印进行置乱预处理,因此也没必要细究本文的方法😇
步骤三
对图像块 A A A 进行 2 D - D C T \mathsf{2D\text{-}DCT} 2D-DCT 变换,得到系数矩阵 d c t A \mathsf{dct}A dctA,如下所示:
d c t A = d c t 2 ( A ) \mathsf{dct}A=\mathsf{dct2}(A) dctA=dct2(A)
说明: d c t A \mathsf{dct}A dctA 是一个变量名,
dct2()
是一个 Matlab 提供的函数,用于做 2D - DCT 变换。请勿混淆!
根据 z i g - z a g \mathsf{zig \text{-} zag} zig-zag 形状,从 d c t A \mathsf{dct}A dctA 中选取两个中频系数对 ( c p 1 , c p 2 ) (c_{p1},c_{p2}) (cp1,cp2):
其中 p = 1 , 2 p=1,2 p=1,2 表示从矩阵 d c t A \mathsf{dct}A dctA 中选取的第 p p p 个中频系数对, c p 1 c_{p1} cp1 表示第 p p p 个中频系数对中的一个中频系数。本文共选取 2 2 2 对中频系数,第一对中频系数的坐标分别为 ( 3 , 1 ) (3,1) (3,1) 和 ( 2 , 2 ) (2,2) (2,2),第二对中频系数的坐标分别为 ( 1 , 3 ) (1,3) (1,3) 和 ( 2 , 3 ) (2,3) (2,3)。
说明:貌似 z i g - z a g \mathsf{zig \text{-} zag} zig-zag 一词只是为了形容形状,中文翻译过来是 “之字形”。
步骤四(核心步骤)
说明:已知 S W i SW_i SWi 是一个二进制序列,其中的一个比特被称为水印位 w p w_p wp。
依次从 S W i SW_i SWi 中获取水印位 w p w_p wp,然后使用如下公式调整 d c t A \mathsf{dct}A dctA 中的系数 ( c p 1 , c p 2 ) (c_{p1},c_{p2}) (cp1,cp2):
c p 1 ′ = { s i g n c ( c p 1 ) × ( a v g − Δ × T i ) , i f w p = 1 a n d D i f f ≤ T i s i g n c ( c p 1 ) × ( a v g + Δ × T i ) , i f w p = 0 a n d D i f f > − T i c'_{p1}= \left\{\begin{matrix} \mathrm{signc}(c_{p1})\times (avg-\Delta\times T_i),\ \mathrm{if}\ w_p=1\ \mathrm{and}\ \mathrm{Diff} \le T_i \\ \\ \mathrm{signc}(c_{p1})\times (avg+\Delta\times T_i),\ \mathrm{if}\ w_p=0\ \mathrm{and}\ \mathrm{Diff} > -T_i \end{matrix}\right. cp1′