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

MATLAB Discussion :

Trouver les deux lignes les plus proches dans une Matrice (Image).


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Par défaut Trouver les deux lignes les plus proches dans une Matrice (Image).
    Bonjour

    Je cherche à détecter les deux lignes (1024 colonnes) les plus proches dans une matrice (Image) de 20 000 x 1024. J'utilise actuellement le code ci-dessous, mais j'aimerai optimiser celui-ci par des fonctions préexistante de Matlab afin de diminuer le temps de calcul qui est de deux heures par image actuellement. Merci d'avance.

    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
    for k = 1 : 20000
     
        for i = k+100 : size(Image,1)
     
            Ligne_temp = 0;
     
            for j = 1 : size(Image,2)
     
                Ligne_temp = Ligne_temp + (Image(i,j)-Image(k,j))^2;
     
            end
     
            if Ligne_temp < Ligne
     
                Ligne = Ligne_temp;
                Ligne_1 = k;
                Ligne_2 = i;
     
            end     
     
        end
     
    end
    Vincent

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    salut

    une possibilité en virant la 2ème boucle for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    distances = nan(size(Image,1),size(Image,1));
    for ii = 1: size(Image,1)
    % on parcours chaque ligne et on calcule ...
      distances(:,ii) = sum((Image - repmat(Image(ii,:),size(Image,1),1)).^2,2);% distance à toutes les autres lignes
      distances(ii,ii) = nan; % met à nan la distance avec elle même
    end
    [distMin,idxLigne1] = min(distances);
    [distMin,idxLigne2] = min(distMin);
    fprintf('les lignes %d et %d sont les plus proches et leur distance est %.1f\n',idxLigne1(idxLigne2),idxLigne2,distMin);
    dis moi si c'est plus rapide

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Par défaut
    La méthode est plus rapide, merci. Cependant il y a deux inconvénients:

    _ je veux deux lignes qui ne soient pas trop proches, car les lignes sont corrélées entre elles au plus proches voisins.
    _ cela va saturer la RAM, lorsque je vais augmenter la taille de ma matrice.

  4. #4
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    Citation Envoyé par vinzard Voir le message
    _ je veux deux lignes qui ne soient pas trop proches, car les lignes sont corrélées entre elles au plus proches voisins
    d'ou ton +100 ?
    ma méthode te calcule toutes les distances
    à toi de choisir dedans celles qui conviennent

    Citation Envoyé par vinzard Voir le message
    _ cela va saturer la RAM, lorsque je vais augmenter la taille de ma matrice.
    c'est le problème des gros tableaux
    cependant en instanciant pas certains (comme le repmat) on gagne un peu de mémoire
    cela dit ta méthode est encore plus économe en mémoire puisqu'elle ne crée aucun tableau
    mais tu coup ca prend du temps ... on peut pas tout avoir

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Par défaut
    Exactement on ne peut pas tout avoir.

    Oui le 100 permet de ne pas tenir compte des 100 lignes les plus proches pour éviter une mauvaise détection.

    Je garde ton code sous le coude pour les petites matrices.

    Merci beaucoup pour l'aide.

  6. #6
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    sinon dans ma méthode il te suffit de mettre à NaN les 100 diagonales de part et d'autre de la diagonale de la matrice distance

Discussions similaires

  1. Repérer le couple de points les plus proches dans des matrices
    Par lolo-40 dans le forum Mathématiques
    Réponses: 0
    Dernier message: 23/02/2014, 16h12
  2. Trouver la valeur la plus proche dans une ligne
    Par tavita987 dans le forum Excel
    Réponses: 5
    Dernier message: 05/02/2014, 11h12
  3. Latitude / longitude la plus proche dans une BD
    Par _cheval_ dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 02/09/2010, 00h46
  4. Réponses: 13
    Dernier message: 03/07/2009, 15h08
  5. trouver valeur la plus proche dans une colonne
    Par niepoc dans le forum Général Python
    Réponses: 10
    Dernier message: 05/06/2009, 15h02

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