Here we provide some supplementary information & data corresponding to the following publication:
M. Urvoy, D. Goudia, F. Autrusseau, "Perceptual DFT watermarking with improved detection and robustness to geometrical distortions", in IEEE Transactions on Information Forensics and Security, IEEE-TIFS, 9(7), pp. 1108-1119, ISSN 1556-6013, DOI, Jul. 2014. pdf

Overview of the supplementary information:


A web app is available here for trying out both the embedding and detection.

Important note: This web-app may encounter some issues for some particular image dimensions. The source code has been modified, but opencv 3.0.0 needs to be installed on the server (waiting for the 3.0.0 release)...

Original images

Three databases were used in this work.

  • Database "Da": the 9 images used during the subjective experiment. These images can be dowloaded here.
  • Database "Db": A selection of 250 color images, used for the robustness experiments. These can be downloaded here.
  • A third database was used for the Print & Scan experiment. Among the 16 color images of this Db, 9 are from Da, and the remaining 7 images are standard color images available here.

Watermarked images

  • The 9 watermarked images from "Da" are here.
  • 250 marked images from "Db" can be download here.
  • The 7 watermarked image for the Print & Scan experiment are here.

Attacked images

The Print & scanned images are available for several scanning resolutions:
Note: once the image are scanned, an "ImageMagick" script was used to automatically crop the images, the script is as follows:

mogrify -format png *.png mogrify -fuzz 75% -trim +repage
-resize 512x512! *.png
The Printer was a DELL 2335dn.
The scanner was a Lexmark CX410de.

Subjective experiment

The XLS spreadsheet used to analyse the subjective data is available here.

37 human observers were enrolled for this subjective experiment.

The URL for the subjective database is here.

A Hierarchical clustering, with Ward’s minimum variance as linkage method, was then performed in order to extract possible outliers. The figure below shows the obtained dendrogram. When pruning the tree at an average inter-group distance of 0.15, one can separate the observers into two groups G1 and G2. On the one hand, G2 is obtained by grouping those observers whose average clustering distance is higher than 0.15 (dashed branches in the figure below), and is thus comprised of observers {3, 20, 23, 14, 36, 35}. On the other hand, G1 is obtained by grouping remaining observers whose votes are less distant. So, the 6 observers from G2 were discarded in our analysis.

Processing time

This XLS spreadsheet provides the processing time for both embedding and detection (with and without I/O: reading & writing images). The figure below depicts these processing times.

Varying the watermark frequency modulation

The embedder was tested in various frequency ranges. The figure below displays the results.
Various Freq embedding


Pseudo-Random Number Generator

In order to minimize the risk of false-detections (an erroneous message being successfully detected), the binary mark is generated by means of Pseudo Random Number Generator (PRNG) so that near-identical messages end up into binary watermarks different enough to be easily distinguished at detection. Let M1..N be a N-bits sequence to be embedded (e.g. binary code for ASCII text), where N N is a multiple of 32 (N = 32g, g N). M1..N is first split into g 32-bits sequences, each of which is used to seed one of g Multiply-With-Carry PRNGs Gi, 0 < i < g + 1. The final M-bits watermark W1..M is then built iteratively, 32 bits per 32 bits, until the desired watermark length M is reached. At each iteration t = 1, . . . T , the following two steps are performed: (1) each PRNG Gi issues its next 32 bits random binary number R(t) = Gi(t); (2) the next watermark bits i are then computed as

W(t) =W(t1)|| ( R1(t) R2(t) ⊕···⊕Rg(t) )

where || and are respectively the concatenation and the exclusive-or operators and W(0) is the empty sequence. Step 1 provides watermark randomness, while step 2 makes sure that each water- mark bit depends on all generators, hence the entire embedded message.

Thanks to this random watermark generation process, the proposed scheme is compliant to Kerckhoffs’ principle, which states that ”a cryptosystem should be secure even if everything about the system, except the key, is public knowledge”. Here, even if the proposed watermarking scheme is publicly available, the secret information is hold by the initial N-bits sequence, which cannot be obtained from the random watermark.

Subjective Experiment on printed material

8 expert observers were asked to perform the experiment. Each of them was successively presented 32 pairs of printed images (in a random order). Each pair featured a print of the original image and a print of the watermarked image, randomly arranged. The 16 images from the P&S experiment (see Sec. IX in the submitted paper) were each shown twice, thus resulting in 32 pairs. For each pair, they were asked: (1) whether they could see a visible difference between the two prints; (2) regardless of the answer to the first question, to identify one of the two images as being watermarked.

Under the viewing conditions used in the subjective experiment involving a display (see Sec. VII in the submitted manuscript), no observer could spot the watermark. For this reason, the visibility of the printed watermark was assessed under enhanced viewing conditions: the viewing distance was reduced to 3 times the height of the image. Observers were authorized to further reduce the viewing distance when answering to the second question (the forced choice), down to one time the height of the image. Finally, observers were authorized to examine the images and to freely manipulate the prints as long as they wanted, instead of the limited assessment duration of 10 seconds used in the experiment of Sec. VII.

The Table below shows the obtained results for each image.

Img Ds1 Ds2 Ds3 Ds4 Ds5 Ds6 Ds7 Da1 Da2 Da3 Da4 Da5 Da6 Da7 Da8 Da9 Avg
Q1 6.3 0.0 6.3 0.0 0.0 6.3 0.0 6.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.6
Q2 62.5 43.8 68.8 62.5 37.5 62.5 62.5 56.3 50.0 50.0 56.3 62.5 37.5 31.3 31.3 75.0 53.1
Q1 denotes the average number of times that the watermark was spotted in the considered image (as a percentage of the total number of observations).
denotes the average percentage of correct 2AFC choices for the considered image.

