Как можно использовать DWT в стеганографии с заменой LSB?
В стеганографии метод замещения младшего значащего бита (LSB) внедряет секретные биты вместо битов из покрывающего носителя, например пикселей изображения. В некоторых способах выполняется дискретное вейвлет-преобразование (DWT) изображения, и секретные биты внедряются в коэффициенты DWT, после чего обратная траектория используется для восстановления стего-изображения.
Однако DWT создает коэффициенты с плавающей запятой, и для метода замены LSB требуются целочисленные значения. В большинстве статей, которые я читал, используется 2D-вейвлет Хаара, но они не совсем понимают свою методологию. Я видел преобразование, определяемое в терминах фильтров нижних и верхних частот (преобразования с плавающей запятой), или принимая сумму и разность значений пары, или среднюю и среднюю разницу и т. Д.
Более конкретно, в прямом или обратном преобразовании (но не обязательно в обоих в зависимости от используемых формул) в конечном итоге появятся числа с плавающей точкой. У меня не может быть их для коэффициентов, потому что замена не будет работать, и у меня не может быть их для восстановленных пикселей, потому что изображение требует целочисленных значений для хранения.
Например, давайте рассмотрим пару пикселей, A
а также B
как одномерный массив. Низкочастотный коэффициент определяется суммой, т.е. s = A + B
и высокочастотный коэффициент по разности, т.е. d = A - B
, Затем мы можем восстановить исходные пиксели с B = (s - d) / 2
а также A = s - B
, Тем не менее, после того, как любой бит вертится с коэффициентами, s - d
может даже не быть и значения с плавающей точкой появятся для восстановленных пикселей.
Для двумерного случая 1D-преобразование применяется отдельно для строк и столбцов, поэтому в конечном итоге где-то произойдет деление на 4. Это может привести к значениям с остатками с плавающей точкой.00, .25, .50 и.75. Я только сталкивался с одной бумагой, которая обращается к этой проблеме. Остальные очень расплывчаты в своей методологии, и я изо всех сил пытаюсь их воспроизвести. Тем не менее, DWT широко применяется для стеганографии изображений.
Мой вопрос таков: поскольку некоторая литература, которую я читал, не была поучительной, как это возможно? Как можно использовать преобразование, которое вводит значения с плавающей точкой, но весь метод стеганографии требует целых чисел?
1 ответ
Одно решение, которое сработало для меня, - это использование целочисленного вейвлет-преобразования, которое некоторые также называют схемой подъема. Для вейвлета Хаара я видел его определяемым как:
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 использовался для стеганографии изображения, является Raja, KB et. al (2008) Надежная адаптивная стеганография изображений с использованием целочисленных вейвлетов.