By robust, I mean resistant to common image transforms (reversal, crop a non-multiple of 8 pixels off and recompress, blur, solarize to 64 levels, then interpolate, and sharpen, change compression levels, optimize for download, scale...

Suppose you are trying to embed ownership/copyright info in an image. How do you do so in a way that survives all of the above singly or in combination? And has sufficient parameters that it is non-obvious that it has been done.

You need to build in a lot of redundancy, and error correction systems. But that is short of workable system.

Ideally such a system is somewhat holographic in that other systems could also put data into an image, without compromising the original data.

Edit: While the use mention is one similar to watermarking, I normally consider a watermark to be visible in the image. Digital rights management has the addition of having various hidden attributes/data.

This came up in a discussion about Facebook putting tracking codes in images. In their case using an uncommonly used metadata field. So take it a step further: Can you put data into an image that is not readily recoverable without knowing a bunch of specific additional information, and that is proof against normal image operations.

Keeping the data secret is easy. Encrypt before encoding the ciphertext into the image. Keeping the data recoverable is harder. I'm inquiring about the latter.

  • 4
    $\begingroup$ You're probably going to need to place a limit on the amount of malleability that the scheme must support; It's clearly impossible for it to support truly arbitrary transformations (e.g. zeroing the pixels out, truncating the image completely, etc). Defining that limit that may be challenging, ideally someone else has already done so already and published the result - speaking of, have you tried looking for any pre-existing results in this area? $\endgroup$
    – Ella Rose
    Jul 15 '19 at 1:28
  • 3
    $\begingroup$ How much data do you need to encode, and how stealthy does it need to be? An extreme example would be reducing the brightness the image by 90% to encode a binary 1, and increasing the brightness of the image by 90% to encode a binary 0. That would encode a single bit and would survive nearly any transformation. $\endgroup$
    – forest
    Jul 15 '19 at 6:11
  • 1
    $\begingroup$ @forest Some "artistic" filters would still be able to muck that one up, e.g. ones that make an outline of the image :) Ella is right, without boundaries this question cannot be answered. And with specific boundaries this becomes more of a personal consultancy, as it would only benefit this one usage. $\endgroup$
    – Maarten Bodewes
    Jul 15 '19 at 8:37
  • 2
    $\begingroup$ @MaartenBodewes You're right, and you could probably make it more robust by applying the inverse transformation to one half of the image, but it would still be theoretically possible to erase. $\endgroup$
    – forest
    Jul 15 '19 at 8:38
  • 4
    $\begingroup$ Looking up on Google search is that most articles talk about steganography and watermarking, so although you've tagged and titled your question steganography, it seems that your use case is specificly about watermarking, which is related to but doesn't seem to be part of steganography. $\endgroup$
    – Maarten Bodewes
    Jul 15 '19 at 9:00

The field of research that deals with robustness is watermarking. There are hundreds of techniques to deal with the different existing attacks (resize, crop, recompress, etc).

Currently there is no system that overcomes all possible attacks. But there are some approaches that solve a lot of attacks under certain circumstances.

For example, this is a classic paper for solving RST (Rotation, Scale, Translation) attacks.

But I think the most robust current methods are based on zero-bit schemes. Check, for example, this paper.

I suggest that you define the most important attacks for your application, and try to find papers that deal with these attacks. But it is quite complicated to implement these techniques for non-experts in the field.

The alternative is to try to deal with the different attacks by using simple techniques. For example, use a copy of the original image for mark extraction. This keeps things easy.

Use a DCT transform of the image. Then hide information by modifying the DCT coefficients. You can recover the original DCT coefficients from the original image and the mark from the differences between the original and the marked image.

This resists the resizing process to some degree. If the user makes a crop, use the original image to find the same crop in the original image. Then you can recover the mark as before. The same procedure can be used to deal with rotation.

This approach has many problems, but it provides you with an easy starting point.

  • 2
    $\begingroup$ A watermark is a piece of information. Sometimes information is measured in bits. Can you give any indications of the number of bits a watermark can contain, and remain 'robust'? It's ratio to the host image must be quite low..? $\endgroup$
    – Paul Uszak
    Jul 15 '19 at 11:05
  • 2
    $\begingroup$ @PaulUszak A watermark generally must contain enough information to be unique. This could range from anywhere between 8 and 64 bits, depending on how many images need to be watermarked. They need only to be identifiers that an external database will map to more detailed information. $\endgroup$
    – forest
    Jul 16 '19 at 7:28
  • 2
    $\begingroup$ @forest they also must contain enough information that they can be distinguished from non-watermarks - i.e. be collision resistant. $\endgroup$
    – OrangeDog
    Jul 16 '19 at 12:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.