begin process at 2010 03 20 23:42:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > RECHERCHE DE MOTIF DANS UNE IMAGE

RECHERCHE DE MOTIF DANS UNE IMAGE


 Information sur la source

Note :
Aucune note
Catégorie :Graphique Classé sous :motif, image, watermark, recherche Niveau :Débutant Date de création :09/02/2010 Date de mise à jour :09/02/2010 14:15:38 Vu / téléchargé :1 394 / 97

Auteur : ParseError

Ecrire un message privé
Site perso
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 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>'; 
}
?>


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

09 février 2010 14:15:39 :
Modification de la description

 Sources du même auteur

Source avec Zip GÉNÉRATEUR DE BALISE META KEYWORDS

 Sources de la même categorie

Source avec une capture DES HISTOGRAMES , CAMEMBERT 3D ET ÉCLATÉS CRÉÉ AU VOL EN PH... par zozo14
AJOUTER UN ARRIÈRE PLAN SUR UNE IMAGE par digitaldax
REDIMENSIONNER UNE IMAGE EN PHP par digitaldax
BARRES PARAMÉTRABLES EN DÉGRADÉ DE COULEUR ET AVEC TEXTE DA... par hornetbzz
Source avec Zip Source avec une capture GALERIE PHOTO SIMPLE À GÉRER par francky6691

 Sources en rapport avec celle ci

AJOUTER UN ARRIÈRE PLAN SUR UNE IMAGE par digitaldax
REDIMENSIONNER UNE IMAGE EN PHP par digitaldax
SEARCHMOTS par boscoauhunier
Source avec Zip GESTION_ENSEIGNANTS par Elmarzougui
REMPLACER DES LETTRES EN IMAGES par Damtux972

Commentaires et avis

Commentaire de TheSin le 10/02/2010 13:56:46

Salut
J'ai pas testé, mais je pense que remplacer simplement "sqrt(pow((a-b),2)" par "abs(a-b)" devrait légèrement accélérer le script et surtout le rendre légèrement plus compréhensible et simple pour ce calcul.

Commentaire de TheSin le 10/02/2010 14:00:18

oups, j'ai rien dit, j'ai mal lu le calcul .... honte à moi, désolé.

Commentaire de ParseError le 10/02/2010 14:59:42

Pas grave ;-)
Les améliorations peuvent déjà porter sur des vérifications des effets de bord, à savoir que s'il ne reste que 10 pixels a droite, il ne sert a rien de vérifier si un motif de 20 pixels de large débute à cet endroit (à moins qu'on veuille gérer les motifs incomplets, mais c'est une autre histoire).

 Ajouter un commentaire


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:&lt;?php include("config.php");?&gt;&lt;html&gt;< 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,292 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales