Метод квантования изображения

К методам скрытия в пространственной области можно также отнести метод квантования изображения [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).