At a viewing distance of 3 times the height of the image (i.e. 43.5cm), most observers did not report any visible distortions (besides printing defaults). Sole two observers respectively reported one and three distortions that were due to the proposed watermarking scheme. Overall, the watermark was detected in only 1.6% of the observations.

When forced to choose between either one or the other image, it appears that the average detection rate is of 53.17%. Such a figure indicate that their choice was nearly random, which further indicates that observers generally could not spot the watermark, even at very small viewing distances (as low as 14.5cm). Furthermore, the inserted mark appears to be far under the visibility threshold (which is reached for a detection rate of 75% in 2AFC experiments). It is also important to note that the distortions due to the printing process are much more visible than those due to the watermarking process.

This XLS spreadsheet provides the results of this subjective test.

Stirmark's set of attacks

The Stirmark command was set as follows (here for the Lena image):
StirMark -Tlena lena.ppm The following 90 Stirmark attacks were experimented (they are listed in the order of appearance of Figs. 5 & 8, from top to bottom):

  1. StirMark with randomisation and bending
  2. Shearing - x-direction  5.00%y-direction  5.00%   
  3. Shearing - x-direction  5.00%y-direction  0.00%   
  4. Shearing - x-direction  1.00%y-direction  1.00%   
  5. Shearing - x-direction  1.00%y-direction  0.00%   
  6. Shearing - x-direction  0.00%y-direction  5.00%   
  7. Shearing - x-direction  0.00%y-direction  1.00%   
  8. Scaling 2.00   
  9. Scaling 1.50   
  10. Scaling 1.10   
  11. Scaling 0.90   
  12. Scaling 0.75   
  13. Scaling 0.50   
  14. Rotation  90.00 with cropping and scaling
  15. Rotation  45.00 with cropping and scaling
  16. Rotation  30.00 with cropping and scaling
  17. Rotation  15.00 with cropping and scaling
  18. Rotation  10.00 with cropping and scaling
  19. Rotation  5.00 with cropping and scaling
  20. Rotation  0.25 with cropping and scaling
  21. Rotation  0.50 with cropping and scaling
  22. Rotation  0.75 with cropping and scaling
  23. Rotation  1.00 with cropping and scaling
  24. Rotation  2.00 with cropping and scaling
  25. Rotation -0.25 with cropping and scaling
  26. Rotation -0.50 with cropping and scaling
  27. Rotation -0.75 with cropping and scaling
  28. Rotation -1.00 with cropping and scaling
  29. Rotation -2.00 with cropping and scaling
  30. Rotation  90.00 with cropping
  31. Rotation  45.00 with cropping   
  32. Rotation  30.00 with cropping   
  33. Rotation  15.00 with cropping   
  34. Rotation  10.00 with cropping   
  35. Rotation  5.00 with cropping   
  36. Rotation  0.25 with cropping   
  37. Rotation  0.50 with cropping   
  38. Rotation  0.75 with cropping   
  39. Rotation  1.00 with cropping   
  40. Rotation  2.00 with cropping   
  41. Rotation -0.25 with cropping   
  42. Rotation -0.50 with cropping   
  43. Rotation -0.75 with cropping   
  44. Rotation -1.00 with cropping   
  45. Rotation -2.00 with cropping   
  46. Color reduction 
  47. Change aspect ratio - scale.x  1.00 scale.y  1.20   
  48. Change aspect ratio - scale.x  1.00 scale.y  1.10   
  49. Change aspect ratio - scale.x  1.00 scale.y  0.90   
  50. Change aspect ratio - scale.x  1.00 scale.y  0.80   
  51. Change aspect ratio - scale.x  1.20 scale.y  1.00   
  52. Change aspect ratio - scale.x  1.10 scale.y  1.00   
  53. Change aspect ratio - scale.x  0.90 scale.y  1.00   
  54. Change aspect ratio - scale.x  0.80 scale.y  1.00   
  55. General linear transformation [[ 1.013  0.008][ 0.011 1.008]]
  56. General linear transformation [[ 1.007  0.010][ 0.010 1.012]]
  57. General linear transformation [[ 1.010  0.013][ 0.009 1.011]]
  58. JPEG compression 90%     
  59. JPEG compression 80%     
  60. JPEG compression 70%     
  61. JPEG compression 60%     
  62. JPEG compression 50%     
  63. JPEG compression 40%     
  64. JPEG compression 35%     
  65. JPEG compression 30%     
  66. JPEG compression 25%     
  67. JPEG compression 20%     
  68. JPEG compression 15%     
  69. JPEG compression 10%     
  70. FMLR Attack
  71. Flip
  72. Cropping 75%   
  73. Cropping 50%   
  74. Cropping 25%   
  75. Cropping 20%   
  76. Cropping 15%   
  77. Cropping 10%   
  78. Cropping 5%   
  79. Cropping 2%   
  80. Cropping 1%   
  81. Sharpening 3x3
  82. Gaussian filtering 3x3
  83. 4x4 Median Filtering
  84. 3x3 Median Filtering
  85. 2x2 Median Filtering
  86. Remove 5 row(s) and 17 column(s) at regular intervals
  87. Remove 5 row(s) and 1 column(s) at regular intervals     
  88. Remove 17 row(s) and 5 column(s) at regular intervals
  89. Remove 1 row(s) and 5 column(s) at regular intervals     
  90. Remove 1 row(s) and 1 column(s) at regular intervals