0
|
1 #LyX 1.1 created this file. For more info see http://www.lyx.org/
|
|
2 \lyxformat 218
|
|
3 \textclass paper
|
|
4 \language english
|
|
5 \inputencoding auto
|
|
6 \fontscheme default
|
|
7 \graphics default
|
|
8 \paperfontsize default
|
|
9 \spacing single
|
|
10 \papersize Default
|
|
11 \paperpackage a4
|
|
12 \use_geometry 0
|
|
13 \use_amsmath 0
|
|
14 \paperorientation portrait
|
|
15 \secnumdepth 3
|
|
16 \tocdepth 3
|
|
17 \paragraph_separation skip
|
|
18 \defskip smallskip
|
|
19 \quotes_language english
|
|
20 \quotes_times 2
|
|
21 \papercolumns 1
|
|
22 \papersides 1
|
|
23 \paperpagestyle default
|
|
24
|
|
25 \layout Title
|
|
26
|
|
27 Watermarking Source Code
|
|
28 \layout SubTitle
|
|
29
|
|
30 version 0.4
|
|
31 \layout Author
|
|
32
|
|
33 Peter Meerwald
|
|
34 \layout Address
|
|
35
|
|
36 Dept.
|
|
37 of Scientific Computing, University of Salzburg
|
|
38 \newline
|
|
39 Jakob-Haringer-Str.
|
|
40 2, A-5020 Salzburg, Austria
|
|
41 \newline
|
|
42
|
|
43 \begin_inset LatexCommand \url{mailto:pmeerw@cosy.sbg.ac.at}
|
|
44
|
|
45 \end_inset
|
|
46
|
|
47
|
|
48 \newline
|
|
49
|
|
50 \begin_inset LatexCommand \url{http://www.cosy.sbg.ac.at/~pmeerw/Watermarking}
|
|
51
|
|
52 \end_inset
|
|
53
|
|
54
|
|
55 \layout Abstract
|
|
56
|
|
57 This package provides source code for some watermarking algorithms in hopefully
|
|
58 portable C code.
|
|
59 The programs can be used to study watermarking techniques, perform comparative
|
|
60 robustness tests and develop new attacks against embedded watermarks.
|
|
61 \layout Abstract
|
|
62
|
|
63 However, the provided programs are by no means suitable for real-world applicati
|
|
64 on (i.e.
|
|
65 copyright protection) and the code solely serves some educational purpose.
|
|
66 \layout Standard
|
|
67
|
|
68
|
|
69 \begin_inset LatexCommand \tableofcontents{}
|
|
70
|
|
71 \end_inset
|
|
72
|
|
73
|
|
74 \layout Section
|
|
75
|
|
76 Introduction
|
|
77 \layout Standard
|
|
78
|
|
79 Academic research in the watermarking field has grown dramatically since
|
|
80 approximately 1995.
|
|
81 But surprisingly, source code for the proposed watermarking schemes has
|
|
82 not been made available.
|
|
83 The reason is most likely the security of many watermarking systems lies
|
|
84 at least to some extent in the embedding and detection algorithm itself,
|
|
85 and not in the keys used -- violating the Kerckhoff principle
|
|
86 \begin_inset LatexCommand \cite{Kerckhoff1883a}
|
|
87
|
|
88 \end_inset
|
|
89
|
|
90 .
|
|
91 \layout Standard
|
|
92
|
|
93 With the availability of public robustness test for watermarking algorithms,
|
|
94 StirMark
|
|
95 \begin_inset LatexCommand \cite{Petitcolas99c, Petitcolas98b, Petitcolas98a}
|
|
96
|
|
97 \end_inset
|
|
98
|
|
99 , Unzign
|
|
100 \begin_float footnote
|
|
101 \layout Standard
|
|
102
|
|
103
|
|
104 \begin_inset LatexCommand \url{http://www.altern.org/watermark}
|
|
105
|
|
106 \end_inset
|
|
107
|
|
108
|
|
109 \end_float
|
|
110 and very recently Checkmark
|
|
111 \begin_inset LatexCommand \cite{Pereira01b}
|
|
112
|
|
113 \end_inset
|
|
114
|
|
115 , the situation begins to improve.
|
|
116 Now it is possible to measure the performance of watermarking systems.
|
|
117
|
|
118 \layout Standard
|
|
119
|
|
120 In order the compare and evaluate new embedding and detection techniques,
|
|
121 it is also necessary to have some reference implementations of the older,
|
|
122 now often called classical schemes.
|
|
123 In this work, we provide some implementations of watermarking schemes,
|
|
124 some of which can be considered 'classical'.
|
|
125 \layout Standard
|
|
126
|
|
127 It was the goal to capture the main ideas of the proposed algorithms, as
|
|
128 layed out in the respective papers.
|
|
129 This is clearly not an easy task as some papers do not disclose all details
|
|
130 or state which particular parameters were used to obtain the results outlined
|
|
131 in the communications.
|
|
132 \layout Standard
|
|
133
|
|
134 I am very interested in hearing your comments, complaints and suggestions
|
|
135 regarding this software.
|
|
136 Moreover, if you have source code for a watermarking scheme not yet covered
|
|
137 or some useful utility I would be happy to include your code in this distributi
|
|
138 on.
|
|
139 Please see the contact information at the top of this document.
|
|
140 \layout Standard
|
|
141
|
|
142 If you use the accompanying code, please cite my thesis:
|
|
143 \layout Quotation
|
|
144
|
|
145 Peter Meerwald, Digital Image Watermarking in the Wavelet Transform Domain,
|
|
146 Master's Thesis, Department of Scientific Computing, University of Salzburg,
|
|
147 Austria, January 2001.
|
|
148 \layout Section
|
|
149
|
|
150 Software
|
|
151 \layout Standard
|
|
152
|
|
153 Most of the software provided herein was written by myself, as part of my
|
|
154 Master thesis.
|
|
155 Some contributions were made by Vassilis Fotopoulos
|
|
156 \begin_float footnote
|
|
157 \layout Standard
|
|
158
|
|
159
|
|
160 \begin_inset LatexCommand \url{mailto:vfotop1@physics.upatras.gr}
|
|
161
|
|
162 \end_inset
|
|
163
|
|
164
|
|
165 \end_float
|
|
166 .
|
|
167 The software in the archive is organized in the following sub-directories:
|
|
168 \layout Description
|
|
169
|
|
170 Fotopoulos/ contains contributions by Vassilis Fotopoulos
|
|
171 \layout Description
|
|
172
|
|
173 Meerwald/ contains my work
|
|
174 \layout Description
|
|
175
|
|
176 images/ contains the Lena image in PGM format; the default parameters of
|
|
177 most algorithms are tuned to work best with that image
|
|
178 \layout Description
|
|
179
|
|
180 linux_bin/ the place where the Linux executables are stored in the binary
|
|
181 distribution
|
|
182 \layout Description
|
|
183
|
|
184 win32_bin/ the place where Windows 32-bit executables are distributed; tested
|
|
185 with Windows NT 4.0 only
|
|
186 \layout Description
|
|
187
|
|
188 make/ contains the
|
|
189 \family typewriter
|
|
190 \size small
|
|
191 Makefile
|
|
192 \family default
|
|
193 \size default
|
|
194 options to build the code on supported platforms
|
|
195 \layout Standard
|
|
196
|
|
197 For the purpose of this software package, a watermarking system comprises
|
|
198 four parts, namely: signature generation, watermark embedding, watermark
|
|
199 extraction and signature comparison or detection -- with the exception
|
|
200 of Vassilis's code; there are only cast and test programs (corresponds
|
|
201 to watermark embedding and detection).
|
|
202 Signature is used more less as a synonym for mark and can be thought of
|
|
203 as the payload (at least for some schemes :-).
|
|
204 \layout Standard
|
|
205
|
|
206 All programs only accept the image in NetPBM format and will also produce
|
|
207 only NetPBM-format files (see section
|
|
208 \begin_inset LatexCommand \ref{sec:prereq}
|
|
209
|
|
210 \end_inset
|
|
211
|
|
212 ).
|
|
213 Unfortunately, most programs have only been tested with 8-bit gray-scale
|
|
214 images of size
|
|
215 \begin_inset Formula \( 512\times 512. \)
|
|
216 \end_inset
|
|
217
|
|
218
|
|
219 \layout Standard
|
|
220
|
|
221 In order to simplify batch testing, the programs allow to read either from
|
|
222 a file, e.g.
|
|
223 \layout Standard
|
|
224
|
|
225
|
|
226 \family typewriter
|
|
227 \size small
|
|
228 wm_cox_e -s cox.sig
|
|
229 \series bold
|
|
230 image.pgm
|
|
231 \layout Standard
|
|
232
|
|
233 or from standard input, i.e.
|
|
234 \layout Standard
|
|
235
|
|
236 wm_cox_e -s cox.sig
|
|
237 \series bold
|
|
238 < image.pgm
|
|
239 \layout Standard
|
|
240
|
|
241 The output is usually written to standard output, i.e.
|
|
242
|
|
243 \layout Standard
|
|
244
|
|
245
|
|
246 \family typewriter
|
|
247 \size small
|
|
248 wm_cox_e -s cox.sig image.pgm
|
|
249 \series bold
|
|
250 > wm_image.pgm
|
|
251 \layout Standard
|
|
252
|
|
253 unless redirected to a file, e.g.
|
|
254 \layout Standard
|
|
255
|
|
256
|
|
257 \family typewriter
|
|
258 \size small
|
|
259 wm_cox_e -s cox.sig
|
|
260 \series bold
|
|
261 -o wm_image.pgm
|
|
262 \series default
|
|
263 image.pgm
|
|
264 \layout Subsection
|
|
265
|
|
266 Featured algorithms
|
|
267 \layout Standard
|
|
268
|
|
269 Currently it includes the following watermarking algorithms
|
|
270 \layout Itemize
|
|
271
|
|
272 Bruyndonckx [bruyn], refer to
|
|
273 \layout Quotation
|
|
274
|
|
275 O.
|
|
276 Bruyndonckx, Jean-Jacques Quisquater, and Benoit M.
|
|
277 Macq.
|
|
278 Spatial method for copyright labeling of digital images.
|
|
279 In IEEE Workshop on Nonlinear Signal and Image Processing '95, Thessaloniki,
|
|
280 Greece, pages 456 - 459, 1995.
|
|
281 \layout Itemize
|
|
282
|
|
283 Corvi, refer to
|
|
284 \layout Quotation
|
|
285
|
|
286 Marco Corvi and Gianluca Nicchiotti.
|
|
287 Wavelet-based image watermarking for copyright protection.
|
|
288 In Scandinavian Conference on Image Analysis SCIA '97, Lappeenranta, Finland,
|
|
289 June 1997.
|
|
290 \layout Itemize
|
|
291
|
|
292 Cox, refer to
|
|
293 \layout Quotation
|
|
294
|
|
295 Ingemar J.
|
|
296 Cox, Joe Kilian, Tom Leighton, and Talal G.
|
|
297 Shamoon.
|
|
298 Secure spread spectrum watermarking for multimedia.
|
|
299 In Proceedings of the IEEE ICIP '97, volume 6, pages 1673 - 1687, Santa
|
|
300 Barbara, California, USA, 1997.
|
|
301 \layout Itemize
|
|
302
|
|
303 Dugad, refer to
|
|
304 \layout Quotation
|
|
305
|
|
306 Rakesh Dugad, Krishna Ratakonda, and Narendra Ahuja.
|
|
307 A new wavelet-based scheme for watermarking images.
|
|
308 In Proceedings of the IEEE International Conference on Image Processing,
|
|
309 ICIP '98, Chicago, IL, USA, October 1998.
|
|
310
|
|
311 \layout Itemize
|
|
312
|
|
313 Fridrich (2.
|
|
314 scheme), refer to
|
|
315 \layout Quotation
|
|
316
|
|
317 Jiri Fridrich.
|
|
318 Combining low-frequency and spread spectrum watermarking.
|
|
319 In Proceedings of the SPIE Symposium on Optical Science, Engineering and
|
|
320 Instrumentation, San Diego, USA, July 1998.
|
|
321
|
|
322 \layout Itemize
|
|
323
|
|
324 Kim, refer to
|
|
325 \layout Quotation
|
|
326
|
|
327 Jong Ryul Kim and Young Shik Moon.
|
|
328 A robust wavelet-based digital watermark using level-adaptive thresholding.
|
|
329 In Proceedings of the 6th IEEE International Conference on Image Processing
|
|
330 ICIP '99, page 202, Kobe, Japan, October 1999.
|
|
331 \layout Itemize
|
|
332
|
|
333 Koch, refer to
|
|
334 \layout Quotation
|
|
335
|
|
336 Eckhard Koch and Jian Zhao.
|
|
337 Towards robust and hidden image copyright labeling.
|
|
338 In Proceedings of the IEEE International Workshop on Nonlinear Signal and
|
|
339 Image Processing, pages 452 - 455, Halkidiki, Marmaras, Greece, June 1995.
|
|
340 \layout Itemize
|
|
341
|
|
342 Wang, refer to
|
|
343 \layout Quotation
|
|
344
|
|
345 Houng-Jyh Wang, Po-Chyi Su, and C.-C.
|
|
346 Jay Kuo.
|
|
347 Wavelet-based digital image watermarking.
|
|
348 Optics Express, volume 3, pp.
|
|
349 497, December 1998.
|
|
350
|
|
351 \layout Itemize
|
|
352
|
|
353 Xia, refer to
|
|
354 \layout Quotation
|
|
355
|
|
356 Xiang-Gen Xia, Charles G.
|
|
357 Boncelet, and Gonzalo R.
|
|
358 Arce.
|
|
359 Wavelet transform based watermark for digital images.
|
|
360 Optics Express, volume 3, pp.
|
|
361 497, December 1998.
|
|
362 \layout Itemize
|
|
363
|
|
364 Xie, refer to
|
|
365 \layout Quotation
|
|
366
|
|
367 Liehua Xie and Gonzalo R.
|
|
368 Arce.
|
|
369 Joint wavelet compression and authentication watermarking.
|
|
370 In Proceedings of the IEEE International Conference on Image Processing,
|
|
371 ICIP '98, Chicago, IL, USA, 1998.
|
|
372 \layout Itemize
|
|
373
|
|
374 Zhu, refer to
|
|
375 \layout Quotation
|
|
376
|
|
377 Wenwu Zhu, Zixiang Xiong, and Ya-Qin Zhang.
|
|
378 Multiresolution watermarking for images and video: a unified approach.
|
|
379 In Proceedings of the IEEE International Conference on Image Processing,
|
|
380 ICIP '98, Chicago, IL, USA, October 1998.
|
|
381
|
|
382 \layout Itemize
|
|
383
|
|
384 Piva/Fotopoulos [cast|test-pv,hart,sub], contribution by Vassilis Fotopoulos,
|
|
385 refer to
|
|
386 \layout Quotation
|
|
387
|
|
388 M.Barni, F.
|
|
389 Bartolini, V.
|
|
390 Cappellini, A.
|
|
391 Piva.
|
|
392 A DCT-Domain System for Robust Image Watermarking, Signal Processing, vol.
|
|
393 66, pp 357 - 372, 1998.
|
|
394 \begin_deeper
|
|
395 \layout Standard
|
|
396 \added_space_top smallskip \added_space_bottom smallskip
|
|
397 and
|
|
398 \end_deeper
|
|
399 \layout Quotation
|
|
400
|
|
401 V.
|
|
402 Fotopoulos, A.
|
|
403 N.
|
|
404 Skodras, A Subband DCT approach to image watermarking, X European Signal
|
|
405 Processing Conference, September 4 - 8, 2000, Tampere, Finland.
|
|
406 \layout Standard
|
|
407
|
|
408 More algorithms will be added over time, I have implemented about 13 watermarkin
|
|
409 g algorithms in the spatial-, DCT-, and wavelet domain so far.
|
|
410 \layout Subsection
|
|
411
|
|
412
|
|
413 \begin_inset LatexCommand \label{sec:utility_programs}
|
|
414
|
|
415 \end_inset
|
|
416
|
|
417 Utility programs
|
|
418 \layout Standard
|
|
419
|
|
420 A good way to check the effect of a watermarking algorithm is computing
|
|
421 the difference image, i.e.
|
|
422 subtracting the original image from the watermarked image.
|
|
423 Alternatively, one can also have a look at the modified coefficients in
|
|
424 the transform domain.
|
|
425 The following programs facilitate these tasks:
|
|
426 \layout Description
|
|
427
|
|
428 cmp_pgm compute difference image, PSNR, ...
|
|
429 \layout Description
|
|
430
|
|
431 cmp_dct compute full-frame DCT domain difference image
|
|
432 \layout Description
|
|
433
|
|
434 cmp_dct8x8 compute 8x8 block-based DCT difference image
|
|
435 \layout Description
|
|
436
|
|
437 cmp_dwt compute DWT domain difference image
|
|
438 \layout Standard
|
|
439
|
|
440 For example, to produce the difference image of two PGM files and compute
|
|
441 the PSNR along with some other measures, the following command can be used:
|
|
442 \layout Standard
|
|
443
|
|
444
|
|
445 \family typewriter
|
|
446 \size small
|
|
447 cmp_pgm -p -i original.pgm -o diff.pgm watermarked.pgm
|
|
448 \layout Section
|
|
449
|
|
450 Usage
|
|
451 \layout Standard
|
|
452
|
|
453 Note, almost all programs will output usage information if called with the
|
|
454
|
|
455 \family typewriter
|
|
456 \size small
|
|
457 -h
|
|
458 \family default
|
|
459 \size default
|
|
460 argument.
|
|
461 \layout Subsection
|
|
462
|
|
463 Generating a mark
|
|
464 \layout Standard
|
|
465
|
|
466 First, you have to generate an appropriate signature file for the corresponding
|
|
467 embedding/detection algorithm; e.g.
|
|
468 if you are going to use Cox' scheme, then you would run
|
|
469 \layout Standard
|
|
470
|
|
471
|
|
472 \family typewriter
|
|
473 \size small
|
|
474 gen_cox_sig
|
|
475 \layout Standard
|
|
476
|
|
477 The programs outputs some parameters and a sequence of Gaussian distributed
|
|
478 random numbers (which is the watermark sequence).
|
|
479 You want to save that into a signature file, so you run
|
|
480 \layout Standard
|
|
481
|
|
482
|
|
483 \family typewriter
|
|
484 \size small
|
|
485 gen_cox_sig > cox.sig or
|
|
486 \layout Standard
|
|
487
|
|
488
|
|
489 \family typewriter
|
|
490 \size small
|
|
491 gen_cox_sig -o cox.sig
|
|
492 \layout Standard
|
|
493
|
|
494 You can influence e.g.
|
|
495 the embedding strength that will be used in the embedding step by running
|
|
496 \layout Standard
|
|
497
|
|
498
|
|
499 \family typewriter
|
|
500 \size small
|
|
501 gen_cox_sig -a 0.5 > too_strong_cox.sig
|
|
502 \layout Standard
|
|
503
|
|
504 Usually, the programs for generating a signature will supply reasonable
|
|
505 default values for marking a 8-bit gray-scale image of size
|
|
506 \begin_inset Formula \( 512\times 512. \)
|
|
507 \end_inset
|
|
508
|
|
509
|
|
510 \layout Subsection
|
|
511
|
|
512 Watermark embedding
|
|
513 \layout Standard
|
|
514
|
|
515 Watermark embedding is performed with the following command (for our example,
|
|
516 we are using Cox' scheme):
|
|
517 \layout Standard
|
|
518
|
|
519
|
|
520 \family typewriter
|
|
521 \size small
|
|
522 wm_cox_e -s cox.sig -o cox_lena.pgm lena.pgm
|
|
523 \layout Standard
|
|
524
|
|
525 The signature file is parsed to obtain the particular watermark sequence
|
|
526 and the embedding strength.
|
|
527 The watermarked image is written to the file
|
|
528 \family typewriter
|
|
529 \size small
|
|
530 cox_lena.pgm
|
|
531 \family default
|
|
532 \size default
|
|
533 .
|
|
534 Now it the time to check the perceptual quality of the produced image and
|
|
535 also have a look at the difference image (see section
|
|
536 \begin_inset LatexCommand \ref{sec:utility_programs}
|
|
537
|
|
538 \end_inset
|
|
539
|
|
540 ).
|
|
541 \layout Subsection
|
|
542
|
|
543 Watermark extraction
|
|
544 \layout Standard
|
|
545
|
|
546 To extract the embedded signature, we execute the command
|
|
547 \layout Standard
|
|
548
|
|
549
|
|
550 \family typewriter
|
|
551 \size small
|
|
552 wm_cox_d -s cox.sig -i lena.pgm -o cox.wm cox_lena.pgm
|
|
553 \layout Standard
|
|
554
|
|
555 Since Cox' algorithm is not blind, the original image is needed as a reference
|
|
556 to extract the embedded mark.
|
|
557 The embedded mark will be stored in
|
|
558 \family typewriter
|
|
559 \size small
|
|
560 cox.wm
|
|
561 \family default
|
|
562 \size default
|
|
563 .
|
|
564 The original signature,
|
|
565 \family typewriter
|
|
566 \size small
|
|
567 cox.sig
|
|
568 \family default
|
|
569 \size default
|
|
570 , is used to get the auxiliary embedding parameter correct (e.g.
|
|
571 embedding strength).
|
|
572
|
|
573 \layout Subsection
|
|
574
|
|
575 Comparing the mark
|
|
576 \layout Standard
|
|
577
|
|
578 The final step is comparing the original signature against the extracted
|
|
579 signature.
|
|
580 The result here is usually a correlation factor.
|
|
581 Values around 0 indicate that the mark has not been found, values around
|
|
582 1
|
|
583 \layout Standard
|
|
584
|
|
585 In most programs a analytical detection threshold for some detection probability
|
|
586 is not used.
|
|
587 Hence, one has to observe the output of the detector for many different
|
|
588 keys (around 1000 I'd suggest) to establish a reasonable threshold for
|
|
589 detection.
|
|
590 A good value to go with initially might be 0.2 which means we claim the
|
|
591 watermark detected if the correlation factor is > 0.2.
|
|
592 \layout Standard
|
|
593
|
|
594 The appropriate command for comparing the mark is
|
|
595 \layout Standard
|
|
596
|
|
597
|
|
598 \family typewriter
|
|
599 \size small
|
|
600 cmp_cox_sig -s cox.sig cox.wm
|
|
601 \layout Subsection
|
|
602
|
|
603 Batch testing - benchmarking
|
|
604 \layout Standard
|
|
605
|
|
606 If you want to run many test you can pipe the images to be do be watermarked
|
|
607 (and tested) through the embedder and detector.
|
|
608 The programs then act like a filter.
|
|
609 Try something like the following in a Unix shell script:
|
|
610 \layout Standard
|
|
611
|
|
612
|
|
613 \family typewriter
|
|
614 \size small
|
|
615 gen_cox_sig > cox.sig
|
|
616 \layout Standard
|
|
617
|
|
618
|
|
619 \family typewriter
|
|
620 \size small
|
|
621 for i in *.pgm
|
|
622 \layout Standard
|
|
623
|
|
624
|
|
625 \family typewriter
|
|
626 \size small
|
|
627 do
|
|
628 \layout Standard
|
|
629
|
|
630
|
|
631 \family typewriter
|
|
632 \size small
|
|
633 \SpecialChar ~
|
|
634 \SpecialChar ~
|
|
635 wm_cox_e -s cox.sig $i |
|
|
636 \backslash
|
|
637
|
|
638 \layout Standard
|
|
639
|
|
640
|
|
641 \family typewriter
|
|
642 \size small
|
|
643 \SpecialChar ~
|
|
644 \SpecialChar ~
|
|
645 wm_cox_d -s cox.sig -i $i |
|
|
646 \backslash
|
|
647
|
|
648 \layout Standard
|
|
649
|
|
650
|
|
651 \family typewriter
|
|
652 \size small
|
|
653 \SpecialChar ~
|
|
654 \SpecialChar ~
|
|
655 cmp_cox_sig -s cox.sig
|
|
656 \layout Standard
|
|
657
|
|
658
|
|
659 \family typewriter
|
|
660 \size small
|
|
661 done
|
|
662 \layout Section
|
|
663
|
|
664
|
|
665 \begin_inset LatexCommand \label{sec:recompile}
|
|
666
|
|
667 \end_inset
|
|
668
|
|
669 Recompiling
|
|
670 \layout Standard
|
|
671
|
|
672 Note, that most watermark embedding/extraction programs use the built-in
|
|
673 random number generator of the C library, i.e.
|
|
674
|
|
675 \family typewriter
|
|
676 \size small
|
|
677 srandom()
|
|
678 \family default
|
|
679 \size default
|
|
680 and
|
|
681 \family typewriter
|
|
682 \size small
|
|
683 random().
|
|
684
|
|
685 \family default
|
|
686 \size default
|
|
687 Therefore, if you recompile, chances are that you won't be able to use your
|
|
688 images watermarked with the previous version.
|
|
689 \layout Standard
|
|
690
|
|
691 The Makefile options for compiling on the different platforms can be found
|
|
692 in the
|
|
693 \family typewriter
|
|
694 \size small
|
|
695 make/
|
|
696 \family default
|
|
697 \size default
|
|
698 sub-directory of the archive.
|
|
699 \layout Subsection
|
|
700
|
|
701
|
|
702 \begin_inset LatexCommand \label{sec:prereq}
|
|
703
|
|
704 \end_inset
|
|
705
|
|
706 Prerequisites
|
|
707 \layout Subsubsection
|
|
708
|
|
709 NetPBM
|
|
710 \layout Standard
|
|
711
|
|
712 NetPBM is responsible for image file I/O and provides a definition of a
|
|
713 simple image file format along with many image file format filters that
|
|
714 allow to convert images to and from NetPBM format.
|
|
715
|
|
716 \layout Standard
|
|
717
|
|
718 You need to get and install the NetPBM library at
|
|
719 \begin_inset LatexCommand \url{http://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/}
|
|
720
|
|
721 \end_inset
|
|
722
|
|
723 or
|
|
724 \begin_inset LatexCommand \url{http://netpbm.sourceforge.net}
|
|
725
|
|
726 \end_inset
|
|
727
|
|
728 .
|
|
729 The library provides
|
|
730 \family typewriter
|
|
731 \size small
|
|
732 pgm.h
|
|
733 \family default
|
|
734 \size default
|
|
735 and the appropriate implementation.
|
|
736 \layout Subsection
|
|
737
|
|
738 Unix/Linux platform
|
|
739 \layout Standard
|
|
740
|
|
741 All programs were developed using Linux and GNU C.
|
|
742 The programs should compile and work with all recent versions of Linux
|
|
743 and GNU C.
|
|
744
|
|
745 \layout Subsection
|
|
746
|
|
747
|
|
748 \begin_inset LatexCommand \label{sec:win32_compile}
|
|
749
|
|
750 \end_inset
|
|
751
|
|
752 Win32 platform
|
|
753 \layout Standard
|
|
754
|
|
755 The programs were ported to the Windows platform using the Cygwin
|
|
756 \begin_float footnote
|
|
757 \layout Standard
|
|
758
|
|
759
|
|
760 \begin_inset LatexCommand \url{http://www.cygwin.com}
|
|
761
|
|
762 \end_inset
|
|
763
|
|
764
|
|
765 \end_float
|
|
766 and Mingw
|
|
767 \begin_float footnote
|
|
768 \layout Standard
|
|
769
|
|
770
|
|
771 \begin_inset LatexCommand \url{http://www.mingw.org}
|
|
772
|
|
773 \end_inset
|
|
774
|
|
775
|
|
776 \end_float
|
|
777 environment.
|
|
778 Most notable, the file mode for standard input and standard output has
|
|
779 to be set to binary mode.
|
|
780 This is accomplished with the
|
|
781 \family typewriter
|
|
782 \size small
|
|
783 setmode()
|
|
784 \family default
|
|
785 \size default
|
|
786 or
|
|
787 \family typewriter
|
|
788 \size small
|
|
789 _fsetmode()
|
|
790 \family default
|
|
791 \size default
|
|
792 commands.
|
|
793 \layout Section
|
|
794
|
|
795 FAQ
|
|
796 \layout Standard
|
|
797
|
|
798 Q: How can I report problems?
|
|
799 \layout Standard
|
|
800
|
|
801 A: See the contact information at the beginning of this document.
|
|
802 \layout Standard
|
|
803
|
|
804 Q: The compiler complains about
|
|
805 \family typewriter
|
|
806 \size small
|
|
807 pgm.h
|
|
808 \family default
|
|
809 \size default
|
|
810 ?
|
|
811 \layout Standard
|
|
812
|
|
813 A: You need to get and install the NetPBM library, see section
|
|
814 \begin_inset LatexCommand \ref{sec:prereq}
|
|
815
|
|
816 \end_inset
|
|
817
|
|
818 .
|
|
819 \layout Standard
|
|
820
|
|
821 Q: What is the best algorithm?
|
|
822 \layout Standard
|
|
823
|
|
824 A: Depends on your application.
|
|
825 \layout Standard
|
|
826
|
|
827 Q: What is the most robust algorithm?
|
|
828 \layout Standard
|
|
829
|
|
830 A: Depends on the attack.
|
|
831 See some results on
|
|
832 \begin_inset LatexCommand \url{http://www.cosy.sbg.ac.at/~pmeerw/Watermarking}
|
|
833
|
|
834 \end_inset
|
|
835
|
|
836 .
|
|
837 \layout Standard
|
|
838
|
|
839 Q: I need code for a full-frame DCT?
|
|
840 \layout Standard
|
|
841
|
|
842 A: See the files Meerwald/dct.* in the archive.
|
|
843 \layout Standard
|
|
844
|
|
845 Q: I need code for a 8x8 block DCT?
|
|
846 \layout Standard
|
|
847
|
|
848 A: See the files
|
|
849 \family typewriter
|
|
850 \size small
|
|
851 Meerwald/dct.*
|
|
852 \family default
|
|
853 \size default
|
|
854 in the archive.
|
|
855 \layout Standard
|
|
856
|
|
857 Q: I need code for the wavelet transform (DWT)?
|
|
858 \layout Standard
|
|
859
|
|
860 A: See the files
|
|
861 \family typewriter
|
|
862 \size small
|
|
863 Meerwald/wavelet.*
|
|
864 \family default
|
|
865 \size default
|
|
866 in the archive.
|
|
867 \layout Standard
|
|
868
|
|
869 Q: I get the message 'unable to open filter.dat' - what to do?
|
|
870 \layout Standard
|
|
871
|
|
872 A: Make sure the file filter.dat is in the current directory or accessible
|
|
873 via path/filename specified in the signature file.
|
|
874 Use the signature generation command to specify an absolute path if necessary.
|
|
875 \layout Standard
|
|
876
|
|
877 Q: I can't compile the code using some Microsoft product?
|
|
878 \layout Standard
|
|
879
|
|
880 A: Make your life easier, install GNU software! See section
|
|
881 \begin_inset LatexCommand \ref{sec:recompile}
|
|
882
|
|
883 \end_inset
|
|
884
|
|
885 .
|
|
886 \layout Section
|
|
887
|
|
888 Revision history
|
|
889 \layout Standard
|
|
890
|
|
891 version 0.4 (June 21, 2001)
|
|
892 \layout Itemize
|
|
893
|
|
894 bug fixes
|
|
895 \begin_deeper
|
|
896 \layout Itemize
|
|
897
|
|
898 wm_xia_{e|d}.c variable level uninitialized
|
|
899 \layout Itemize
|
|
900
|
|
901 wm_zhu_{e|d}.c variable level uninitialized
|
|
902 \layout Itemize
|
|
903
|
|
904 issue with random() vs.
|
|
905 rand() and RAND_MAX in frid2_common.c
|
|
906 \end_deeper
|
|
907 \layout Itemize
|
|
908
|
|
909 added option to bruyn algorithm to disable block skipping
|
|
910 \layout Itemize
|
|
911
|
|
912 added algorithm kim
|
|
913 \layout Standard
|
|
914
|
|
915 version 0.3 (June 18, 2001)
|
|
916 \layout Itemize
|
|
917
|
|
918 created a nice (?) manual/documentation
|
|
919 \layout Itemize
|
|
920
|
|
921 added algorithms by Dugad, Wang, Zhu, Fridrich
|
|
922 \layout Itemize
|
|
923
|
|
924 added Makefiles for Win32 platform (mingw32)
|
|
925 \layout Standard
|
|
926
|
|
927 version 0.2 (February 22, 2001)
|
|
928 \layout Itemize
|
|
929
|
|
930 added contribution by Vassilis Fotopoulos (Piva's algorithm,
|
|
931 \layout Itemize
|
|
932
|
|
933 DCT, Hartley and subband domain) - see Fotopoulos/ subdirectory
|
|
934 \layout Itemize
|
|
935
|
|
936 stuff moved to Meerwald/ subdirectory
|
|
937 \layout Itemize
|
|
938
|
|
939 added Bruyndonckx, Corvi, Koch, Xia, Xie algorithms
|
|
940 \layout Standard
|
|
941
|
|
942 version 0.1 (February 18, 2001)
|
|
943 \layout Itemize
|
|
944
|
|
945 initial release
|
|
946 \layout Section
|
|
947
|
|
948 Legal statement
|
|
949 \layout Standard
|
|
950
|
|
951 My license is called "I-don't-care" license: (1) You can do with the accompanyin
|
|
952 g software whatever you want, but don't blame me if it doesn't work or it
|
|
953 causes damage.
|
|
954 (2) If you think my work is useful, tell me and tell others, but you are
|
|
955 not obliged to do so.
|
|
956 I suggest not to remove information contained in this other documentation
|
|
957 file.
|
|
958 \layout Standard
|
|
959
|
|
960
|
|
961 \begin_inset LatexCommand \BibTeX[plain]{watermarking}
|
|
962
|
|
963 \end_inset
|
|
964
|
|
965
|
|
966 \the_end
|