Como posso adicionar marca d'água invisível às imagens na linha de comando?

11

Similar questão aqui, mas para Tex -documento. A Imagemagick mostra formas de marca d'água aqui , mas não como fazê-lo da maneira mais invisível possível. Eu atualmente apenas ofuspo alguns elementos funcionais em fotos tão extremamente difíceis de remover, sem distorcer a própria imagem. Existe alguma ferramenta de linha de comando para adicionar marca d'água invisível para imagens, algo como verificar com o microscópio, talvez, mas ainda legível? Eu tenho uma enorme árvore de imagens (de variedade muito diferente, então a marca d'água deve adotar para env etc) - alguma ferramenta de linha de comando para adicionar marcas d'água rapidamente invisível em todas as fotos?

    
por Community 07.02.2012 / 01:59

2 respostas

8

Acredito que o que você está procurando é a esteganografia , uma maneira de ocultar uma mensagem em um conteúdo aparentemente inocente .

Não parece haver muitas ferramentas para isso no Linux, mas outguess 1 e o steghide 2 fariam o que você quisesse. O openstego é outro (com uma interface de linha de comando).

Exemplo com outguess , copiei / colei o texto da sua pergunta em 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

Imagem de origem (de Tux.svg ):

Imagemcomsuaperguntaoculta:

As imagens são diferentes se você olhar de perto, mas é como se a segunda tivesse sido gerada com um nível de compactação JPEG mais alto. O fato de que o texto completo da sua pergunta está misturado (e protegido por senha) não é visível visualmente de forma alguma. Quanto menor a mensagem oculta, menos visualmente diferentes as imagens serão. (Não consigo distinguir visualmente entre o original e um arquivo com "Copyright YOU 2012" incorporado.)

1 antigo, mas constrói muito bem.
2 não compila com um compilador C ++ moderno, um são necessários alguns ajustes na origem.

    
por 12.02.2012 / 13:31
0

Deve haver uma maneira de inserir uma marca d'água bastante estável na imagem, o DigiMark faz isso, por exemplo. nos filtros do Photoshop - então por que uma ferramenta de linha de comando também não deveria ser capaz de fazer isso?

Isso não é uma solução, mas uma idéia de como isso pode funcionar ... se você criar uma marca d'água invisível em uma imagem branca em branco e mesclar o código resultante em qualquer outra imagem, o leitor de marca d'água poderá extrair o wartermark de a imagem resultante novamente - mesmo quando modificada / cortada ou impressa e fotografada novamente.

Portanto, a adição em lote de um determinado código de gradiente de marca d'água não será o problema - em vez disso, encontrar um algoritmo de assinatura e um sotware apropriados para extrair a marca d'água.

    
por 12.02.2012 / 10:28