system: [SYSTEM]

user: 4. 基于CAVLC拖尾系数的信息隐藏算法 分析3.2中CAVLC编码过程可知，只有第二步中拖尾系数符号编码时不使用码表，且修改拖尾系数符号不会影响其他编码步骤。这保证了信息嵌入前后码流总比特数不变。因此，本算法通过选择I帧、P帧中合适的4 × 4亮度DCT块，在其CAVLC编码过程第二步的拖尾系数符号与秘密信息间建立映射来嵌入信息。 4.1. 待嵌信息预处理 Logistic混沌序列是源于人口统计的非线性动力学系统，是一个已经被证明安全性的完全成熟的映射 [ 10 ] ，对初始值和参数及其敏感。为了提升信息隐藏方法的安全性，本算法首先利用logistic混沌序列对待嵌信息进行加密预处理。其系统方程如下： x ( k + 1 ) = μ ∗ x ( k ) ∗ [ 1 − x ( k ) ] (1) 其中，u是控制参数， k ∈ [ 0 ， 1 ， ⋯ ， n ] 。当满足 0 < x ( 0 ) < 1 ，且 3.5699456 < u ≤ 4 时可以认为此系统是混沌系统。 具体预处理过程为，设待嵌秘密信息序列 S = { s i | i = ( 1 ， 2 ， 3 ， ⋯ ， n ) ， s i ∈ { 0 ， 1 } } ，则 k ∈ [ 0 ， 1 ， ⋯ ， n − 2 ] 。设定 x ( 0 ) 及控制参数u的值，并带入式(1)迭代 n − 1 次，可得到logistic混沌序列 。为实现对待嵌信息的加密，需要把序列L的各个值映射为数值0或1。设置阈值 T = 0.5 ，映射关系如下所示， L ′ = { 0 l i < T 1 l i ≥ T (2) 则根据式(2)可得映射之后的序列为 L ′ = { l ′ i | i = ( 1 ， 2 ， 3 ， ⋯ ， S l ) ， l ′ i ∈ { 0 ， 1 } } 。最后将序列 L ′ 与待嵌信息序列S对应位置进行异或，得到加密后的信息序列 S ′ = { s ′ i | i = ( 1 ， 2 ， 3 ， ⋯ ， n ) ， s ′ i ∈ { 0 ， 1 } } ， S ′ 即为预处理后用于隐藏的信息序列。 4.2. 嵌入块的选择 4.2.1 . 候选块 H.264的帧内预测包含4 × 4和16 × 16两种亮度预测模式，对于16 × 16模式的块，在4 × 4DCT变换之后，还需要将其直流系数组成新的4 × 4矩阵，并进行Hadamard变换及量化。CAVLC过程中也需要对这些直流系数块编码。由于直流系数在低频域，更改系数将对视频主观质量造成较大影响，因此，本算法嵌入信息时不选用亮度直流系数块。另外，在拖尾系数数目为零的块无法嵌入信息。所以，基于人眼特性及以上原则，用于嵌入信息的候选块应满足以下三个条件：一、4 × 4DCT亮度块；二、非直流系数块；三、拖尾系数数目不为零。 4.2.2 . 宿主块 宿主块，即实际用于隐藏的候选块。当选取所有的候选块进行信息嵌入时，视频图像有较大失真，因此本算法设定参数E来限制用于隐藏信息的宿主块。例如，当E = 12时，则将每12个候选块分为一组，只在分组的第一个块隐藏信息。E取其他值时操作同上，通过调节E的大小能很好的保证视频质量。 4.3. 映射规则 为了充分利用CAVLC拖尾系数符号冗余且减少秘密信息嵌入带来的视频失真，本算法在拖尾系数个数为1-2的块中只修改最高频的符号位来嵌入1比特秘密信息。当拖尾系数数目为3时，引入矩阵编码技术，至多修改1比特数据嵌入2比特秘密信息。 已知待嵌秘密信息序列为 S ′ = { s ′ i | i = ( 1 ， 2 ， 3 ， ⋯ ， n ) ， s ′ i ∈ { 0 ， 1 } } ，以逆zig-zag顺序扫描的拖尾符号分别为 c 1 ， c 2 ， c 3 (如果存在)，则对于不同拖尾系数数目的宿主块，分以下两种情况： 1) 当拖尾数目为1~2时，只调制最高频拖尾系数符号 c 1 来嵌入1比特信息，映射规则如下， c ′ 1 = { c 1 if   ( c 1 mod 2 ) = s ′ i c 1 ¯ if   ( c 1 mod 2 ) ≠ s ′ i (3) 其中， c 1 ¯ 表示对 c 1 取反， c ′ 代表嵌秘之后的最高频拖尾系数， s ′ i 表示将要嵌入的第i比特信息。 2) 当拖尾数目为3时，采用矩阵编码技术隐藏。其通用形式是 n = 2 k − 1 ，即用n个原始数据比特负载k比特秘密信息，对数据的更改最多也只有1比特，用三元组表示为 ( 1 ， n ， k ) 。在这里，选取 n = 3 ， k = 2 ，即用3个原始拖尾符号负载2比特秘密信息。具体映射规则如表1所示。 其中，符号“ ⊕ ”表示异或运算。若当前有2比特待嵌秘密信息 s ′ i s ′ i + 1 = 00 ，3个原始拖尾符号 c 1 = 0 ， c 2 = 0 ， c 3 = 1 ，则有以下等式： c 1 ⊕ c 2 = 0 ， c 2 ⊕ c 3 = 1 (4) 根据表1的映射规则可知，调制 ，即可实现秘密信息的嵌入。 4.4. 信息隐藏步骤 算法的整体隐藏框架如图2所示，在编码端，首先利用logistic混沌序列对伪随机秘密信息进行加密，后根据4.2中嵌入条件确定宿主块位置，并通过判断拖尾系数的数目，选定映射规则将信息嵌入拖尾系数符号位中，得到隐藏信息后的比特流。 4.4.1 . 信息嵌入过程 具体的信息隐藏方案如下： 1) 对待嵌秘密信息进行logistic混沌加密，以增强算法的安全性； 图2. 信息隐藏框架 Table 1 Secret information mapping rule 秘密信息 原始拖尾系数符号关系(逆序) 需要调制的拖尾系数符号 s ′ i s ′ i + 1 = 00 c 1 ⊕ c 2 = 0 ， c 2 ⊕ c 3 = 0 不变 c 1 ⊕ c 2 = 0 ， c 2 ⊕ c 3 = 1 c 3 c 1 ⊕ c 2 = 1 ， c 2 ⊕ c 3 = 0 c 1 c 1 ⊕ c 2 = 1 ， c 2 ⊕ c 3 = 1 c 2 s ′ i s ′ i + 1 = 01 c 1 ⊕ c 2 = 0 ， c 2 ⊕ c 3 = 0 c 3 c 1 ⊕ c 2 = 0 ， c 2 ⊕ c 3 = 1 不变 c 1 ⊕ c 2 = 1 ， c 2 ⊕ c 3 = 0 c 1 ⊕ c 2 = 1 ， c 2 ⊕ c 3 = 1 c 1 s ′ i s ′ i + 1 = 10 c 1 ⊕ c 2 = 0 ， c 2 ⊕ c 3 = 0 c 1 c 2 c 1 ⊕ c 2 = 1 ， c 2 ⊕ c 3 = 0 不变 c 1 ⊕ c 2 = 1 ， c 2 ⊕ c 3 = 1 c 3 s ′ i s ′ i + 1 = 11 c 1 ⊕ c 2 = 0 ， c 2 ⊕ c 3 = 0 c 2 c 1 ⊕ c 2 = 0 ， c 2 ⊕ c 3 = 1 c 1 c 1 ⊕ c 2 = 1 ， c 2 ⊕ c 3 = 0 c 3 c 1 ⊕ c 2 = 1 ， c 2 ⊕ c 3 = 1 不变 表1. 秘密信息映射规则 2) 设定嵌入参数E，并标记分组中宿主块位置； 3) 判断当前块是否为候选块，若否，则对当前块正常编码并继续执行当前步骤； 4) 根据参数E判断当前块是否为宿主块，若否，则对当前块正常编码并返回步骤3； 5) 判断当前宿主块拖尾系数数目是否为3，若是，则基于表1的映射规则进行信息嵌入，否则利用式(3)嵌入信息； 6) 判断秘密信息是否嵌入完毕，若是，则嵌入结束，否则返回步骤2。 4.4.2. 信息提取过程 信息提取过程不需要完全解码，只解码拖尾系数符号即可。具体提取过程如下： 1) 设定与编码端相同的参数E，并标记分组中E个宿主块位置，然后根据秘钥生成混沌序列L； 2) 判断当前块是否为宿主块，若否，则正常解码当前块并继续执行此步骤； 3) 判断当前宿主块拖尾系数数目是否为3，若是，则基于表1映射规则提取信息，否则直接提取最高频拖尾系数为秘密信息； 4) 判断是否所有秘密信息都已提取完毕，若否，则返回步骤2； 5) 将步骤1生成的混沌序列L与提取的秘密信息对应位置逐个进行异或，得到原始信息。