Skip to main content

Difference Finder

structure

  • This is my side-work. I'll improve the figure during my next free time 😅

This repository is for finding difference between two images automatically using pytorch.


Motivation

With the extensive exploration of machine learning techniques, the quality of reconstructed images has reached a saturation point. Consequently, comparing baseline methods has become challenging. While quantitative evaluations may indicate marginal improvements, demonstrating qualitative enhancements has been difficult (in my experience).


What you can do

Given two images, this repo provides the difference map. See the below examples.


Example 1. Hard "spot the difference" (ref: https://thetem.co.kr/article/%EC%8A%A4%ED%86%A0%EB%A6%AC/2/1801/)

There are seven different spots. Try by yourself before seeing the result!

Image 1 Image 2
example1_1 example1_2

Result.

Strategy: Difference Strategy: Gradient / Metric: PSNR
result1_1 result1_2

Example 2. Complex "spot the difference" (ref: https://www.pinterest.co.kr/pin/312578030384336039/)

There are seven different spots. Try by yourself before seeing the result!

Image 1 Image 2
example1_1 example1_2

Result.

Strategy: Difference Preprocess: HP filter / Strategy: Gradient / Metric: SSIM
result1_1 result1_2

Developed modules & Futher plan

[Pre-processor]
    [x] identity (default)
    [x] normalize
    [x] highpass_filter
    [x] lowpass_filter
    [ ] wavelet

[Post-processor]
    [x] identity (default)
    [ ] dynamic thresholding

[Metric]
    [x] MSE
    [x] PSNR
    [x] SSIM
    [x] MS-SSIM
    [x] LPIPS
    [ ] DICE score
    [ ] JACCARD score

[Strategy]
    [x] Difference
    [x] Gradient (default)
    [ ] GradCAM

How to use

Install

pip install difference-finder

Usage

It would be simple. Just follow the three steps!

  1. Define 'Finder'
  2. Give two image paths to compare
  3. Done!
from pathlib import Path
from difference_finder.finder import Finder

img1_path = Path('./samples/imgdir1/img1.png')
img2_path = Path('./samples/imgdir2/img2.png')

worker = Finder(strategy='gradient', metric='psnr')
output = worker.run(img1_path, img2_path)

If two image directories are given, it will generate difference map for all files. (The number of files should be the same.)

from pathlib import Path
from difference_finder.finder import Finder

img1_directory = Path('./samples/imgdir1/')
img2_directory = Path('./samples/imgdir2/')

worker = Finder(strategy='gradient', metric='psnr')
outputs = worker.run(img1_directory, img2_directory)

Principle

So... how does it work? Extremely simple.

strategy1 When you set the strategy as 'difference', it simply return the l1 difference (i.e. absolute value of pixel-wise difference), regardless to given metric option. Actually, this is the straightforward and intuitive way to get the difference map.

strategy2 When you set the strategy as 'gradient', it will calculate the gradient of one of input image with respect to calculated (scalar) metric. One pixel of returned gradient indicates "how much the pixel contributes to the metric". Hence, the metric function must be differentiable by the pytorch auto-grad backend. It is required to construct all metric functions using the pytorch.

Release files for difference-finder 0.0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for difference-finder 0.0.4
File Size Uploaded
difference_finder-0.0.4.tar.gz 8.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for difference-finder 0.0.4
File Interpreter ABI Platform
difference_finder-0.0.4-py3-none-any.whl Python 3 none any Details

Total release size: 17.5 kB

Release files / difference_finder-0.0.4.tar.gz

Download URL difference_finder-0.0.4.tar.gz
Size 8.6 kB
Tags Source
SHA-256 checksum
How to use checksums
44c3f585a3deec1b0f2b8e03ceb64a7ef4b13342f302f5a73180ae79f40f4d51
BLAKE2b-256 checksum
How to use checksums
bd661afda2b36bc9493db2684b4ab9a224b460bf04a48db9de5f85683780c990
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.8.15

Release files / difference_finder-0.0.4-py3-none-any.whl

Download URL difference_finder-0.0.4-py3-none-any.whl
Size 8.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d94888d73c842abc2816a8b5844858a49db3362e5eddabac026ae3ca00c000e6
BLAKE2b-256 checksum
How to use checksums
436ccbf3c09196b0db7163351ad9125f12b66d1bb63363af01785c4e9a79e501
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.8.15

Release history Release notifications | RSS feed

This release

0.0.4 This release

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page