Как можно использовать 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) Надежная адаптивная стеганография изображений с использованием целочисленных вейвлетов.

Другие вопросы по тегам