Crate forgery_detection_zero

Source
Expand description

§forgery-detection-zero

An implementation of ZERO: a JPEG grid detector applied to forgery detection in digital images.

The approach is described in the following paper:

Tina Nikoukhah, Jérémy Anger, Miguel Colom, Jean-Michel Morel, and Rafael Grompone von Gioi,
ZERO: a Local JPEG Grid Origin Detector Based on the Number of DCT Zeros and its Applications in Image Forensics,
Image Processing On Line, 11 (2021), pp. 396–433. https://doi.org/10.5201/ipol.2021.390

The original implementation is written in C.

§Library example

Simple usage:

for r in Zero::from_image(&jpeg).into_iter() {
    println!(
        "Forged region detected: from ({}, {}) to ({}, {})",
        r.start.0, r.start.1, r.end.0, r.end.1,
    )
}

More advanced usage:

let foreign_grid_areas = Zero::from_image(&jpeg).detect_forgeries();
let missing_grid_areas = foreign_grid_areas
    .detect_missing_grid_areas()
    .unwrap()
    .unwrap();
let forged_regions = foreign_grid_areas
    .forged_regions()
    .iter()
    .chain(missing_grid_areas.forged_regions());
for r in forged_regions {
    println!(
        "Forged region detected: from ({}, {}) to ({}, {})",
        r.start.0, r.start.1, r.end.0, r.end.1,
    )
}

§CLI example

You can use the example to generate the forgery masks of an image:

cargo r --release --example zero image.jpg

Structs§

ForeignGridAreas
ForgedRegion
An area of an image that has been forged.
ForgeryMask
A mask that represents the pixels of an image that have been forged
Grid
A grid is an unsigned integer between 0 and 63
MissingGridAreas
Contains the result for the detection of missing grid areas
Votes
The grid origin vote map of an image.
Zero
JPEG grid detector applied to forgery detection.

Enums§

Error
Represents the errors that can be raised when using Zero.
Vote
The result of the vote to which grid a pixel is aligned with.