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

Images Discussion :

Redimensionner la taille d'une matrice associée à une image


Sujet :

Images

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Chine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Redimensionner la taille d'une matrice associée à une image
    Bonjour,

    Je veux faire la différence entre deux images pour voir des taches. Mais pour utiliser la fonction K=difference(A, B); j'ai dois avoir deux images de la même taille, ce qui nest pas le cas. J'ai écrit une fonction pour ajouter des lignes noires en bas de la matrice et des colonnes noires à droite de celle-ci pour qu'elle aient la même taille. Cependant mon programme ne fonctionne pas et je ne trouve pas mon erreur.

    L'erreur affichée par MATLAB est:
    Error using vertcat
    CAT arguments dimensions are not consistent.
    Error in sizeMatrix (line 13)
        fixed_row=[fixed ; New];

    Est-ce que quelqu'un sait comment résoudre ce problème ? Merci d'avance.

    Ma fonction est:

    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
    function [ A,B ] = sizeMatrix( I,J )
     
    final_moving=J;
    fixed=I;
     
    rowMax_fixed=size(fixed,1);
    colMax_fixed=size(fixed,2);
    rowMax_final_moving=size(final_moving,1);
    colMax_final_moving=size(final_moving,2);
     
    if rowMax_final_moving > rowMax_fixed
        New=zeros(rowMax_final_moving-rowMax_fixed, colMax_fixed);
        fixed_row=[fixed ; New];
     
        colMax_fixed_row=size(fixed_row,2);
        rowMax_fixed_row=size(fixed_row,1);
     
        if colMax_final_moving > colMax_fixed_row
            NewB=zeros(rowMax_fixed_row, colMax_final_moving-colMax_fixed_row);
            fixed_row_col=[fixed_row , NewB];
     
            A=fixed_row_col;
            B=final_moving;  
        else 
            NewB=zeros(rowMax_final_moving, colMax_fixed_row-colMax_final_moving);
            final_moving_col=[final_moving , NewB];
     
            A=fixed_row;
            B=final_moving_col;
        end
    elseif rowMax_final_moving == rowMax_fixed && colMax_final_moving == colMax_fixed
        A=fixed;
        B=final_moving;
    else 
        New=zeros(rowMax_fixed-rowMax_final_moving, colMax_final_moving);
        final_moving_row=[final_moving; New];
     
        colMax_final_moving_row=size(final_moving_row,2);
        rowMax_final_moving_row=size(final_moving_row,1);
     
        if colMax_final_moving_row > colMax_fixed
            NewB=zeros(rowMax_fixed, colMax_final_moving_row-colMax_fixed);
            fixed_col=[fixed , NewB];
     
            A=fixed_col;
            B=final_moving_row;
        else 
            NewB=zeros(rowMax_final_moving_row, colMax_fixed-colMax_final_moving_row);
            final_moving_row_col=[final_moving_row , NewB];
     
            A=fixed;
            B=final_moving_row_col;
        end
    end
    A;
    B;
     
    end

  2. #2
    Membre habitué
    Profil pro
    Doctorante
    Inscrit en
    Mai 2012
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mai 2012
    Messages : 130
    Points : 197
    Points
    197
    Par défaut
    Chez moi ton code marche sans erreur.
    Je te conseille de faire un clear all. Et puis d'enlever le end de la dernière ligne. En syntaxe Matlab il n'y a pas de end à la fin d'une function.

    Réessaye comme ça et si tu as encore des soucis, donne-nous le nouveau message d'erreur que tu auras.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Chine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Merci pour ta réponse!

    J'ai enlevé le end de ma fonction et rajouté un clear all. Mais j'ai toujours la même erreur s'affichant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Error using vertcat
    CAT arguments dimensions are not consistent.
     
    Error in sizeMatrix (line 13)
        fixed_row=[fixed ; New];
     
    Error in testSize (line 7)
    [fixed_comp_size, overlay2_size] = sizeMatrix (fixed_comp,overlay2);
    Voici le main et mes images de test en pièce jointe :
    Peut-être que l'erreur est induite par mon image?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    clear all
    close all
     
    fixed_comp=imread('fixed.jpg');
    overlay2=imread('final_moving.jpg');
     
    [fixed_comp_size, overlay2_size] = sizeMatrix (fixed_comp,overlay2);
    imtool(overlay2_size);
    imtool(fixed_comp_size);
     
    diff_fixed_overlay = difference (fixed_comp_size, overlay2_size);
    diff_fixed_overlay=rgb2gray(diff_fixed_overlay);
     
    imtool(diff_fixed_overlay);
    Images attachées Images attachées   

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Chine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Re bonjour,

    J'ai essayé une autre méthode peut être plus simple : au lieu de rajouter des lignes et/ou colonnes a la plus petite des images, je crée une matrice de 0 de la taille maximale et je copie la plus petite image dedans. Aucun message d'erreur ne s'affiche mais les bords de l'image recréée ne sont pas nets et sa couleur modifiée (seul le rouge apparait avec R=1 G=0 B=0 au lieu de R=0.85 G=0.18 B=0.87) , je ne comprends pas pourquoi.

    Fonction:

    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
    function [ A,B ] = sizeMatrix2( I,J )
     
    [i1,i2,i3] = size(I);
    [j1,j2,j3] = size(J);
     
    if j1>i1 && j2>i2 % size J > I
        A = zeros(j1,j2,j3); 
        for r=1:i1
            for c=1:i2
                    A(r,c) = I (r,c);
            end
        end
        B = im2double(J);
     
    elseif j1<i1 && j2<i2 % size J < I
        B = zeros(i1,i2,i3); 
        for r= 1: j1
            for c=1: j2
                for o=1:j3
                    B(r,c,o) = J (r,c,o); 
                end
            end
        end
        A = I;
     
    elseif j1<i1 && j2>i2 % nb row J < I and nb col J > I
        B = zeros(i1,j2,j3); 
        A = zeros(i1,j2,i3); 
        for r= 1: j1
            for c=1: j2
                for o=1 : j3
                    B(r,c,o) = J(r,c,o);
                end
            end 
        end
        for r=1:i1
            for c=1:i2
                for o=1: i3
                    A(r,c) = I (r,c);
                end
            end
        end
     
    else    %j1>i1 && j2<i2  nb row J > I and nb col J < I
        B = zeros(j1,i2,j3); 
        A = zeros(j1,i2,i3); 
        for r= 1: j1
            for c=1: j2
                for o=1: j3
                    B(r,c,o) = J(r,c,o);
                end
            end 
        end
        for r=1:i1
            for c=1:i2
                for o=1: i3
                    A(r,c) = I (r,c);
                end
            end
        end
    end
     
    A;
    B;
    Image agrandie :
    Images attachées Images attachées  

  5. #5
    Membre habitué
    Profil pro
    Doctorante
    Inscrit en
    Mai 2012
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mai 2012
    Messages : 130
    Points : 197
    Points
    197
    Par défaut
    Je crois que j'ai compris ce qui ne va pas dans ton premier code (je n'ai pas regardé au code du dernier post). A la ligne 13, l'instruction que tu donnes ne peut fonctionner que si tu travailles avec des images en niveaux de gris (= 2 dimensions). Dans le cas d'une image RGB, on travaille avec des objets en 3 dimensions ( = lignes * colonnes * 3).
    Donc, quand tu veux concaténer les nouvelles lignes/colonnes, il faut en fait que dans un premier temps tu crées un volume de zéros. Ensuite, tu devrais utiliser la fonction cat pour concaténer ce nouveau "volume" à ton image RGB de départ. J'espère que mon explication et claire

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Chine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Ouiiii !! Ça fonctionne je crois ! C'était bien ça : New=zeros(rowMax_final_moving-rowMax_fixed, colMax_fixed,3); .
    Enfin plus de message d'erreur dans tous les cas.
    Merci beaucoup pour ton aide!

Discussions similaires

  1. Remplacement d'une ligne par une autre dans une matrice
    Par Mathematiker dans le forum Scilab
    Réponses: 4
    Dernier message: 17/02/2015, 14h57
  2. Réponses: 7
    Dernier message: 14/01/2014, 10h45
  3. Passer d'une matrice boolean à une matrice int
    Par artemis93 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 23/03/2011, 14h42
  4. supprimer une ligne et une colonne d'une matrice
    Par nessing dans le forum C++Builder
    Réponses: 8
    Dernier message: 14/08/2007, 15h42
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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