PHP Classes

PHP Image Correllation: Get the similarity between images with correlation

Recommend this page to a friend!
  Info   View files Example   Screenshots Screenshots   View files View files (6)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog (1)    
Last Updated Ratings Unique User Downloads Download Rankings
2023-08-29 (19 days ago) RSS 2.0 feedNot yet rated by the usersTotal: 40 This week: 4All time: 10,702 This week: 29Up
Version License PHP version Categories
correlimages 1.0.0Free for non-comm...5Algorithms, PHP 5, Graphics
Description 

Author

This package can get the similarity between images with correlation.

It provides a script that serves JavaScript code to perform image analysis calculations to compare two images and determine their similarity when calculating correlation coefficients.

The correlation coefficient is calculated using a number between 0 and 100 to show how similar the two images are.

Innovation Award
PHP Programming Innovation award nominee
August 2023
Nominee
Vote
Comparing images can be a valuable activity for many types of applications.

For instance, an application can determine if an image is mostly a copy of another embodiment.

Another application can compare two movie images to determine if there are significant changes between the two scenes.

This package implements an image comparison approach calculating a correlation factor using JavaScript and PHP code.

Manuel Lemos
Picture of Dantigny francois
  Performance   Level  
Name: Dantigny francois <contact>
Classes: 3 packages by
Country: France France
Innovation award
Innovation award
Nominee: 2x

Winner: 1x

Details

CorrelImages

Try to build a number between 0 and 100 for matching 2 images ...

Contexte

Je travaille sur un projet plus ambitieux visant à comparer deux vidéos d'un même film, éventuellement avec des tailles différentes, des framerates différents et des longueurs différentes pour en extraire les différences (portions rajoutées ou supprimées entre les deux versions). Dans cet objectif, je suis amené - après avoir "nettoyé" les éventuelles bandes noires", à comparer 2 images. 
Mes premières tentatives ont consisté à "mesurer" l'écart en nuances de gris entre deux images; pour deux versions "de mêmes dimensions d'images", cela est assez concluant. Malheureusement, pour deux images de tailles différentes - souffrant parfois d'un "resizing" et d'une éventuelle translation, les résultats sont nettement moins concluants. 
Je me suis donc orienté vers la recherche de points remarquables entre deux images pour mettre en évidence une fonction "un peu homothétique" entre ces deux images me permettant de définir deux blocs - chacun dans une image - à partir desquels la "différence de gris" est efficace, concluante.
Il est bien évident que les notions de points remarquables existent déjà (reconnaissance de formes, de visages, création d'images panoraùiques, SLAM, ...) mais je recherchais quelques techniques (technologies) "efficaces". CorrelImages permet non seulement de mettre en place ce Coefficient de Corrélation entre deux images mais permet surtout de "jouer" avec les différents paramètres d'entrée et de sauvegarder les tests réalisés afin de "peaufiner" l'incidence des paramètres tant au niveau de la qualité du résultat que de son efficacité en matière de temps.
Afin d'effectuer une majorité des traitements, je me suis aidé d'une bibliothèque déjà existante concernant le traitement d'images : JSFEAT ( https://github.com/inspirit/jsfeat ) mais j'ai du porter en javascript un algorithme visant à diminuer le nombre de points remarquables d'une image tout en respectant une certaine distribution spatiale homogène ( https://github.com/BAILOOL/ANMS-Codes ) et adapter à ma sauce l'algorithme de Ransac ( https://gist.github.com/nandor/7e74368a449924483173 ) permettant une bonne détermination de la transformation (qualifiée d'un peu homothétique plus haut) permettant de passer d'une image à l'autre.

Algorithme d'ensemble :

a) passage d'une image couleur en image à nuance de gris

b) égalisation éventuelle de l'histogramme (normalisation d'image)

c) détermination des points remarquables par l'algorithme "Fast Corners" (Jsfeat)

d) diminution des points remarquables avec homogéinisation dans l'espace (ANMS)

e) créations de descripteurs ORB pour les points résultants permettant (Jsfeat) :

f) de "matcher" les descripteurs / points remarquables des deux images ( Jsfeat )

g) et utilisation de Ransac pour filtrer parmi mes points récupérés à l'étape précédente ceux résultant "au mieux" d'une transformation reliant les 2 images

finalement :

h) détermination de 2 blocs "communs" et

i) calcul de la distance entre ces deux blocks.

Améliorations :

Citons le filtrage des paramètres d'entrée ... (function initialise_parametres_initiaux ) et ajout d'un dernier paramètre : le nombre minimal de "good matches" nécessaires avant de continuer le process (fixé à 10 dans CorrelImages à ce jour)

Utilisation :

https://aroug.eu/CorrelImages

Screenshots  
  • help.png
  Files folder image Files  
File Role Description
Accessible without login Plain text file index.php Example Example script
Accessible without login Plain text file jsfeat-min.js Data Auxiliary data
Accessible without login Plain text file jsfeat.js Data Auxiliary data
Accessible without login Plain text file LICENSE Lic. License text
Accessible without login Image file onepoint.png Icon Icon image
Accessible without login Plain text file README.md Doc. Documentation

 Version Control Unique User Downloads Download Rankings  
 100%
Total:40
This week:4
All time:10,702
This week:29Up