Цифровой водяной знак на основе дискретного Wavelet-преобразовании
Тема защиты авторских прав в нынешнее время стала максимально востребованной, появилось множество способов не допустить нелицензионного тиражирования, Один из таких способов — цифровой водяной знак (англ. Digital Watermarking, ЦВЗ), добавление к исходной информации (цифровому изображению, видео- или звуковому файлу) некоторых скрытых маркеров, устойчивых к каким-либо атакам. В основном Digital Watermarking используют для определения факта нарушения авторских прав, но, конечно же, сфера применения цифровых водяных знаков этим не ограничивается. Например, цифровые водяные знаки могут использоваться для передачи секретной информации, проверки подлинности электронных документов и в ряде других приложений. Во многих приложениях и сайтах внедрена защита видеопродукции при помощи ЦВЗ, где происходит построение множества идентификационных меток, внедрение одной из меток в видеопоследовательность, извлечение метки из пиратской копии видеопоследовательности, поиск участников коалиции по извлеченной метке.
Давайте рассмотрим внедрение и проверку цифрового водяного знака на примере работы алгоритма дискретного wavelet-преобразования для изображения.
Дискретное wavelet-преобразование
Дискретное wavelet-преобразование раскладывает сигнал на взаимно ортогональный набор вейвлетов (математических функций, позволяющих анализировать различные частотные компоненты данных), что является основным отличием от непрерывного вейвлет-преобразования. Вейвлет может быть сконструирован из функции масштаба, которая описывает свойства его масштабируемости. Ограничение состоит в том, что функция масштаба должна быть ортогональна своим дискретным преобразованиям, что подразумевает некоторые математические ограничения на них:
где — фактор масштаба (у нас он будет равен 2), более того, площадь под функцией должна быть нормализована, и функция масштабирования должна быть ортогональна, поэтому:
После введения некоторых дополнительных условий (поскольку вышеупомянутые ограничения не приводят к единственному решению) мы можем получить результат этих уравнений, т.е. конечный набор коэффициентов которые определяют функцию масштабирования, а также вейвлет. Набор вейвлетов затем формирует ортонормированный базис, который мы используем для разложения, обычно только несколько коэффициентов будут ненулевыми, что упрощает расчёты.
Схема работы алгоритма
Давайте рассмотрим схему работы на растровом изображении.
Зададим двумерный массив , имеющий размеры , обозначающий яркость конкретной координаты по одному из цветов (— яркость пикселя с координатами для всех )
Далее давайте рассмотрим -й шаг: создадим четыре массива (модель двумерного wavelet-преобразования):
Для всех .
Здесь означает отклонение яркости точки с координатами от среднего арифметического яркостей двух соседних по горизонтали точек и (рис. 1),
означает отклонение яркости точки с координатами от среднего арифметического яркостей двух соседних по горизонтали точек и (рис. 2),
означает отклонение яркости точки с координатами от среднего арифметического яркостей четырех соседних точек. (рис. 3)
Рис. 2Рис. 1Рис. 3
Далее мы «обновляем» точки массива :
Обновление нужно для того, чтобы средняя энергия изображения (его средняя яркость) была равна средней яркости исходного массива. Очевидно, что изображение , и как следствие, однозначно восстанавливается. Стоит также заметить, что каждый раз, когда мы вычисляем новые элементы , , , мы можем больше не запоминать те, что использовали для их вычисления (, , ). Это значит, что наш алгоритм не привлекает дополнительной памяти.
Выполняем наши шаги до того момента, пока наш массив не будет размера . То есть, теперь мы имеем и наборы , , ; , , ;…; , ,
Заметим, что , , влияют только на пикселей, таким образом, каждый шаг соответствует разной степени резкости (детализации). Например, для каждый коэффициент влияет на всего лишь 3 пикселя, если то на 5 и т д.
Попробуем теперь внедрить наш ЦВЗ в изображение, для этого мы выбираем — «заметность» водяного знака, резкость - шаг и массив , или , на котором и будем введен водяной знак.
Пусть для определенности это будет , тогда заменим его на массив , такой что:
Здесь , и как следствие , имеет тот же размер, что и . можно назвать коэффициентами wavelet-преобразования другого изображения .
Произведем обратное wavelet-преобразование и получим новое изображение, назовем его .
Теперь, давайте поговорим о том, как автор, имея только , или еще проще сами коэффициенты , их легко вычислит, зная все остальное), параметр , в какой массив внедрялся и заметность , сможет проверить наличие ЦВЗ.
Зная исходное изображение, можно проверить, помечено ли наше изображение, просто сравнивая разность коэффициентов и массив .
Теперь рассмотрим случай, когда нам не известно изображение-оригинал и, по этим же причинам . Тогда мы не можем точно сказать, использован ли тут ЦВЗ, но можем оценить вероятность его нахождения. Для этого мы предположим, что наше изображение осмысленное, то есть не является хаотичным распределением яркостей пикселей. Соответственно массив , предположительно несущий в себе водяной знак и напрямую связанный с изображением, тоже являет собой некоторую упорядоченную структуру. Значит, что до добавления в него был более не менее упорядоченной структурой, значит, что нам надо для (с точностью до коэффициента ) ввести меру упорядоченности — сложности. Вполне подходит вариация функции. Действительно, чем меньше резких перепадов функции, тем меньше ее вариация. Для двумерного массива введем аналог вариации:
Давайте поймем, как можно применить данную функцию: как и описывалось ранее, если — результат нанесения водяного знака (), то он будет более сложным, чем , значит будет выполняться:
βαVar (W_k),» src=«https://habrastorage.org/getpro/habr/upload_files/f24/2f8/1df/f242f81df7aa494fe3782689692cb047.svg» />
где значение будет соответствовать максимально возможному увеличению вариации при добавлении к массиву , а -параметр подбирается экспериментально.
Заключение
Стоит сказать, что приведенный алгоритм на основе дискретного wavelet-преобразования лишь один способ из многих, которыми можно осуществить внедрение цифрового водяного знака и проверить наличие такового в файле. Например, для текста можно использовать кодирование со сдвигом строки, для изображения — водяные знаки домена DСT, а для звука — кодирование с наименьшей значимостью. Преимущество приведенного выше алгоритма заключается в том, что такие водяные знаки устойчивы по отношению к сжатию JPEG (для изображений) и некоторым другим искажения, вот почему данный метод остается актуальным и по сей день.
В скором времени я дополню статью кодом, реализующий приведенный выше алгоритм.