3 releases (breaking)
0.3.0 | Dec 11, 2022 |
---|---|
0.2.0 | Nov 30, 2022 |
0.1.0 | Nov 17, 2022 |
#756 in Images
36KB
645 lines
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:
# use forgery_detection_zero::Zero;
# let jpeg = todo!();
#
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:
# use forgery_detection_zero::Zero;
# let jpeg = todo!();
#
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
Dependencies
~9MB
~145K SLoC