Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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.
- Host: GitHub
- URL: https://github.com/esimov/forensic
- Owner: esimov
- License: mit
- Created: 2018-01-05T19:34:28.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2022-03-08T07:47:30.000Z (over 2 years ago)
- Last Synced: 2024-10-16T01:10:47.809Z (29 days ago)
- Topics: computer-vision, dct, digital-signal-processing, forgery-detection, golang, image-forensics, image-processing
- Language: Go
- Homepage:
- Size: 811 KB
- Stars: 136
- Watchers: 9
- Forks: 21
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
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 --helpImage 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.