Image Security
A university project exploring different techniques to embed, detect, and verify watermarks in digital images - from visible overlays to invisible frequency-domain encoding.
Two layers in one module. The invisible layer uses Discrete Wavelet Transform (DWT) via the blind_watermark library to encode a payload into the image's frequency domain - completely undetectable to the eye. The visible layer tiles a text overlay across the image, which is optional. During verification, the payload is extracted and compared against the expected string. The artifacts are visible only on white and black images. It works even if the image is cropped.
Embeds a QR code or DataMatrix barcode directly into an image at a configurable position. Detection uses OpenCV together with pyzbar and pylibdmtx to decode the embedded code. Both embedding and verification work end-to-end.
Zero-watermarking is a technique that verifies the authenticity of an image and embeds hidden information without altering a single pixel. Instead of modifying the image, it derives a compact, secret-dependent “zero-watermark” from the image’s intrinsic features. This zero-watermark is stored separately, and later used to prove ownership or integrity. One of the use cases could be medical imaging or copyright protection on social platforms.
Adds a visible text overlay to an image - centered, bottom-right corner, or tiled across the whole image. Embedding works correctly. Detection is not yet implemented; the check always returns no result. Useful as a simple deterrent watermark without verification needs.
Embeds a watermark pattern into animated GIF files by modifying individual frames. The checkerboard pattern mode is functional. Other modes - combined, interference, and radial - are still being worked on. The detection side uses FFT spectrum analysis; threshold calibration is ongoing. This module is experimental and being refined.
Based on the technique developed at the University of Chicago, Nightshade is designed to protect images from being used in AI training by subtly modifying pixel values in adversarial ways - causing models trained on them to behave incorrectly. Our implementation of this module is currently in an early stage and under active development.