system: [SYSTEM]

user: 2. 预备知识 把图像分成互不重叠的大小为 n × n 像素块 A t ( t = 1 ， 2 ， ⋯ ， N ) ，其中N表示像素块的总块数。每个像素块中含有 n × n 像素 F t ( i ， j ) ，其中 i ， j ( 0 ≤ i ， j ≤ n − 1 ) 分别表示像素 F t ( i ， j ) 在像素块中所在的行与列。则索引函数定义如下： F t ( i ， j ) = [ n × ( i mod n ) + ( n − 1 ) × ( j mod n ) ] mod n 2 (1) 由于本文信息隐藏算法中参考像素是由索引函数决定的，攻击者如果没有索引函数，很难知道哪个像素是参考像素，信息隐藏算法更具有安全性。确定了参考像素，然后计算其与周围像素的像素差。 例如， F t ( 0，0 ) ， F t ( 0，1 ) ， F t ( 1，0 ) ， F t ( 1，1 ) 是 2 × 2 像素块中的四个像素，有 F t ( 0 ， 0 ) = [ 2 × ( 0 mod 2 ) + ( 2 − 1 ) × ( 0 mod 2 ) ] mod 2 2 = 0 F t ( 0 ， 1 ) = [ 2 × ( 0 mod 2 ) + ( 2 − 1 ) × ( 1 mod 2 ) ] mod 2 2 = 1 F t ( 1 ， 0 ) = [ 2 × ( 1 mod 2 ) + ( 2 − 1 ) × ( 0 mod 2 ) ] mod 2 2 = 2 F t ( 1 ， 1 ) = [ 2 × ( 1 mod 2 ) + ( 2 − 1 ) × ( 1 mod 2 ) ] mod 2 2 = 3 通过公式(1)，就能确定每个像素块中哪个像素作为参考像素。将像素值的范围[0，255]划分成7个连续子区间 W i ， j ，即 W = { W i ， j = [ l i ， j ， u i ， j ] } = { [ 0 ， 3 ] ， [ 4 ， 7 ] ， [ 8 ， 15 ] ， [ 16 ， 31 ] ， [ 32 ， 63 ] ， [ 64 ， 127 ] ， [ 128 ， 255 ] } (2) 每个子区间 W i ， j 的上、下界、宽度分别为 l i ， j ， u i ， j 和 w i ， j 其中宽度 w i ， j = u i ， j − l i ， j + 1 。找到像素差的绝对值 | D t ( i ， j ) | 所属的子区间 W i ， j ，如果 | D t ( i ， j ) | ∈ [ l i ， j ， u i ， j ] 。从二进制信息比特流截取 k t ( i ， j ) = ⌊ log 2 w i ， j ⌋ 位秘密信息，把 k t ( i ， j ) 的二进制秘密信息比特流转换成十进制下的数 m t ( i ， j ) 。 2.1. 秘密信息嵌入算法 首先由索引函数选择每个子像素块中哪个像素作为参考像素，然后计算参考像素与其周围的其它像素的差，根据像素差所处的范围值确定嵌入秘密信息的长度。详细的嵌入过程如下： 1) 把图像分成互不重叠的大小为 n × n 的像素块 A t ( t = 1 ， 2 ， ⋯ ， N ) ，其中t是表示像素块所在的位置。 2) 如果 F t ( i ， j ) = t mod n 2 ，则选择 A t ( i ， j ) 作为参考像素，然后根据下面的公式将参考像素值量化 B ¯ t = ⌊ B t n 2 ⌋ × n 2 (3) 3) 计算每像素块中量化后的参考像素跟其周围像素值的差 D t ( i ， j ) = A t ( i ， j ) − B ¯ t (4) A t ( i ， j ) 表示第 t 块像素块中的像素值。 4) 若 | D t ( i ， j ) | 属于 [ l i ， j ， u i ， j ] ，则嵌入的秘密信息的比特数为 k t ( i ， j ) = log 2 ( u i ， j − l i ， j + 1 ) 。 5) 应用余函数减少像素差的变化，降低图像的失真率。对每个像素差除以 2 k t ( i ， j ) ，得到相应的余数，这样所得到的余数比原来的像素差的值要小，从而降低因嵌入秘密信息引起的图像失真率。具体计算公式如下： R t ( i ， j ) = F ( D t ( i ， j ) ) = D t ( i ， j ) mod 2 k t ( i ， j ) (5) 6) 从二进制比特流中读取 k t ( i ， j ) 位秘密信息，把其转换成十进制的数 m t ( i ， j ) 。例如，如果截取的二进制比特流是101，转换成十进制数为5。 7) 用秘密信息的值减去余数得新差值 H t ( i ， j ) = m t ( i ， j ) − R t ( i ， j ) (6) 令 G t ( i ， j ) = 2 k t ( i ， j ) − | H t ( i ， j ) | (7) 其中 m t ( i ， j ) 是十进制的秘密信息值。 8) 为了嵌入信息后减少对图像的失真，应用下列的改变像素值的最佳嵌入算法： 情况1： R t ( i ， j ) > m t ( i ， j ) 和 | H t ( i ， j ) | ≤ 2 k t ( i ， j ) − 1 和 A t ( i ， j ) < B ¯ t ; A ′ t ( i ， j ) = { A t ( i ， j ) + H t ( i ， j ) ，     如 果   | D t ( i ， j ) + H t ( i ， j ) | ≤ 2 k t ( i ， j ) + 1 − 1 A t ( i ， j ) + G t ( i ， j ) ，       如 果 | D t ( i ， j ) + H t ( i ， j ) | > 2 k t ( i ， j ) + 1 − 1 (8) 情况2： R t ( i ， j ) > m t ( i ， j ) 和 | H t ( i ， j ) | ≤ 2 k t ( i ， j ) − 1 和 A t ( i ， j ) ≥ B ¯ t ; A ′ t ( i ， j ) = A t ( i ， j ) + H t ( i ， j ) (9) 情况3： R t ( i ， j ) > m t ( i ， j ) 和 | H t ( i ， j ) | > 2 k t ( i ， j ) − 1 和 A t ( i ， j ) < B ¯ t ; A ′ t ( i ， j ) = { A t ( i ， j ) + H t ( i ， j ) ，     如 果   | D t ( i ， j ) + G t ( i ， j ) | < 2 k t ( i ， j ) A t ( i ， j ) + G t ( i ， j ) ，         如 果 | D t ( i ， j ) + G t ( i ， j ) | ≥ 2 k t ( i ， j ) (10) 情况4： R t ( i ， j ) > m t ( i ， j ) 和 | H t ( i ， j ) | > 2 k t ( i ， j ) − 1 和 A t ( i ， j ) ≥ B ¯ t ; A ′ t ( i ， j ) = { A t ( i ， j ) + G t ( i ， j ) ，           如 果 | D t ( i ， j ) + G t ( i ， j ) | ≤ 2 k t ( i ， j ) + 1 − 1 A t ( i ， j ) + H t ( i ， j ) ，         如 果 | D t ( i ， j ) + G t ( i ， j ) | > 2 k t ( i ， j ) + 1 − 1 (11) 情况5： R t ( i ， j ) ≤ m t ( i ， j ) 和 H t ( i ， j ) ≤ 2 k t ( i ， j ) − 1 和 A t ( i ， j ) ≤ B ¯ t ; A ′ t ( i ， j ) = { A t ( i ， j ) − G t ( i ， j ) ，       如 果 | D t ( i ， j ) + H t ( i ， j ) | < 2 k t ( i ， j ) A t ( i ， j ) + H t ( i ， j ) ，       如 果 | D t ( i ， j ) + H t ( i ， j ) | ≥ 2 k t ( i ， j ) (12) 情况6： R t ( i ， j ) ≤ m t ( i ， j ) 和 H t ( i ， j ) ≤ 2 k t ( i ， j ) − 1 和 A t ( i ， j ) > B ¯ t ; A ′ t ( i ， j ) = A t ( i ， j ) + H t ( i ， j ) (13) 情况7： R t ( i ， j ) ≤ m t ( i ， j ) 和 H t ( i ， j ) > 2 k t ( i ， j ) − 1 和 A t ( i ， j ) ≤ B ¯ t ; A ′ t ( i ， j ) = { A t ( i ， j ) − G t ( i ， j ) ，       如 果 | D t ( i ， j ) − G t ( i ， j ) | ≤ 2 k t ( i ， j ) + 1 − 1 A t ( i ， j ) + H t ( i ， j ) ，       如 果 | D t ( i ， j ) − G t ( i ， j ) | > 2 k t ( i ， j ) + 1 − 1 (14) 情况8： R t ( i ， j ) ≤ m t ( i ， j ) 和 H t ( i ， j ) > 2 k t ( i ， j ) − 1 和 A t ( i ， j ) > B ¯ t ; A ′ t ( i ， j ) = { A t ( i ， j ) + H t ( i ， j ) ，       如 果 | D t ( i ， j ) − G t ( i ， j ) | < 2 k t ( i ， j ) A t ( i ， j ) − G t ( i ， j ) ，           如 果 | D t ( i ， j ) − G t ( i ， j ) | ≥ 2 k t ( i ， j ) (15) 9) 像素调整。少数情况下，通过上述的秘密信息嵌入，像素值 A ′ t ( i ， j ) 超出像素值的范围[0，255]，即 A ′ t ( i ， j ) < 0 或 A ′ t ( i ， j ) > 255 。如果出现这种情况， A ′ t ( i ， j ) 通过下列最优方式进行调整，寻找符合下列四个条件的像素值 A t * ( i ， j ) 替换 A ′ t ( i ， j ) ： a) D t * ( i ， j ) 和 D t ( i ， j ) 属于同一个范围，其中 | D t ( i ， j ) | 和 | D t * ( i ， j ) | 分别表示嵌入信息前后两像素的差， b) 0 ≤ A t * ( i ， j ) ≤ 255 ； c) ( A t * ( i ， j ) − A t ( i ， j ) ) 2 最小； d) ( A t * ( i ， j ) − B ¯ t ) mod 2 k t ( i ， j ) = m t ( i ， j ) 。自此，实现了在该像素上嵌入秘密信息。 10) 重步骤(2)-(9)，直到所有的秘密信息都被嵌入到图像中，得到嵌入后的载密图像。 2.2. 秘密信息提取算法 这一小节描述提取秘密信息的详细过程。先把载密图像分成互不重叠的大小为n × n的像素块，每像素块的处理跟嵌入过程一样：按索引函数确定像素块中的参考像素，然后计算参考像素与其周围像素的差，由差值所处的范围值确实嵌入的秘密信息的比特位。详细的提取信息过程如下： 1) 把载密图像分成互不重叠大小为 n × n 的像素块 A t * ( t = 1 ， 2 ， ⋯ ， N ) ； 2) 如果 F t * ( i ， j ) = t mod n ，则选择 A t * ( i ， j ) 作为参考素 B t * ，对参考像素值进行量化 B ¯ t * = ⌊ B t * n 2 ⌋ × n 2 (16) 3) 计算每像素块中参考像素量化后的值与其周围像素值的差 D t * ( i ， j ) = A t * ( i ， j ) − B ¯ t * (17) 其中 A t * ( i ， j ) 表示第t块像素块中除参考像素外其它的像素值； 4) | D t * ( i ， j ) | 属于 [ l i ， j ， u i ， j ] ，则嵌入的秘密信息的比特数为 k t * ( i ， j ) = ⌊ log 2 ( u i ， j − l i ， j + 1 ) ⌋ ； 5) 计算像素值差 D t * ( i ， j ) 与 k t * ( i ， j ) 所得的余数就是嵌入的秘密信息 m t * ( i ， j ) m t * ( i ， j ) = D t * ( i ， j ) mod 2 k t * ( i ， j ) (18) 最后，把 m t * ( i ， j ) 转换成 k t * ( i ， j ) 比特位的二进制信息流，于是，嵌入到载体中的秘密信息被提取了。