GitHub - esimov/forensic: Copy-move image forgery detection library.
source link: https://github.com/esimov/forensic
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.md
Forensic
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
Implementation details
- Convert the
RGB
image toYUV
color space. - Divide the
R
,G
,B
,Y
components into fixed-sized blocks. - Obtain each block
R
,G
,B
andY
components. - Calculate each block
R
,G
,B
andY
componentsDCT
(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.
Install
First install Go if you haven't installed already, set your GOPATH
, and make sure $GOPATH/bin
is on your PATH
.
$ 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.
Usage
$ forensic -in input.jpg -out output.jpg
Supported commands:
$ forensic --help __ _ / _| ___ _ __ ___ _ __ ___(_) ___ | |_ / _ \| '__/ _ \ '_ \/ __| |/ __| | _| (_) | | | __/ | | \__ \ | (__ |_| \___/|_| \___|_| |_|___/_|\___| Image forgery detection library. Version: -blur int Blur radius (default 1) -bs int Block size (default 4) -dt float Distance threshold (default 0.4) -ft float Forgery threshold (default 210) -in string Source -ot int Offset threshold (default 72) -out string Destination
Results
Original Forged ResultNotice
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.
License
Copyright © 2018 Endre Simo
This project is under the MIT License. See the LICENSE file for the full license text.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK