¿Cómo puedo agregar una marca de agua invisible a las imágenes en la línea de comandos?

12

Pregunta similar aquí pero para el documento Tex . Imagemagick muestra formas de marcar el agua aquí, pero no cómo hacerlo de la manera más invisible posible. Actualmente, solo ofusco algunos elementos funcionales en fotos tan extremadamente difíciles de eliminar, sin distorsionar la imagen en sí. ¿Existe alguna herramienta de línea de comandos para agregar marcas de agua invisibles a las imágenes, algo así como verificar con microscopio tal vez pero aún legible? Tengo un árbol masivo de imágenes (de una variedad muy diferente, por lo que la marca de agua debería adoptar para el entorno, etc.): ¿alguna herramienta de línea de comandos para agregar marcas de agua rápidamente de forma invisible en cada foto?

Comunidad
fuente
2
Creo que su requisito de invisibilidad está en desacuerdo con el propósito de la marca de agua. Si la marca de agua es invisible para un espectador normal, entonces probablemente se pueda eliminar haciendo un par de conversiones JPEG en la imagen, ya que, por diseño, JPEG suaviza los detalles que las personas no perderán.
Kyle Jones
@KyleJones: ¿quién requirió JPEG como formato? Imagemagick contiene solo ejemplos, mi objetivo es ofuscar marcas de agua en imágenes ocultándolas un poco como cambiar un punto en Tex.
2
Mi punto es que la conversión de JPEG o cualquier otro algoritmo de compresión de imagen con pérdida podría eliminar dicha marca de agua, no es que la imagen necesariamente tuviera que comenzar como JPEG.
Kyle Jones
El comentario de que esto no tiene ningún propósito es incorrecto y equivocado. Claro, "marca de agua invisible" es un oxímoron, pero es una abreviatura útil para el "mensaje esteganográfico", que casi siempre se autocorrece en "estenográfico" (es decir, literalmente, abreviatura). Aquí hay un trasfondo sobre casos de uso: lia.deis.unibo.it/Courses/RetiDiCalcolatori/Progetti98/Fortini/… y un ejemplo de implementación: howtoforge.com/tutorial/…
michael

Respuestas:

9

Creo que lo que estás buscando es esteganografía , una forma de ocultar un mensaje en contenido de aspecto inocente.

No parece haber muchas herramientas disponibles para esto en Linux, pero el outguess 1 y steghide 2 harían lo que quisieras. openstego es otro (con una interfaz de línea de comandos).

Ejemplo con outguess, copié / pegué el texto de su pregunta en 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

Imagen de origen (de Tux.svg ):

JPG simple, sin marca de agua

Imagen con su pregunta oculta en su interior:

archivo con información oculta

Las imágenes son diferentes si se mira de cerca, pero es más o menos como si la segunda se hubiera generado con un nivel de compresión JPEG más alto. El hecho de que el texto completo de su pregunta esté mezclado (y protegido con contraseña) no se nota visualmente en absoluto.
Cuanto más pequeño sea el mensaje oculto, menos visualmente serán diferentes las imágenes. (No puedo distinguir visualmente entre el original y un archivo con "Copyright YOU 2012" incrustado).

1 viejo, pero se construye muy bien.
2 no se compila con un compilador C ++ moderno, son necesarias algunas reparaciones de origen.

Estera
fuente
OpenStego tiene CLI, edité su respuesta y la vinculé.
awendt
0

Debe haber una manera de incrustar una marca de agua bastante estable en la imagen, DigiMark lo hace, por ejemplo, en los filtros de Photoshop, entonces, ¿por qué una herramienta de línea de comandos no debería ser capaz de hacerlo también?

Esto no es una solución, sino una idea de cómo puede funcionar ... si crea una marca de agua invisible en una imagen blanca en blanco y combina el código resultante en cualquier otra imagen, el lector de marcas de agua puede extraer la marca de la imagen resultante nuevamente, incluso cuando se modificó / recortó o se imprimió y se volvió a fotografiar.

Por lo tanto, en realidad, agregar lotes de un determinado código de gradientes de marca de agua no será el problema, sino encontrar un algoritmo de firma y un software adecuados para extraer la marca de agua.

Marco Tarsia
fuente