Как я могу добавить невидимый водяной знак на изображения в командной строке?

12

Подобный вопрос здесь, но для Tex- документа. Imagemagick показывает способы водяных знаков здесь, но не как сделать это как можно более незаметным. В настоящее время я просто запутываю некоторые функциональные элементы в фотографии, которые крайне сложно удалить, не искажая само изображение. Есть ли какой-нибудь инструмент командной строки для добавления невидимого водяного знака на изображения, что-то вроде проверки с помощью микроскопа, но все же читабельное? У меня есть огромное дерево изображений (очень разное, поэтому водяной знак следует использовать в env и т. Д.) - какой-нибудь инструмент командной строки, позволяющий быстро и незаметно добавлять водяные знаки на каждую фотографию?

Сообщество
источник
2
Я думаю, что ваше требование невидимости противоречит цели водяных знаков. Если водяной знак невидим для обычного зрителя, его, вероятно, можно удалить, выполнив пару преобразований JPEG на изображении, так как благодаря дизайну JPEG сглаживает детали, которые люди не пропустят.
Кайл Джонс
@KyleJones: кому нужен JPEG в качестве формата? Imagemagick содержит только примеры, моя цель состоит в том, чтобы запутать водяные знаки в изображения, скрывая их, как изменение точки в Tex.
2
Я хочу сказать, что преобразование JPEG или любой другой алгоритм сжатия изображений с потерями мог бы удалить такой водяной знак, а не то, что изображение обязательно должно было начинаться как JPEG.
Кайл Джонс
Комментарий о том, что это не имеет смысла, неправильный и ошибочный. Конечно, «невидимый водяной знак» - это оксюморон, но это полезное сокращение для заумного «стеганографического сообщения», которое почти всегда будет автоматически исправляться в «стенографический» (т. Е. Буквально сокращение). Вот справочная информация по вариантам использования: lia.deis.unibo.it/Courses/RetiDiCalcolatori/Progetti98/Fortini/… и один пример реализации: howtoforge.com/tutorial/…
майкл

Ответы:

9

Я считаю, что вы ищете стеганографию , способ скрыть сообщение в невинно выглядящем контенте.

Похоже, что в Linux не так много инструментов для этого, но outguess 1 и steghide 2 сделали бы то, что вы хотите. openstego - еще один (с интерфейсом командной строки).

Например outguess, я скопировал / вставил текст вашего вопроса в Q.txt:

$ ../src/outguess/outguess -k 'Unix&Linux' -d Q.txt Tux.jpg Tux_steg.jpg
Reading Tux.jpg....
JPEG compression quality set to 75
Extracting usable bits:   10126 bits
Correctable message size: 5008 bits, 49.46%
Encoded 'Q.txt': 4592 bits, 574 bytes
Finding best embedding...
    0:  2274(49.2%)[49.5%], bias  2008(0.88), saved:     2, total: 22.46%
    3:  2269(49.1%)[49.4%], bias  2007(0.88), saved:     3, total: 22.41%
   13:  2268(49.0%)[49.4%], bias  1977(0.87), saved:     3, total: 22.40%
   62:  2237(48.4%)[48.7%], bias  1992(0.89), saved:     7, total: 22.09%
   78:  2216(47.9%)[48.3%], bias  1964(0.89), saved:    10, total: 21.88%
78, 4180: Embedding data: 4592 in 10126
Bits embedded: 4624, changed: 2216(47.9%)[48.3%], bias: 1964, tot: 10119, skip: 5495
Foiling statistics: corrections: 1437, failed: 746, offset: 198.494881 +- 300.529142
Total bits changed: 4180 (change 2216 + bias 1964)
Storing bitmap into data...
Writing Tux_steg.jpg....
$ ../src/outguess/outguess -k 'Unix&Linux' -r Tux_steg.jpg out.txt
Reading Tux_steg.jpg....
Extracting usable bits:   10126 bits
Steg retrieve: seed: 78, len: 574
$ diff out.txt Q.txt 
$ echo $?
0

Исходное изображение (из Tux.svg ):

обычный JPG, без водяных знаков

Изображение с вашим вопросом, спрятанным внутри:

файл со скрытой информацией

Изображения выглядят по-разному, если вы посмотрите внимательно, но похоже, что второе было сгенерировано с более высоким уровнем сжатия JPEG. Тот факт, что полный текст вашего вопроса смешан (и защищен паролем), вообще не заметен визуально.
Чем меньше скрытое сообщение, тем меньше будут визуально отличаться изображения. (Я не могу визуально отличить оригинал от файла со «Copyright YOU 2012».)

1 старый, но строит просто отлично.
2 не собирается с современным компилятором C ++, необходимо несколько исправлений исходного кода.

Мат
источник
OpenStego имеет CLI, я отредактировал ваш ответ и связал его с ним.
Авенд
0

Должен быть способ встроить достаточно устойчивый водяной знак в изображение, DigiMark делает это, например, в фильтрах Photoshop - так почему же инструмент командной строки не сможет это делать?

Это не решение, но идея, как это может работать ... если вы создадите невидимый водяной знак на чистом белом изображении и смешаете полученный код с любым другим изображением, программа чтения водяных знаков сможет извлечь маркер из полученного изображения снова - даже после изменения / обрезки или печати и фотографирования снова.

Таким образом, на самом деле пакетное добавление заданного кода градиентов водяных знаков не будет проблемой - скорее, найти подходящий алгоритм подписи и программное обеспечение для извлечения водяного знака.

Марко Тарсия
источник