Метод квантования изображения
К методам скрытия в пространственной области можно также отнести метод квантования изображения [3, 82], основанный на межпиксельной зависимости, которую можно описать некоторой функцией . В простейшем случае можно вычислить разницу между смежными пикселями ; и (или и ) и задать ее как параметр функции : , где — дискретная аппроксимация разницы сигналов .
Поскольку — целое число, а реальная разница — действительное число, то возникают ошибки квантования . Для сильно коррелированных сигналов эта ошибка близка к нулю: .
При данном методе скрытие информации производится путем корректировки разностного сигнала . Стеганоключ представляет собой таблицу, которая каждому возможному значению ставит в соответствие определенный бит, например:
-4 | -3 | -2 | -1 | ||||||
bi |
Для скрытия i-го бита сообщения вычисляется разница . Если при этом bi, не соответствует секретному биту, который необходимо скрыть, то значение заменяется ближайшим , для которого такое условие выполняется. При этом соответствующим образом корректируются значения интенсивностей пикселей, между которыми вычислялась разница Извлечение секретного сообщения осуществляется согласно значению , соответствующему разнице .
Рассмотрим пример программы, реализующей метод квантования изображения
Шаг1
Исходные данные — стандартные.
Шаг 2
Стеганоключ вычисляем по модулям (М.28) и (М.29). При этом модуль (М.28) возвращает все возможные разницы сигналов (от -255 до +255), а модуль (М 29) — значения бит, соответствующие этим разницам.
Значения bi в данном случае рассчитываются на основании массива красной цветовой составляющей. При этом для каждой колонки массива R рассчитывается сумма по модулю 2 составляющих ее элементов с булевым прибавлением к результату суммирования единицы при каждом третьем элементе. В конце модуля полученной вектор b расширяется на длину вектора . Таким образом, элементы массива b носят псевдослучайный характер. Фрагменты сформированного стеганоключа показаны на рис. 5.15.
л- | b= | ||||
-255 | |||||
-254 | |||||
-253 | |||||
-252 | |||||
-2 | |||||
-1 | |||||
Рис. 6.15. Фрагменты стеганоключа
Шаг3
Выполним развертывание массива контейнера С (массив синей цветовой составляющей) в вектор, используя модуль (М.16). Зададим стартовый индекс элемента полученного вектора, начиная с которого будет производиться встраивание бит , сообщения (например, ).
Для расчета величины шага (псевдослучайного интервала) используем модуль (М.15). Пусть при этом К := 8.
Шаг 4
Алгоритм встраивания реализует модуль (М.30). Формирование вектора двоичных данных из строки символов аналогично представленному в (М.21) (при этом, однако, необходимо заменить на ).
Для каждого -го бита сообщения выполняется вычисление индекса z элемента вектора контейнера Cv. Рассчитывается разница между соседними пикселями Cvzи Cvz-1 Внутренним циклом производится поиск соответствующего значения разницы в векторе . В случае обнаружения, переменной присваивается значение индекса i, который соответствует данной разнице в .
Если значение не соответствует текущему биту скрываемого сообщения, то выполняется поиск ближайшего индекса, при котором biравняется биту сообщения. Поиск производится вниз (L) и вверх (Н) от индекса .
Предварительное присвоение переменным и значения ±1000 обеспечивает невозможность дублирования предыдущих значений , если движение вниз или вверх от не привело к выполнению поставленного условия (последнее возможно при нахождении индекса слишком близко к нижней или верхней границе вектора b). После того как значения и найдены, выбирается то из них, которое ближе к начальному значению .
Интенсивность пикселя контейнера Svz равна увеличенной на величину интенсивности смежного пикселя Svz-1. Если данное увеличение приводит к выходу значения интенсивности цвета за пределы диапазона [0; 255], то, наоборот, интенсивности смежного пикселя Svz-1 присваивается значение интенсивности пикселя Svz, уменьшенной на величину ). После встраивания последнего бита сообщения внешний цикл прерывается.
Проводим обратное свертывание вектора Sv в матрицу, имеющую размерность первичного массива С (М.7). Получаем массив S.
Шаг 5
При извлечении сообщения предварительно формируется стеганоключ — векторы и b*. Программные модули при этом .идентичны (М.28) и (М.29). Массив контейнера S* развертывается в лектор Sv* (подобно (М. 16)).
Шаг 6
Модуль извлечения (М.31) вычисляет разницу интенсивностей смежных пикселей Sv*z и Sv*z-1 и выполняет поиск соответствующей разницы в кодовой таблице .
Значение бита , соответствующее данной разнице, присваивается текущему элементу вектора М*. В конце модуля вектор двоичных данных преобразуется к символьную строку. Полученные при вычислении визуального искажения результаты сведены в табл. 5.1 (стр. 125).