Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/esimov/forensic

Copy-move image forgery detection library.
https://github.com/esimov/forensic

computer-vision dct digital-signal-processing forgery-detection golang image-forensics image-processing

Last synced: 18 days ago
JSON representation

Copy-move image forgery detection library.

Awesome Lists containing this project

README

        

# Forensic

[![build](https://github.com/esimov/forensic/actions/workflows/build.yml/badge.svg)](https://github.com/esimov/forensic/actions/workflows/build.yml)
[![license](https://img.shields.io/github/license/esimov/forensic)](./LICENSE)

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 to `YUV` color space.
* Divide the `R`,`G`,`B`,`Y` components into fixed-sized blocks.
* Obtain each block `R`,`G`,`B` and `Y` components.
* Calculate each block `R`,`G`,`B` and `Y` components `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.

## Install
First install Go if you don't have already installed, set your `GOPATH`, and make sure `$GOPATH/bin` is in your `PATH` environment variable.

```bash
$ export GOPATH="$HOME/go"
$ export PATH="$PATH:$GOPATH/bin"
```
Next download the project and build the binary file.

```bash
$ 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](https://github.com/esimov/forensic/releases) folder.

## Usage

```bash
$ forensic -in input.jpg -out output.jpg
```

### Supported commands:
```bash
$ 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
Input image
-ot int
Offset threshold (default 72)
-out string
Output image
```

## Results
| Original image | Forged image | Detection result |
| --- | --- | --- |
| ![dogs_original](https://user-images.githubusercontent.com/883386/39047347-3fee70cc-44a2-11e8-8729-c4312c631017.jpg) | ![dogs_forged](https://user-images.githubusercontent.com/883386/39047218-c1c8c530-44a1-11e8-8eb6-f9a8470848bd.jpg) | ![dogs_result](https://user-images.githubusercontent.com/883386/39047481-aec6f0f0-44a2-11e8-9f0f-041b9f2a0eb4.png) |

### Notice
Sometimes the library produces false positive results depending on the image content. For this reason I advise to adjust the settings. Also in some cases human judgement is required, but otherwise the library do a decent job in detecting forged images.

### How to interpret the results?
The more intensive the overlayed color is, the more certain is that the image is tampered.

## Author

* Endre Simo ([@simo_endre](https://twitter.com/simo_endre))

## License

Copyright © 2018 Endre Simo

This project is under the MIT License. See the LICENSE file for the full license text.