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 :

Transformation non lineaire d'une matrice


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Transformation non lineaire d'une matrice
    Bonjour,

    Je cherche à optimiser l'opération suivante : je possède une matrice d'entrée (représentant une image par ex.) de dimension NxN pixels. Je possède aussi 2 matrices de "transfert" qui m'indiquent localement (en (i,j)) le déplacement en x et y (en pixel) du pixel (i,j) de ma matrice d'entrée pour générer ma matrice de sortie (l'objectif étant de simuler une image localement distordue).

    Actuellement, je réalise l'opération de "transformation" par 2 boucles "for" en décalant la matrice d'entrée via la fonction "circshift" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for jj = 1 : N
        for ii = 1 : N
     
            mire_entree_decalee=circshift(mire_entree,[round(decal_x(ii,jj)) round(decal_y(ii,jj))]);
            %decal_x = matrice de transfert en X
            %decal_y = matrice de transfert en Y
     
            mire_sortie(ii,jj)=mire_entree_decalee(ii,jj);
     
       end
    end
    Ces 2 boucles "for" sont consommatrices de temps de calcul.
    Je me demandais si il n'existerait pas une solution plus astucieuse pour économiser en temps de calcul !

    Merci par avance de vos réponses,

    O.M.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Suite à investigation (longue) sur le net, mon problème s'appelle "inverse mapping".
    Voir : http://eeweb.poly.edu/~yao/EL5123/le...ageWarping.pdf

    Du document en référence, une solution rapide est d'utiliser INTERP2.
    Voici comment j'ai modifié mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [X,Y]=meshgrid((1:N)); %de la taille de mon image qui fait NxN pixels
    XI=(X-decal_x);    %Nouvelles coordonnées en X
    YI=(Y-decal_y);    %Nouvelles coordonnées en Y
    mire_sortie=interp2(X,Y,mire_entree,XI,YI,'linear');
    mire_sortie(isnan(mire_tip_tilt))=0;  %Nécessaire car soucis sur les bords de l'image

    Outre le gain de temps, cette solution offre la possibilité d'utiliser une interpolation, ce qui n'était pas mon cas précédemment.

Discussions similaires

  1. Indice non entier dans une matrice
    Par abzi46 dans le forum MATLAB
    Réponses: 2
    Dernier message: 20/04/2009, 15h55
  2. Garder les valeurs non nulles dans une matrice
    Par mfontan dans le forum MATLAB
    Réponses: 4
    Dernier message: 03/04/2009, 13h42
  3. Extraire les valeurs non nulles d'une matrice
    Par kwatz dans le forum MATLAB
    Réponses: 15
    Dernier message: 06/03/2009, 11h15
  4. Réponses: 3
    Dernier message: 05/12/2008, 03h39
  5. [Débutant] Recherche de minimum non nul dans une matrice
    Par sebastien69 dans le forum MATLAB
    Réponses: 2
    Dernier message: 05/06/2007, 16h00

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