Comment puis-je ajouter un filigrane invisible aux images en ligne de commande?

12

Question similaire ici, mais pour Tex- document. Imagemagick montre des façons de filigraner ici mais pas comment le faire aussi invisible que possible. Pour l'instant, je ne fais que masquer certains éléments fonctionnels dans des photos si difficiles à supprimer, sans déformer l'image elle-même. Existe-t-il un outil en ligne de commande pour ajouter un filigrane invisible aux images, quelque chose comme vérifier au microscope peut-être mais toujours lisible? J'ai un énorme arbre d'images (d'une variété très différente, le filigrane devrait donc l'adopter, etc.) - un outil en ligne de commande pour ajouter des filigranes rapidement de manière invisible sur chaque photo?

Communauté
la source
2
Je pense que votre exigence d'invisibilité est en contradiction avec le but du tatouage. Si le filigrane est invisible pour un spectateur normal, il peut probablement être supprimé en effectuant quelques conversions JPEG sur l'image, car par sa conception, JPEG supprime les détails que les gens ne manqueront pas.
Kyle Jones
@KyleJones: qui avait besoin du JPEG comme format? Imagemagick ne contient que des exemples, mon objectif est de brouiller les filigranes en images en les cachant un peu comme changer un point dans Tex.
2
Mon point est que la conversion JPEG ou tout autre algorithme de compression d'image avec perte serait en mesure de supprimer un tel filigrane, pas que l'image devait nécessairement commencer comme JPEG.
Kyle Jones
Le commentaire selon lequel cela n'a aucun but est faux et erroné. Bien sûr, le «filigrane invisible» est un oxymore, mais c'est un raccourci utile pour le «message stéganographique» abstrus - qui sera presque toujours corrigé automatiquement en «sténographique» (c'est-à-dire littéralement en sténographie). Voici un document d'information sur les cas d'utilisation: lia.deis.unibo.it/Courses/RetiDiCalcolatori/Progetti98/Fortini/… et un exemple d'implémentation: howtoforge.com/tutorial/…
michael

Réponses:

9

Je crois que ce que vous cherchez, c'est de la stéganographie , un moyen de cacher un message dans un contenu par ailleurs innocent.

Il ne semble pas y avoir une multitude d'outils pour cela sur Linux, mais outguess 1 et steghide 2 feraient ce que vous voulez. openstego en est un autre (avec une interface de ligne de commande).

Exemple avec outguess, j'ai copié / collé le texte de votre question dans 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

Image source (de Tux.svg ):

JPG ordinaire, pas de filigrane

Image avec votre question cachée à l'intérieur:

fichier avec des informations cachées

Les images sont différentes si vous regardez de près, mais c'est à peu près comme si la seconde avait été générée avec un niveau de compression JPEG plus élevé. Le fait que le texte complet de votre question soit mélangé (et protégé par mot de passe) n'est pas visible du tout visuellement.
Plus le message caché est petit, moins les images seront visuellement différentes. (Je ne peux pas distinguer visuellement l'original d'un fichier avec "Copyright YOU 2012" intégré.)

1 vieux, mais construit très bien.
2 ne se construit pas avec un compilateur C ++ moderne, quelques corrections de source sont nécessaires.

Tapis
la source
OpenStego a une CLI, j'ai édité votre réponse et je l'ai liée.
awendt
0

Il doit y avoir un moyen d'incorporer un filigrane assez stable dans l'image, DigiMark le fait par exemple dans les filtres Photoshop - alors pourquoi un outil en ligne de commande ne devrait-il pas être capable de faire aussi bien?

Ce n'est pas une solution, mais une idée de la façon dont cela peut fonctionner ... si vous créez un filigrane invisible sur une image blanche vierge et que vous mélangez le code résultant dans une autre image, le lecteur de filigrane est capable d'extraire le repère de l'image résultante à nouveau - même une fois modifié / recadré ou imprimé et photographié à nouveau.

Donc, en fait, l'ajout par lots d'un code de dégradés de filigrane donné ne sera pas le problème - plutôt de trouver un algorithme de signature approprié et un logiciel pour extraire le filigrane.

Marco Tarsia
la source