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 :

Corrélation par SAD (somme des différences absolues)


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 117
    Points : 30
    Points
    30
    Par défaut Corrélation par SAD (somme des différences absolues)
    Bonsoir tout le monde,

    J'ai 2 images dont je veux chercher la correspondance par corrélation en utilisant la somme des différences absolues (SAD). J'ai essayé le programme ci-dessous, mais il m'affiche le message d'erreur suivant:
    ??? Attempted to access FenD(1,200); index out of bounds because
    size(FenD)=[1,199].
    
    Error in ==> stereoDP at 41
                 I1=FenD(1,j);
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    function stereoDP(BW1,BW2)
     
    %lire les deux images
    I=imread('ImageDroite.png'); 
    J=imread('ImageGauche.png');
    Im=imresize(rgb2gray(I),[256 256]); 
    Jm=imresize(rgb2gray(J),[256 256]);
     
    IG0= edge(Im,'prewitt');
    ID0= edge(Jm,'prewitt');
     
    [M,N]=size(IG0)
    Fen=9;
    FenG=zeros(1,Fen*2+1);
     
    IG = zeros(M+(2*Fen),N+(2*Fen));
    ID = zeros(M+(2*Fen),N+(2*Fen));
     
    IG(Fen+1:Fen+M,Fen+1:Fen+N) = IG0;
    ID(Fen+1:Fen+M,Fen+1:Fen+N) = ID0;
     
    %%%%%%%%
     
    %%%%%%
    D = zeros(size(IG0));
     
    % Calcule du SAD
    barre = waitbar(0,'Patientez...');
    for L=1+Fen:M+Fen,
        pause(0.1); 
        D = zeros(N,N);
     
        for i=1:N
            for j=1:N
     
                 FenG = IG(L,i:(i)+(2*Fen));
                 FenD = ID(L,j:(j)+(2*Fen)); 
     
                 I=FenG(1,i);
                 I1=FenD(1,j);
     
                 PROD=I*I1;
                 Dist(i,j)=sum(sum(FenG.*FenD));
            end
        end
     
        %  Chercher le chemin minimal   
        [p,q,Dist] = stereoDP2(Dist);
     
     
        for k=1:N
        % Sauvegarder la disparité
                     D(L,k)=p(1,k)-q(1,k);
        end
     
         waitbar(L/(M+Fen),barre);
     
    end
    close(barre)
     
    % Affichage du Resultat
    figure;
    subplot(2,2,1);imshow(IG0);
    subplot(2,2,2);imshow(ID0);
    subplot(2,2,3);imagesc(D);colormap('gray');title('La disparité');
     
    end
    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Attempted to access variable(n); index out of bounds because numel(variable)=(n-1).

    Selon les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FenG = IG(L,i:(i)+(2*Fen));
    FenD = ID(L,j:(j)+(2*Fen));
    FenG et FenD sont des vecteurs de taille 2*Fen+1.
    Or i et j varient de 1 à N.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 117
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Je désire appliquer la formule de SAD (pièce jointe) pour trouver la carte de disparité, mais je crois que le raisonnement de mon programme est faux.

    Si vous avez des propositions pour la programmer,je serai reconnaissant.

    Merci
    Images attachées Images attachées  

  4. #4
    Invité
    Invité(e)
    Par défaut
    Si tout le code que tu nous montres est sensé appliquer seulement cette formule, alors oui je confirme que tu t'y prends mal.
    A quoi correspond ta variable Fen et ce que tu essais de faire avec?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 117
    Points : 30
    Points
    30
    Par défaut
    Re,

    Fen : une fenêtre qui sert à balayer toute l'image à la recherche des points correspondants.

    D'abord,je détecte les contours de chaque image,puis je vise à réaliser un appariement entre ces contours grâce à la formule de SAD pour obtenir la carte de disparité.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Et donc il est où le calcul du SAD au final ?

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 117
    Points : 30
    Points
    30
    Par défaut
    Cest ça le problème,je sais pas vraiment comment programmer la formule et tirer la carte de disparité.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 117
    Points : 30
    Points
    30
    Par défaut
    Salut,


    Seules les valeurs de 128 et plus pour Fen ,me permet d’éviter le message d'erreur:

    ??? Attempted to access FenD(1,200); index out of bounds because
    size(FenD)=[1,199].

    Error in ==> stereoDP at 41
    I1=FenD(1,j);
    Aec la valeur de Fen=128,je me retrouve avec un autre message:

    ??? Error using ==> stereoDP
    Too many output arguments.

    Error in ==> stereoDP at 49
    [p,q] = stereoDP(Dist);
    Merci de m'aider à faire tourner ce programme.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Mon explication pour la première erreur n'a pas changée

    Pour la deuxième, je te souligne le prototype de ta fonction stereoDP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function stereoDP(BW1,BW2)
    Inutile de te diriger vers la FAQ erreurs que tu connais déjà ?

  10. #10
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 117
    Points : 30
    Points
    30
    Par défaut
    Est ce qu'il existe un algorithme plus simple pour calculer la disparité avec SAD sans utiliser la fonction stereoDP?

    J'ai besoin des idées au niveau de l'algorithme.

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/12/2009, 15h43
  2. Réponses: 3
    Dernier message: 28/03/2008, 14h48
  3. Réponses: 3
    Dernier message: 24/08/2006, 11h56
  4. rave report (somme des champs par pages)
    Par mozcity dans le forum Composants VCL
    Réponses: 3
    Dernier message: 17/03/2006, 21h51

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