begin process at 2012 02 04 23:38:14
  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é :3 168 / 149

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 Zip Source avec une capture CAMEMBERT BD par dardelphi
Source avec une capture AMÉLIORATION : CAMEMBERT par asphator
GESTION DE COULEUR par manuche
Source avec Zip NAVIGATOR (+CSSDETECTOR) par xXVoxPopuliXx
COMMENT, AVEC GD, DESSINER UN RECTANGLE TRANSPARENT PLEIN AV... par Rainbow

 Sources en rapport avec celle ci

Source avec Zip RECHERCHE DES DOUBLONS DANS UNE TABLE MYSQL EN SÉLECTIONNANT... par aladec2007
Source avec Zip Source avec une capture MOTEUR DE RECHERCHE SUR BASE MYSQL FULLTEXT ET BOOLEAN AVEC ... par cod57
Source avec Zip Source avec une capture GESTIONNAIRE DE NEWS BASIQUE AVEC UPLOAD D'IMAGES par cod57
Source avec Zip Source avec une capture UPLOADEUR DE FICHIERS MULTIPLES V1 par cod57
RECHERCHE PAR MOT CLÉ DANS TOUS LES CHAMPS DE TOUTES LES TAB... par gabay

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 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.


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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 : 1,014 sec (3)

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