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
A la recherche d'idées ! ... [ par LocalStone ]
Salut à tous, Alors voilà, je me suis lancé dans le codage d'un forum dont la caractéristique principale est une gestion avancée des images (par exemp
Header PNG louche? [ par MAsterC ]
Salut à tous!dans mon index en tête j'ai mis ceci comme Header:header ("Content-type: image/png");Biensur apres.. avec ce code nous serons
encore un prob easyphp 1.6 - 1.7 [ par Pretender ]
Salut,donc jai installé easyphp1.7 et le problème que j'ai maintenant est que:j'ai le code suivant:<?php include("config.php");?><html><
moteur de recherche [ par ManuAntibes ]
Salut Je voudrais faire un moteur de recherche sur une page intranet du boulot.Je veux faire le meme style de moteur de recherche que windows avec la
récupérer les résultats d'une recherche en Background... [ par baganda ]
Salut tout le monde.je veux savoir comment lancer une requête à partir d'une interface de recherche (que j'ai conçu) vers d'autres moteurs de recherch
|
Derniers Blogs
L'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIESL'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIES par odewit
La tendance est aux interfaces naturelles (NUI), et le keynote de Bill Buxton au MIX l'a bien souligné.
La charte graphique et ergonomique de Windows Phone 7 a donc été entièrement repensée en vue d'obtenir un maximum d'efficacité sur ce point. En re...
Cliquez pour lire la suite de l'article par odewit COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|