Forensic is an image processing library which aims to detect copy-move forgeries in digital images. The implementation is mainly based on this paper: https://arxiv.org/pdf/1308.5661.pdf
* Convert the
RGB image to
YUV color space.
* Divide the
Y components into fixed-sized blocks.
* Obtain each block
* Calculate each block
DCT (Discrete Cosine Transform) coefficients.
* Extract features from the obtained
DCT coefficients and save it into a matrix. The matrix rows will contain the blocks top-left coordinate position plus the DCT coefficient. The matrix will have
(M − b + 1)(N − b + 1)x9 elements.
* Sort the features in lexicographic order.
* Search for similar pairs of blocks. Because identical blocks are most probably neighbors, after ordering them in lexicographic order we need to apply a specific threshold to filter out the false positive detections. If the distance between two neighboring blocks is smaller than a predefined threshold the blocks are considered as a pair of candidate for the forgery.
* For each pair of candidate compute the cumulative number of shift vectors (how many times the same block is detected). If that number is greater than a predefined threshold the corresponding regions are considered forged.
First install Go if you haven’t installed already, set your
GOPATH, and make sure
$GOPATH/bin is on your
$ export GOPATH="$HOME/go"
$ export PATH="$PATH:$GOPATH/bin"
Next download the project and build the binary file.
$ go get -u -f github.com/esimov/forensic
$ go install
In case you do not want to build the binary file yourself you can obtain the prebuilt one from the releases folder.
$ forensic -in input.jpg -out output.jpg
$ forensic --help
/ _| ___ _ __ ___ _ __ ___(_) ___
| |_ / _ \| '__/ _ \ '_ \/ __| |/ __|
| _| (_) | | | __/ | | \__ \ | (__
|_| \___/|_| \___|_| |_|___/_|\___|
Image forgery detection library.
Blur radius (default 1)
Block size (default 4)
Distance threshold (default 0.4)
Forgery threshold (default 210)
Offset threshold (default 72)
| Original | Forged | Result | | — | — | — | | | | | | | |
The library sometimes produce false positive detection, depending on the image content. For this reason i advice to adjust the settings. Also sometimes the human judgement is required, but in the most cases the library do a pretty good job in detecting forged images. The more intensive the overlayed color is, the more certain is that the image is tampered.
Copyright © 2018 Endre Simo This project is under the MIT License. See the LICENSE file for the full license text.