在时空域的最低比特位替换方法,容易被噪声掩盖,在有损压缩后也容易丢失。
于是尝试把信息隐藏在载体的重要位置,这样只要载体不被破坏到无法使用的程度,隐藏的信息都能被保留,考虑在变换域隐藏信息。
常用的变换域方法:离散余弦变换(DCT) , 离散小波变换(DWT) , 离散傅里叶变换(DFT) 等。
图像压缩标准(JPEG)的核心 其实是--------二维DCT变换
在DCT变换域中隐藏信息,可以有效的抵抗有损压缩,通过DCT变换可以将一个矩阵(或2维数组)的能量集中在左上角的少数几个系数上。
用f表示像素值的数组,f(i,j)表示第i行第j列的值,进过DCT变换后定义一个新的数组F(u,v)表示第u行第v列的值。
N-1 N-1
二维DCT变换的公式(N x N矩阵):F(u,v)=C(u)C(v) ∑ ∑ f(i,j) cos[(i+0.5)xπ xu /N ] cos[(j+0.5) xπx v/N]
i=0 j=0
N-1 N-1
二维DCT逆变换的公式(N x N 矩阵) : f(i,j)= ∑ ∑ C(u)C(v)F(u,v)cos[(i+0.5)x π x u /N ] cos[(j+0.5) x π x v /N]
u=0 v=0
sqrt(1/N) x=0
其中C(x)={
sqrt(2/N) x!=0
f(i,j)经过DCT变换后得到F(u,v) ,F(0,0)为直流系数,称DC系数,其他的为交流系数,称AC系数
例 把原始数据的每一项都先减去128再进行的计算,图像的数据值必须减去128,是因为DCT公式所接受的数字范围是-128到127之间。
把图像分为8 x 8的像素块进行计算(N=8)
原始数据矩阵(8 x 8) 代入公式DCT变换后
139 144 149 153 155 155 155 155 235.6 -1.0 -12.1 -5.2 2.1 -1.7 -2.7 1.3
144 151 153 156 159 156 156 156 -22.6 -18.5 -6.2 -3.2 -2.9 -0.1 0.4 -1.2
150 155 160 163 158 156 156 156 -10.9 -9.3 -1.6 1.5 0.2 -0.9 -0.6 -0.1
159 161 162 160 160 159 159 159 -7.1 -1.9 0.2 1.5 0.9 -0.1 0.0 0.3
160 161 162 162 155 155 155 161 -0.6 -0.8 1.5 1.6 -0.1 -0.7 0.6 1.3
161 161 161 160 157 157 157 157 1.8 -0.2 -1.6 -0.3 -0.8 1.5 1.0 -1.0
162 162 161 163 162 157 157 157 -1.3 -0.4 -0.3 -1.5 -0.5 1.7 1.1 -0.8
162 162 161 161 163 158 158 158 -2.6 1.6 -3.8 -1.8 1.9 1.2 -0.6 -0.4
为了减少非0系数的幅度,增加0系数,我们对DCT变换后的系数进行量化,量化会造成压缩过程中的图片质量的下降,人眼对于图片的亮度的敏感程度大于对于图片色度的敏感程度。
色度量化表 17 18 24 48 99 99 99 99 亮度量化表: 16 11 10 16 24 40 51 61
18 21 26 66 99 99 99 99 12 12 14 19 26 58 60 55
24 26 56 99 99 99 99 99 14 13 16 24 40 57 69 56
47 66 99 99 99 99 99 99 14 17 22 29 51 87 80 62
99 99 99 99 99 99 99 99 17 22 37 56 68 109 103 77
99 99 99 99 99 99 99 99 24 35 55 64 81 104 113 92
99 99 99 99 99 99 99 99 49 64 78 87 103 121 120 101
99 99 99 99 99 99 99 99 72 92 95 98 112 100 103 99
将经过DCT变换后的矩阵除以量化表中对应位置的值(这里使用亮度量化表)后得到量化后的矩阵:
15 0 -1 0 0 0 0 0
-2 -1 0 0 0 0 0 0
-1 -1 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
采用Z形排列后可以更好的压缩数据,能够把一个 8 x 8 (N x N)的矩阵变换成一个 1 x 64(1 x N^2) 的矢量
Z排列:
排列后变成了:15 0 -2 -1 -1 -1 0 0 -1 0 0...(全是0) 数据比较集中, 左上角的低频部分在排列后靠前,高频部分排列后靠后,中间则是中频部分。能够让我们更好的叠加秘密信息。
我们可以以一定的方式挑选一些中频系数,在这些系数中添加秘密信息。
如果我们直接修改中频系数将系数变为秘密信息数据,是可以的,不过提取秘密信息数据时,要使用原图对照。
我们可以伪随机的选择矩阵中的两个位置(U1,V1)和(U2,V2).
如果(U1,V1)>(U2,V2) 代表隐藏了1
如果(U1,V1)<(U2,V2)代表隐藏了0,
如果与需求隐藏的数据不符,可以修改系数或者交换2位置的系数,使其符合。应该注意,如果2个系数相差太大,对图像影响较大,因选择比较相近的值。
提取秘密信息时,只需知道随机种子,得到相同的伪随机数,然后根据相应位置得到隐藏的值。。。。