HiddenWatermark
Embeds a hidden watermark in an image using a blind DWT-DCT approach
Install / Use
/learn @mchall/HiddenWatermarkREADME
Hidden Watermark
Embeds a hidden watermark in an image using a blind DWT-DCT approach. Unlike steganographic methods, this hidden watermark is resistant to various forms of attack. Limited to a black and white 32x32 watermark image.
Original Image + Watermark = Watermarked Image
+
= 
Image source: http://commons.wikimedia.org/wiki/Garden#/media/File:Rikugien3.jpg
Usage
The following code instantiates the default watermark class with the default watermark image. Then the watermark is embedded in a file, and the watermark is retrieved afterwards.
var fileBytes = File.ReadAllBytes(imageLocation);
var newFileBytes = Watermark.Default.EmbedWatermark(fileBytes);
var result = Watermark.Default.RetrieveWatermark(newFileBytes);
The following code instantiates the watermark class with the bytes read from a 32x32 watermark image and turns crop support on. Then the watermark is embedded in a file and simultaneously checked if an embedded watermark already exists.
var watermarkBytes = File.ReadAllBytes(watermarkLocation);
Watermark watermark = new Watermark(watermarkBytes);
var fileBytes = File.ReadAllBytes(imageLocation);
var result = watermark.RetrieveAndEmbedWatermark(fileBytes);
Watermark recovery results
Attack | Recovered Watermark
------------ | -------------
No Attack |
Blur |
Flip Horizontal |
Resize (1024x768->360x270) |
Visible Watermarking |
Crop |
JPEG Quality 20% |
Grayscale |
(not resistant)
PrintScreen |
Noise | 
Acknowledgements
Accord.NET: http://accord-framework.net/
