如何将DWT用于LSB替代隐写术

Ret*_*i43 6 steganography dwt haar-wavelet wavelet-transform

在隐写术中,最低有效位(LSB)替换方法将秘密位嵌入来自覆盖介质的位的位置,例如图像像素.在一些方法中,采用图像的离散小波变换(DWT)并且将秘密比特嵌入DWT系数中,之后使用逆变换来重建隐秘图像.

但是,DWT产生浮点系数,对于LSB替换方法,需要整数值.我读过的大多数论文都使用2D Haar Wavelet,但他们的方法并不清楚.我已经看到变换是根据低通和高通滤波器(浮点变换)定义的,或者是取对值的和与差,或者平均值和平均值之差等.

更明确地,无论是正向变换还是反向变换(但不一定取决于所使用的公式),最终将出现浮点数.我不能将它们用于系数,因为替换不起作用,我不能将它们用于重建的像素,因为图像需要整数值来存储.

例如,让我们考虑一对像素,AB作为一维数组.低频系数由和,即s = A + B高频系数和差值定义,即d = A - B.然后我们可以用B = (s - d) / 2和重建原始像素A = s - B.然而,在任何与系数混合的位之后,s - d可能不再是偶数,并且浮点值将出现用于重建的像素.

对于2D情况,1D变换分别应用于行和列,因此最终会在某处出现4除法.这可能导致具有浮动余数.00,.25,.50和.75的值.我只遇到过一篇解决这个问题的论文.其余的方法都很模糊,我很难复制它们.然而,DWT已经广泛用于图像隐写术.

我的问题是,既然我读过的一些文献没有启发,那怎么可能呢?如何使用引入浮点值的变换,但整个隐写方法需要整数?

Ret*_*i43 8

一个对我有用的解决方案是使用整数小波变换,其中一些也称为提升方案.对于Haar小波,我看到它被定义为:

s = floor((A + B) / 2)
d = A - B
Run Code Online (Sandbox Code Playgroud)

反之:

A = s + floor((d + 1) / 2)
B = s - floor(d / 2)
Run Code Online (Sandbox Code Playgroud)

整个过程中的所有值都是整数.它起作用的原因是因为公式包含有关像素/系数的偶数和奇数部分的信息,因此不会因向下舍入而丢失信息.即使一个修改系数然后进行逆变换,重建的像素仍然是整数.

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)
Run Code Online (Sandbox Code Playgroud)

某些语言已经具有用于此目的的内置函数.例如,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);
Run Code Online (Sandbox Code Playgroud)

使用IWT进行图像隐写的文章示例是Raja,KB等.al(2008)使用整数小波的鲁棒图像自适应隐写术.