Accueil > > > RECHERCHE DE MOTIF DANS UNE IMAGE
RECHERCHE DE MOTIF DANS UNE IMAGE
Information sur la source
Description
Ce script permet de rechercher un motif dans une image. On lui donne deux images : le motif, et l'image dans laquelle chercher. Il renvoie en retour un tableau contenant les coordonnées (de l'image dans laquelle on recherche) qui sont les points d'origine où le motif est présent; ainsi qu'un delta « d » représentant un indice de différence (plus il est faible, plus le risque d'erreur est faible). De nombreuses améliorations sont possibles, notamment en terme de vitesse d'exécution, je suis ouvert à toute évolution. Plus d'infos à venir sur http://www.parse-error.com
Source
- <?php
- /**
- * Recherche de motif dans une image
- *
- * @copyright Copyright (C) 2010 Parse Error http://www.parse-error.com
- */
-
- // Retourne la différence entre deux points RGB (plus la différence est proche de 0, plus les points sont similaires)
- function returnDiff($p1Red,$p1Green,$p1Blue,$p2Red,$p2Green,$p2Blue)
- {
- return sqrt(pow(($p1Red - $p2Red),2) + pow(($p1Green - $p2Green),2) + pow(($p1Blue - $p2Blue),2) );
- }
- // Recherche de motif
- function rechercheMotif($img_motif, $img_origine, $indice)
- {
- $image_motif = imagecreatefromjpeg($img_motif);
- $image_org = imagecreatefromjpeg($img_origine);
-
- // Récuparation des dimensions des images
- $x_motif=imagesx($image_motif);
- $y_motif=imagesy($image_motif);
-
- $x_org=imagesx($image_org);
- $y_org=imagesy($image_org);
-
- // On mappe le motif et on stocke ses composantes
- for($cpt_x=0;$cpt_x<$x_motif;$cpt_x++)
- {
- for($cpt_y=0;$cpt_y<$y_motif;$cpt_y++)
- {
- $color_index = imagecolorat($image_motif, $cpt_x, $cpt_y);
- $color_translate = imagecolorsforindex($image_motif, $color_index);
-
- $tab_motif[$cpt_x][$cpt_y]['R'] = $color_translate['red'];
- $tab_motif[$cpt_x][$cpt_y]['G'] = $color_translate['green'];
- $tab_motif[$cpt_x][$cpt_y]['B'] = $color_translate['blue'];
- }
- }
- // On mappe l'image et on stocke ses composantes
- for($cpt_x=0;$cpt_x<$x_org;$cpt_x++)
- {
- for($cpt_y=0;$cpt_y<$y_org;$cpt_y++)
- {
- $color_index = imagecolorat($image_org, $cpt_x, $cpt_y);
- $color_translate = imagecolorsforindex($image_org, $color_index);
-
- $tab_org[$cpt_x][$cpt_y]['R'] = $color_translate['red'];
- $tab_org[$cpt_x][$cpt_y]['G'] = $color_translate['green'];
- $tab_org[$cpt_x][$cpt_y]['B'] = $color_translate['blue'];
- }
- }
- $compteur=0;
- // On parcourt l'image d'origine
- for($cpt_y_org=0;$cpt_y_org<$y_org;$cpt_y_org++)
- {
- for($cpt_x_org=0;$cpt_x_org<$x_org;$cpt_x_org++)
- {
- // Pour chaque point de l'image d'origine, on vérifie la probabilité qu'il soit le point d'origine (0,0) du motif
- $total_diff=0;
- for($cpt_y_motif=0;$cpt_y_motif<$y_motif;$cpt_y_motif++)
- {
- for($cpt_x_motif=0;$cpt_x_motif<$x_motif;$cpt_x_motif++)
- {
- // Calcul de l'indice de différence
- $total_diff+=returnDiff($tab_motif[$cpt_x_motif][$cpt_y_motif]['R'],$tab_motif[$cpt_x_motif][$cpt_y_motif]['G'],$tab_motif[$cpt_x_motif][$cpt_y_motif]['B'],$tab_org[$cpt_x_org+$cpt_x_motif][$cpt_y_org+$cpt_y_motif]['R'],$tab_org[$cpt_x_org+$cpt_x_motif][$cpt_y_org+$cpt_y_motif]['G'],$tab_org[$cpt_x_org+$cpt_x_motif][$cpt_y_org+$cpt_y_motif]['B']);
- }
- }
- // Si l'indice de différence est inférieur à la valeur de l'indice de tolérance, on considère que le motif a été trouvé
- if($total_diff<$indice)
- {
- $compteur++;
- $result[$compteur]['x']=$cpt_x_org;
- $result[$compteur]['y']=$cpt_y_org;
- $result[$compteur]['d']=$total_diff;
- }
- }
- }
- if(isset($result))
- {
- return $result;
- }
- }
-
- // Appel de la fonction de recherche (50= tolérance de recherche, plus le nombre est faible, moins la recherche est tolérante).
- $resultTab=rechercheMotif('motif.jpg','image.jpg', 50);
-
- if(is_array($resultTab))
- {
- echo '<pre>'.print_r($resultTab,true).'</pre>';
- }
- ?>
<?php
/**
* Recherche de motif dans une image
*
* @copyright Copyright (C) 2010 Parse Error http://www.parse-error.com
*/
// Retourne la différence entre deux points RGB (plus la différence est proche de 0, plus les points sont similaires)
function returnDiff($p1Red,$p1Green,$p1Blue,$p2Red,$p2Green,$p2Blue)
{
return sqrt(pow(($p1Red - $p2Red),2) + pow(($p1Green - $p2Green),2) + pow(($p1Blue - $p2Blue),2) );
}
// Recherche de motif
function rechercheMotif($img_motif, $img_origine, $indice)
{
$image_motif = imagecreatefromjpeg($img_motif);
$image_org = imagecreatefromjpeg($img_origine);
// Récuparation des dimensions des images
$x_motif=imagesx($image_motif);
$y_motif=imagesy($image_motif);
$x_org=imagesx($image_org);
$y_org=imagesy($image_org);
// On mappe le motif et on stocke ses composantes
for($cpt_x=0;$cpt_x<$x_motif;$cpt_x++)
{
for($cpt_y=0;$cpt_y<$y_motif;$cpt_y++)
{
$color_index = imagecolorat($image_motif, $cpt_x, $cpt_y);
$color_translate = imagecolorsforindex($image_motif, $color_index);
$tab_motif[$cpt_x][$cpt_y]['R'] = $color_translate['red'];
$tab_motif[$cpt_x][$cpt_y]['G'] = $color_translate['green'];
$tab_motif[$cpt_x][$cpt_y]['B'] = $color_translate['blue'];
}
}
// On mappe l'image et on stocke ses composantes
for($cpt_x=0;$cpt_x<$x_org;$cpt_x++)
{
for($cpt_y=0;$cpt_y<$y_org;$cpt_y++)
{
$color_index = imagecolorat($image_org, $cpt_x, $cpt_y);
$color_translate = imagecolorsforindex($image_org, $color_index);
$tab_org[$cpt_x][$cpt_y]['R'] = $color_translate['red'];
$tab_org[$cpt_x][$cpt_y]['G'] = $color_translate['green'];
$tab_org[$cpt_x][$cpt_y]['B'] = $color_translate['blue'];
}
}
$compteur=0;
// On parcourt l'image d'origine
for($cpt_y_org=0;$cpt_y_org<$y_org;$cpt_y_org++)
{
for($cpt_x_org=0;$cpt_x_org<$x_org;$cpt_x_org++)
{
// Pour chaque point de l'image d'origine, on vérifie la probabilité qu'il soit le point d'origine (0,0) du motif
$total_diff=0;
for($cpt_y_motif=0;$cpt_y_motif<$y_motif;$cpt_y_motif++)
{
for($cpt_x_motif=0;$cpt_x_motif<$x_motif;$cpt_x_motif++)
{
// Calcul de l'indice de différence
$total_diff+=returnDiff($tab_motif[$cpt_x_motif][$cpt_y_motif]['R'],$tab_motif[$cpt_x_motif][$cpt_y_motif]['G'],$tab_motif[$cpt_x_motif][$cpt_y_motif]['B'],$tab_org[$cpt_x_org+$cpt_x_motif][$cpt_y_org+$cpt_y_motif]['R'],$tab_org[$cpt_x_org+$cpt_x_motif][$cpt_y_org+$cpt_y_motif]['G'],$tab_org[$cpt_x_org+$cpt_x_motif][$cpt_y_org+$cpt_y_motif]['B']);
}
}
// Si l'indice de différence est inférieur à la valeur de l'indice de tolérance, on considère que le motif a été trouvé
if($total_diff<$indice)
{
$compteur++;
$result[$compteur]['x']=$cpt_x_org;
$result[$compteur]['y']=$cpt_y_org;
$result[$compteur]['d']=$total_diff;
}
}
}
if(isset($result))
{
return $result;
}
}
// Appel de la fonction de recherche (50= tolérance de recherche, plus le nombre est faible, moins la recherche est tolérante).
$resultTab=rechercheMotif('motif.jpg','image.jpg', 50);
if(is_array($resultTab))
{
echo '<pre>'.print_r($resultTab,true).'</pre>';
}
?>
Historique
- 09 février 2010 14:15:39 :
- Modification de la description
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Recherche script galerie d'images [ par booskull ]
Salut !J'aimerais savoir s'il existe un script php gratuit qui fasse:-liste des numeros d'images juste en dessous de l'image en cours-gestion de comme
catalogue [ par patrick_deb ]
Bonjour à tousJe voudrais faire un catalogue sauf je n'ai pas d'idée sur un psujet.Je voudrais faire visualiser les images de mon catalogue en petit f
grille d'image en php via un moteur de recherche [ par costacurta ]
ImageAlpes.fr
Recherche programmateur PHP bénévole [ par Gibouldingue ]
Bien le bonjour à tous !Comme il l'est inscrit dans le titre, je recherche un programmateur PHP qui pourrait m'aider dans la créations de mon site Web
probleme affichage résultat (resultat une image) [ par tarroukt ]
Salut forum,j'ai un probleme qui m'a bloqué, j'ai déniché sur internet un script pour moteur de recherche multi champs, aparament ça ne marche pas , v
Moteur de recherche associé a ma galerie PHOTO (2 Q. en 1) [ par mastermh73 ]
[i]2 Questions en 1 [b]Bonjour tout le monde[/b], je ne sais pas si c possible, de créer un moteur de recherche associé a ma galerie d'image qui ser
[BAR]Moteur de recherche associé a ma galerie PHOTO (2 Q. en 1) [ par mastermh73 ]
[i]2 Questions en 1 [b]Bonjour tout le monde[/b], je ne sais pas si c possible, de créer un moteur de recherche associé a ma galerie d'image qui ser
Moteur de recherche associé a ma galerie PHOTO (2 Q. en 1) [ par mastermh73 ]
[i]2 Questions en 1 [b]Bonjour tout le monde[/b], je ne sais pas si c possible, de créer un moteur de recherche associé a ma galerie d'image qui ser
upload d'une image pour un article [ par mathieuweb86 ]
Bonjour, à tous je recherche à réaliser un script qui va me permettre de upload une image sur mon serveur, mais cette image va être uploader pour sui
location de voitures [ par kwikevin ]
Bonjour. j'ai un projet de developper un site web pour les locations de voitures.En effet la procédure pour nos clients doit se faire comme suit: 1.
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|