24.08.2015

Invisible watermarks


Embedding browser session details on the fly into JPGs (IP, timestamp, …) is an interesting idea as it allows tracing pictures whenever they surface somewhere else on the internet. A quick reverse image search at Google, TinEye or Image Raider may help to get some timeline, while finding the initial leak remains a challenge.

Commercial watermarking systems like Digimarc do not help so much here. Also some own experiments using stegano php classes have not been very successful as the resulting jpgs weren’t very resistant to scaling or further compression. Even worse, the IP could not always be detected in scans of printed pictures.

test1

I have therefore written a method based on dE where dE=1.0 is the smallest color difference the human eye can see. So what I basically do is to create a mask with some large numbers on the canvas.

test2

One or two color channel within the mask are tweaked by a 1-2% shift of the brightness. This is invisible to the human eye but  if I do a bit-by-bit subtraction using the original image, I can find my watermark.

test3

(watermarked picture)

It is still an open question if this method resists current benchmarking tools. Of course it is neither redundant nor does it avoid  particular sensitive regions. As a quick and dirty method, however, it may have some value.