在隐写术中, 至少显著位(LSB)替代方法嵌入秘密位的比特从盖介质的地方,例如,图像像素。 在一些方法中, 离散小波变换 (DWT)的拍摄图像和秘密比特被嵌入在DWT系数,之后,逆trasform被用于重建隐秘图像。
然而,DWT产生浮动系数和用于LSB替换方法是必需的整数值。 我读过的大多数论文使用的2D Haar小,但是,他们都没有在他们的方法清楚。 我已经看到在低和高通滤波器的术语(浮动变换)的变换被定义,或采取的总和与一对值差,或平均和平均差,等等。
更明确地说,无论是在正向或反向转换(但不一定都取决于所使用的公式),最终浮动号码将出现。 我不能让他们的系数,因为替代将无法工作,因为图像需要整数值的存储,我不能让他们为重建像素。
例如,让我们考虑一对像素, A
和B
作为一维数组。 低频系数由总和所定义,即, s = A + B
,并且由差分高频系数,即, d = A - B
。 然后,我们可以重构原始像素与B = (s - d) / 2
和A = s - B
。 然而,随着系数任何位操作后, s - d
可能甚至不再和浮点值将出现在重建的像素。
对于2D的情况下,一维变换分别为行和列施加,所以最终的分割由4将某处发生。 这可能会导致值随浮余.00,.25,0.50和0.75。 我只碰到过一个文件 ,其解决了这个问题。 其余的都是在他们的方法非常模糊,我很难复制它们。 然而,DWT已被广泛的隐秘图像来实现。
我的问题是,因为一些我读过的文学一直没有启发,这怎么可能? 如何才能使用转换,介绍浮点值,但全隐写方法需要整数?
已经为我工作的一个解决方案是使用整数小波变换,其中一些还称其为提升方案 。 对于Haar小波,我已经看到了它定义为:
s = floor((A + B) / 2)
d = A - B
而对于逆:
A = s + floor((d + 1) / 2)
B = s - floor(d / 2)
在整个过程中的所有值都是整数。 它的工作原理的原因是因为该公式包含有关两个偶数和奇数部分像素/系数的信息,所以从向下取整不丢失信息。 即使一个修改系数,然后采取逆变换,重建像素仍然是整数。
在Python实例执行:
import numpy as np
def _iwt(array):
output = np.zeros_like(array)
nx, ny = array.shape
x = nx // 2
for j in xrange(ny):
output[0:x,j] = (array[0::2,j] + array[1::2,j])//2
output[x:nx,j] = array[0::2,j] - array[1::2,j]
return output
def _iiwt(array):
output = np.zeros_like(array)
nx, ny = array.shape
x = nx // 2
for j in xrange(ny):
output[0::2,j] = array[0:x,j] + (array[x:nx,j] + 1)//2
output[1::2,j] = output[0::2,j] - array[x:nx,j]
return output
def iwt2(array):
return _iwt(_iwt(array.astype(int)).T).T
def iiwt2(array):
return _iiwt(_iiwt(array.astype(int).T).T)
有些语言已经用于此目的的内置功能。 例如,使用Matlab的lwt2()
和ilwt2()
用于2D升降方案小波变换。
els = {'p',[-0.125 0.125],0};
lshaarInt = liftwave('haar','int2int');
lsnewInt = addlift(lshaarInt,els);
[cAint,cHint,cVint,cDint] = lwt2(x,lsnewInt) % x is your image
xRecInt = ilwt2(cAint,cHint,cVint,cDint,lsnewInt);
其中IWT用于隐秘图像的制品的例子是拉加,KB等。 人(2008)的鲁棒图像自适应隐写使用整数小波。