IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Vitesse dans des sous boucles.


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Par défaut Vitesse dans des sous boucles.
    Bonjour,
    je travaille dans "public class DUImg extends BufferedImage{"
    Je suis donc un extends de BufferedImage.
    Le but de ma fonction est de savoir si ou se trouve la sous-image.
    imgSub contient donc une image de type BufferedImage
    Pour éviter les problèmes d'approximation, je travaille sur des bmp.
    Dans le cas ou l'image n'est pas trouvée, je renvoi un tableau contenant -1/-1

    J'ai donc une complexité dans le pire des cas de :
    this.h * this.w * sub.h * sub.w

    Pour accélérer mon code, j'ai donc ajouté les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		width_end	-= imgSub.getWidth()-1;
    		height_end	-= imgSub.getWidth()-1;
    ( visible dans le code de la fonction en commentaire. )
    Placé hors boucle pour éviter d'avoir ma zone de recherche qui diminue, je compte ainsi obtenir une complexités de :
    (this.h-sub.h+1) * (this.w-sub.w+1) * sub.h * sub.w
    Loin d'être parfait, mais déjà nettement mieux.

    Mon probléme, je ne trouve plus les sous-images dans une image.
    Pourquoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    	public Integer[] findInto(BufferedImage imgSub,
    			Integer width_ini, Integer height_ini,
    			Integer width_end, Integer height_end) {
    		Integer[] posi = new Integer[2];
    		posi[0] = -1;
    		posi[1] = -1;
    		// L'image peut-elle être contenu ?
    		if ( width_end-width_ini<imgSub.getWidth() )
    			return posi;
    		if ( height_end-height_ini<imgSub.getHeight() )
    			return posi;
     
    		// Accélération des conditions de recherche :
    		/*
    		width_end	-= imgSub.getWidth()-1;
    		height_end	-= imgSub.getWidth()-1;
    		*/
     
    		// Recherche :
    		Boolean test = null;
    		for(int width=width_ini ; width<width_end ; width++){
    			for(int height=height_ini ; height<height_end ; height++){
    				test = true;
    				for(int widthSub=0 ; widthSub<imgSub.getWidth() ; widthSub++){
    					for(int heightSub=0 ; heightSub<imgSub.getHeight() ; heightSub++){
    						if (
    							this.getRGB(width+widthSub, height+heightSub)
    							!=
    							imgSub.getRGB(widthSub, heightSub)
    							) {
    							test		= false;
    							widthSub	= imgSub.getWidth();
    							heightSub	= imgSub.getHeight();
    						}
    					}
    				}
    				if ( test ) {
    					posi[0] = width;
    					posi[1] = height;
    					return posi;
    				}
    			}
    		}
    		return posi;// false
    	}

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2010
    Messages : 59
    Par défaut
    Bonjour,

    tu dis qu'en ajoutant ces deux lignes ça ne marche plus, ça viendrait donc de ces 2 lignes, n'y a t-il pas une confusion avec le -1 qui serait plutôt +1?
    je dis ça mais je ne suis pas sur.

    Par contre ton algo est assez couteux, as tu réfléchi à une autre façon de faire?

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2010
    Messages : 59
    Par défaut
    ça peut aussi être du à tes champs Integer width_end et Integer height_end par rapport à ce que tu attends et ce que tu reçois des fonctions imgSub.getWidth() et imgSub.getHeight().

Discussions similaires

  1. Requête filtrée dans des sous-formulaires
    Par Beavis Man dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/12/2006, 00h31
  2. modules dans des sous-répertoires
    Par lexsteens dans le forum Modules
    Réponses: 2
    Dernier message: 17/11/2006, 11h56
  3. Recherche de fichiers dans des sous répertoires
    Par Mimi Bulles dans le forum Langage
    Réponses: 8
    Dernier message: 25/04/2006, 17h41
  4. Filtrages dans des sous-formulaires
    Par Smint dans le forum Access
    Réponses: 4
    Dernier message: 20/09/2005, 14h56
  5. Chemin d'accès des fichiers dans des sous rep
    Par Le Veilleur dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/11/2004, 15h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo