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 :

Faire centre de masse pour une image complete lit avec imread


Sujet :

MATLAB

  1. #1
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut Faire centre de masse pour une image complete lit avec imread
    Je veux faire un script matlab (.m) qui permet faire le calcul du centre de masse d'une certaine image.

    Pouvez vous m'aider:

    Voila ce que j'ai fais pour l'instant: (center_of_mass_image.m)

    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
     
    clc;    %preinitialisations a chaque script matlab
    clear all;
    close all;
     
    disp('Application pour faire le calcul du centre de masse pour une image entiere lis avec imread'); %title de l'application
     
    % i c'est une image gray , j- c'est une image binaire
     
    i=imread('cameraman.tif');imshow(i) % je lis dans ma variable i l'image
    j = im2bw(i, 0.4); % Threshold en image binaire (avec blanc et noir seulement)
    valeur_threshold = 100;
    j = imfill(j, 'holes');
     
    subplot(3,2,1); imagesc(i); colormap(gray(256)); title
    ('Image initielle');
     
    subplot(3,2,2); imagesc(j); colormap(gray(256)); 
    title('Image binaire');
     
    label= bwlabel(j, 8); %etiquetation de l'image avec bwlabel
    couleurs_labels= label2rgb (labeledImage, 'hsv', 'k', 'shuffle');%couleurs aleatoires pour les labels
     
    subplot(3,2,3); imagesc(label); title('Image avec des regions etiquetees avec la fonction bwlabel');
     
    subplot(3,2,4); imagesc(couleurs_labels); title('Couleur aleatoires pour les labels');
     
    measurer_taches_d'encre= regionprops(labeledImage, 'all'); %toutes les proprietes des taches d'encre de l'image
    numero_des_taches= size(mesurer_taches, 1);
     
    subplot(3,2,5); imagesc(i); title('Exposer les elements');
     
    hold on; %retiens tous les graphes avec subplot
     
    %Fonction bwboundaries retourne un cell array ou chaque cellule contient les coordonnes (ligne et colonne) pour chaque objet de l'image.
     
    frontières = bwboundaries(j); % ou j c'est l'image binaire
     
    for compteur = 1 : numero_des_taches
    tache_courante = boundaries{k};
    plot(tache_courante(:,2), tache_courant(:,1), 'g', 'LineWidth', 2); %couleur vert dimension 2 avec la propriete LineWidth
    end
    hold off; %hold off pour tous les subplots
     
    for k = 1 : numero_des_taches % parcourir tous les taches
    lister_les_pixels = mesurer_taches(k).PixelIdxList; % lister les pixels de chaque tache
     
     
    hold off;
    % operation moyenne pour chaque tache avec la fonction mean
     
    moyenne = mean(i(lister_les_pixels)); % intensite moyenne dans l'image i
     
    surface_tache = mesurer_taches(k).Area; % surface
    perimetre_tache = mesurer_taches(k).Perimeter; % perimetre
    centre_de_masse = mesurer_taches(k).Centroid; % centroid -centre de masse
     
    %affichage des donnees
     
        fprintf(1,'#%d %18.1f %11.1f %8.1f %8.1f %8.1f\n', k, moyenne,
    surface_tache, perimetre_tache, centre_de_masse); %affichage avec fprintf
    end
    Pouvez vous m'aider svp?

    J'ai l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ??? Error: File: center_of_mass_image.m Line: 9 Column: 11
    Expression or statement is incomplete or incorrect.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Quel est ta ligne 9 ?

    Christophe

  3. #3
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Salut Chritophe!

    Merci pour ton reponse!

    J'ai fais des modifications a mon script mais j'ai toujours une erreur:

    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
     
    clc;    %preinitialisations a chaque script matlab
    clear all;
    close all;
     
    disp('Application pour faire le calcul du centre de masse pour une image entiere lis avec imread'); %title de l'application
     
    % i c'est une image gray , j- c'est une image binaire
     
    i=imread('cameraman.tif');imshow(i) % je lis dans ma variable i l'image
    j = im2bw(i, 0.4); % Threshold en image binaire (avec blanc et noir seulement)
    valeur_threshold = 100;
    j = imfill(j, 'holes');
     
    subplot(3,2,1); imagesc(i); colormap(gray(256)); title
    ('Image initielle');
     
    subplot(3,2,2); imagesc(j); colormap(gray(256)); 
    title('Image binaire');
     
    label= bwlabel(j, 8); %etiquetation de l'image avec bwlabel
    couleurs_labels= label2rgb (labeledImage, 'hsv', 'k', 'shuffle');%couleurs aleatoires pour les labels
     
    subplot(3,2,3); imagesc(label); title('Image avec des regions etiquetees avec la fonction bwlabel');
     
    subplot(3,2,4); imagesc(couleurs_labels); title('Couleur aleatoires pour les labels');
     
    measurer_taches_encre= regionprops(labeledImage, 'all'); %toutes les proprietes des taches d'encre de l'image
     
    numero_des_taches= size(mesurer_taches_encres, 1);
     
    subplot(3,2,5); imagesc(i); title('Exposer les elements');
     
    hold on; %retiens tous les graphes avec subplot
     
    %Fonction bwboundaries retourne un cell array ou chaque cellule contient les coordonnes (ligne et colonne) pour chaque objet de l'image.
     
    frontieres = bwboundaries(j); % ou j c'est l'image binaire
     
    for compteur = 1 : numero_des_taches
    tache_courante = boundaries{k};
    plot(tache_courante(:,2), tache_courant(:,1), 'g', 'LineWidth', 2); %couleur vert dimension 2 avec la propriete LineWidth
    end
    hold off; %hold off pour tous les subplots
     
    for k = 1 : numero_des_taches % parcourir tous les taches
    lister_les_pixels = mesurer_taches_encres(k).PixelIdxList; % lister les pixels de chaque tache
     
     
    hold off;
    % operation moyenne pour chaque tache avec la fonction mean
     
    moyenne = mean(i(lister_les_pixels)); % intensite moyenne dans l'image i
     
    surface_tache = mesurer_taches_encres(k).Area; % surface
    perimetre_tache = mesurer_taches_encres(k).Perimeter; % perimetre
    centre_de_masse = mesurer_taches_encres(k).Centroid; % centroid -centre de masse
     
    %affichage des donnees
     
        fprintf(1,'#%d %18.1f %11.1f %8.1f %8.1f %8.1f\n', k, moyenne,
    surface_tache, perimetre_tache, centre_de_masse); %affichage avec fprintf
    end
    Zut c'etait a cause de moi car je ne faisais pas attention a certains choses!

    Mais toujours une erreur.

    A la derniere ligne du code (60) avant end qui est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        fprintf(1,'#%d %18.1f %11.1f %8.1f %8.1f %8.1f\n', k, moyenne,
    surface_tache, perimetre_tache, centre_de_masse); %affichage avec fprintf
    J'ai l'erreur en command window:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ??? Error: File: center.m Line: 60 Column: 67
    Expression or statement is incorrect--possibly unbalanced (, {, or [.

    Je suis un peu fatigue pour voir ce detail. Je ne sais pas ou j'ai manque une paranthese

    Si tu peux m'aider s'il te plait!

    Merci en tous cas pour ton reponse vite!

    Amicalment,

    Michel

  4. #4
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    J'avais 6 descripteurs du format et 5 variables a afficher.



    J'ai modifie cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     fprintf(1,'#%d %18.1f %11.1f %8.1f %8.1f  %8.1f\n', k, moyenne,
    surface_tache, perimetre_tache, centre_de_masse); %affichage avec fprintf
    Avec ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     fprintf(1,'#%d %18.1f %11.1f %8.1f %8.1f \n', k, moyenne,surface_tache, perimetre_tache, centre_de_masse); %affichage avec fprintf

  5. #5
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Bon. Maintenant j'ai une autre erreur



    Il affiche correctement en utilisant imagesc l'image cameraman.tif c'est ca le resultat de mon code mais dans command window n'apparait que cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ??? Error using ==> title
    Not enough input arguments.
     
    Error in ==> center at 14


    Pouvez-vous regarder attentivement mon code et m'aider svp?


    A cause de quoi m'apparait cette erreur?


    J'attache le nouveau script qui donne seulement cette erreur:

    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
     
    clc;    %preinitialisations a chaque script matlab
    clear all;
    close all;
     
    disp('Application pour faire le calcul du centre de masse pour une image entiere lis avec imread'); %title de l'application
     
    % i c'est une image gray , j- c'est une image binaire
     
    i=imread('cameraman.tif');imshow(i) % je lis dans ma variable i l'image
    j = im2bw(i, 0.4); % Threshold en image binaire (avec blanc et noir seulement)
    valeur_threshold = 100;
    j = imfill(j, 'holes');
     
    subplot(3,2,1); imagesc(i); colormap(gray(256)); title
    ('Image initielle');
     
    subplot(3,2,2); imagesc(j); colormap(gray(256)); 
    title('Image binaire');
     
    label= bwlabel(j, 8); %etiquetation de l'image avec bwlabel
    couleurs_labels= label2rgb (label, 'hsv', 'k', 'shuffle');%couleurs aleatoires pour les labels
     
    subplot(3,2,3); imagesc(label); title('Image avec des regions etiquetees avec la fonction bwlabel');
     
    subplot(3,2,4); imagesc(couleurs_labels); title('Couleur aleatoires pour les labels');
     
    measurer_taches_encre= regionprops(label, 'all'); %toutes les proprietes des taches d'encre de l'image
     
    numero_des_taches= size(mesurer_taches_encres, 1);
     
    subplot(3,2,5); imagesc(i); title('Exposer les elements');
     
    hold on; %retiens tous les graphes avec subplot
     
    %Fonction bwboundaries retourne un cell array ou chaque cellule contient les coordonnes (ligne et colonne) pour chaque objet de l'image.
     
    frontieres = bwboundaries(j); % ou j c'est l'image binaire
     
    for compteur = 1 : numero_des_taches
    tache_courante = boundaries{k};
    plot(tache_courante(:,2), tache_courant(:,1), 'g', 'LineWidth', 2); %couleur vert dimension 2 avec la propriete LineWidth
    end
     
    hold off; %hold off pour tous les subplots
     
    for k = 1 : numero_des_taches % parcourir tous les taches
    lister_les_pixels = mesurer_taches_encres(k).PixelIdxList; % lister les pixels de chaque tache
     
     
    hold off;
    % operation moyenne pour chaque tache avec la fonction mean
     
    moyenne = mean(i(lister_les_pixels)); % intensite moyenne dans l'image i
     
    surface_tache = mesurer_taches_encres(k).Area; % surface
    perimetre_tache = mesurer_taches_encres(k).Perimeter; % perimetre
    centre_de_masse = mesurer_taches_encres(k).Centroid; % centroid -centre de masse
     
    %affichage des donnees
     
        fprintf(1,'#%d %18.1f %11.1f %8.1f %8.1f \n', k, moyenne,surface_tache, perimetre_tache, centre_de_masse); %affichage avec fprintf
    end

  6. #6
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    subplot(3,2,1); imagesc(i); colormap(gray(256)); title
    ('Image initielle');
    Il faut que tu enlèves le saut de ligne après title.
    Normalement l'éditeur te met des marqueurs (rouges et oranges) pour te signaler ce genre d'erreurs.

  7. #7
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Merci caro! Ca marche parfaitement maintenant!

    Je marque comme resolu!

  8. #8
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Application pour faire le calcul du centre de masse pour une image entiere lis avec imread
    ??? Undefined function or variable 'mesurer_taches_encres'.
    Error in ==> centre_image at 28
    numero_des_taches= size(mesurer_taches_encres, 1);
    mesurer_taches_encres
    Non definie

  9. #9
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    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
     
     
    clc;    %preinitialisations a chaque script matlab
    clear all;
    close all;
     
    global mesurer_taches_encres
     
    disp('Application pour faire le calcul du centre de masse pour une image entiere lis avec imread'); %title de l'application
     
    % i c'est une image gray , j- c'est une image binaire
     
    i=imread('cameraman.tif');imshow(i) % je lis dans ma variable i l'image
    j = im2bw(i, 0.4); % Threshold en image binaire (avec blanc et noir seulement)
    valeur_threshold = 100;
    j = imfill(j, 'holes');
     
    subplot(3,2,1); imagesc(i); colormap(gray(256)); title
    ('Image initielle');
     
    subplot(3,2,2); imagesc(j); colormap(gray(256)); 
    title('Image binaire');
     
    label= bwlabel(j, 8); %etiquetation de l'image avec bwlabel
    couleurs_labels= label2rgb (label, 'hsv', 'k', 'shuffle');%couleurs aleatoires pour les labels
     
    subplot(3,2,3); imagesc(label); title('Image avec des regions etiquetees avec la fonction bwlabel');
     
    subplot(3,2,4); imagesc(couleurs_labels); title('Couleur aleatoires pour les labels');
     
    measurer_taches_encre= regionprops(label, 'all'); %toutes les proprietes des taches d'encre de l'image
     
    numero_des_taches= size(mesurer_taches_encres, 1);
     
    subplot(3,2,5); imagesc(i); title('Exposer les elements');
     
    hold on; %retiens tous les graphes avec subplot
     
    %Fonction bwboundaries retourne un cell array ou chaque cellule contient les coordonnes (ligne et colonne) pour chaque objet de l'image.
     
    frontieres = bwboundaries(j); % ou j c'est l'image binaire
     
    for compteur = 1 : numero_des_taches
    tache_courante = boundaries{k};
    plot(tache_courante(:,2), tache_courant(:,1), 'g', 'LineWidth', 2); %couleur vert dimension 2 avec la propriete LineWidth
    end
     
    hold off; %hold off pour tous les subplots
     
    for k = 1 : numero_des_taches % parcourir tous les taches
    lister_les_pixels = mesurer_taches_encres(k).PixelIdxList; % lister les pixels de chaque tache
     
     
    hold off;
    % operation moyenne pour chaque tache avec la fonction mean
     
    moyenne = mean(i(lister_les_pixels)); % intensite moyenne dans l'image i
     
    surface_tache = mesurer_taches_encres(k).Area; % surface
    perimetre_tache = mesurer_taches_encres(k).Perimeter; % perimetre
    centre_de_masse = mesurer_taches_encres(k).Centroid; % centroid -centre de masse
     
    %affichage des donnees
     
        fprintf(1,'#%d %18.1f %11.1f %8.1f %8.1f \n', k, moyenne,surface_tache, perimetre_tache, centre_de_masse); %affichage avec fprintf
    end
    Maintenant c'est parfait kmaniche je l'ai mis sur la zone Contribuez.

    Si tu as des observations tu peux me dire!

    Merci encore pour ton reponse mais j'ai regle cette erreur avec global nom_de_variable.

  10. #10
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    On ne règle pas un problème tel que celui-là en mettant une variable en global.
    Du coup ton programme est inutilisable tel quel.

    Je pense surtout que tu es distrait et que tu as une faute de frappe dans ton code (encore une) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    measurer_taches_encre= regionprops(label, 'all'); %toutes les proprietes des taches d'encre de l'image
    numero_des_taches= size(mesurer_taches_encres, 1);

  11. #11
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Oops je fais pas attention aux details merci de m'avoir corriger caro.

    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
     
    clc;    %preinitialisations a chaque script matlab
    clear all;
    close all;
     
    global mesurer_taches_encres
    global k % pour echapper des erreurs des variables non-definis
     
    disp('Application pour faire le calcul du centre de masse pour une image entiere lis avec imread'); %title de l'application
     
    % i c'est une image gray , j- c'est une image binaire
     
    i=imread('cameraman.tif');imshow(i) % je lis dans ma variable i l'image
    j = im2bw(i, 0.4); % Threshold en image binaire (avec blanc et noir seulement)
    valeur_threshold = 100;
    j = imfill(j, 'holes');
     
    subplot(3,2,1); imagesc(i); colormap(gray(256)); title('Image initielle');
     
    subplot(3,2,2); imagesc(j); colormap(gray(256)); 
    title('Image binaire');
     
    label= bwlabel(j, 8); %etiquetation de l'image avec bwlabel
    couleurs_labels= label2rgb (label, 'hsv', 'k', 'shuffle');%couleurs aleatoires pour les labels
     
    subplot(3,2,3); imagesc(label); title('Image avec des regions etiquetees avec la fonction bwlabel');
     
    subplot(3,2,4); imagesc(couleurs_labels); title('Couleur aleatoires pour les labels');
     
    mesurer_taches_encres= regionprops(label, 'all'); %toutes les proprietes des taches d'encre de l'image
     
    numero_des_taches= size(mesurer_taches_encres, 1);
     
    subplot(3,2,5); imagesc(i); title('Exposer les elements');
     
    hold on; %retiens tous les graphes avec subplot
     
    %Fonction bwboundaries retourne un cell array ou chaque cellule contient les coordonnes (ligne et colonne) pour chaque objet de l'image.
     
    frontieres = bwboundaries(j); % ou j c'est l'image binaire
     
    for compteur = 1 : numero_des_taches
    tache_courante = boundaries{k};
    plot(tache_courante(:,2), tache_courant(:,1), 'g', 'LineWidth', 2); %couleur vert dimension 2 avec la propriete LineWidth
    end
     
    hold off; %hold off pour tous les subplots
     
    for k = 1 : numero_des_taches % parcourir tous les taches
    lister_les_pixels = mesurer_taches_encres(k).PixelIdxList; % lister les pixels de chaque tache
     
     
    hold off;
    % operation moyenne pour chaque tache avec la fonction mean
     
    moyenne = mean(i(lister_les_pixels)); % intensite moyenne dans l'image i
     
    surface_tache = mesurer_taches_encres(k).Area; % surface
    perimetre_tache = mesurer_taches_encres(k).Perimeter; % perimetre
    centre_de_masse = mesurer_taches_encres(k).Centroid; % centroid -centre de masse
     
    %affichage des donnees
     
        fprintf(1,'#%d %18.1f %11.1f %8.1f %8.1f \n', k, moyenne,surface_tache, perimetre_tache, centre_de_masse); %affichage avec fprintf
    end



    Merci d'avance pour vos observations que j'ai manque par la fatigue!

    Une autre source d'erreur dans la ligne 42: (donc regarder mon code de la ligne 42 svp)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tache_courante = boundaries{k};
    Erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ??? Undefined variable "boundaries" or class "boundaries".
     
    Error in ==> center at 42
    tache_courante = boundaries{k};

  12. #12
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par jarlaxle Voir le message
    désolé pour l'erreur, en fait ça sera l'image nommé "L" (labellisée) que tu vas utiliser dans cette méthode
    Jarlaxle si tu peux m'aider je fais une autre methode pour calcule le centre du masse d'une image mais je ne sais pas quelle est l'erreur en fait j'ai utilise fprintf pour calculer les coefficients mais il ne m'affiche rien.

    Tu as une idee en regardant mon script center.m qui contient le code suivant:

    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
     
    clc;    %preinitialisations a chaque script matlab
    clear all;
    close all;
     
    global mesurer_taches_encres
    global k % pour echapper des erreurs des variables non-definis
     
    disp('Application pour faire le calcul du centre de masse pour une image entiere lis avec imread'); %title de l'application
     
    % i c'est une image gray , j- c'est une image binaire
     
    i=imread('cameraman.tif');imshow(i) % je lis dans ma variable i l'image
    j = im2bw(i, 0.4); % Threshold en image binaire (avec blanc et noir seulement)
    valeur_threshold = 100;
    j = imfill(j, 'holes');
     
    subplot(3,2,1); imagesc(i); colormap(gray(256)); title('Image initielle');
     
    subplot(3,2,2); imagesc(j); colormap(gray(256)); 
    title('Image binaire');
     
    label= bwlabel(j, 8); %etiquetation de l'image avec bwlabel
    couleurs_labels= label2rgb (label, 'hsv', 'k', 'shuffle');%couleurs aleatoires pour les labels
     
    subplot(3,2,3); imagesc(label); title('Image avec des regions etiquetees avec la fonction bwlabel');
     
    subplot(3,2,4); imagesc(couleurs_labels); title('Couleur aleatoires pour les labels');
     
    mesurer_taches_encres= regionprops(label, 'all'); %toutes les proprietes des taches d'encre de l'image
     
    numero_des_taches= size(mesurer_taches_encres, 1);
     
    subplot(3,2,5); imagesc(i); title('Exposer les elements');
     
    hold on; %retiens tous les graphes avec subplot
     
    %Fonction bwboundaries retourne un cell array ou chaque cellule contient les coordonnes (ligne et colonne) pour chaque objet de l'image.
     
    frontieres = bwboundaries(j); % ou j c'est l'image binaire
     
    for compteur = 1 : numero_des_taches
    tache_courante = boundaries{k};
    plot(tache_courante(:,2), tache_courant(:,1), 'g', 'LineWidth', 2); %couleur vert dimension 2 avec la propriete LineWidth
    end
     
    hold off; %hold off pour tous les subplots
     
    for k = 1 : numero_des_taches % parcourir tous les taches
    lister_les_pixels = mesurer_taches_encres(k).PixelIdxList; % lister les pixels de chaque tache
     
     
    hold off;
    % operation moyenne pour chaque tache avec la fonction mean
     
    moyenne = mean(i(lister_les_pixels)); % intensite moyenne dans l'image i
     
    surface_tache = mesurer_taches_encres(k).Area; % surface
    perimetre_tache = mesurer_taches_encres(k).Perimeter; % perimetre
    centre_de_masse = mesurer_taches_encres(k).Centroid; % centroid -centre de masse
     
    %affichage des donnees
     
        fprintf(1,'#%d %18.1f %11.1f %8.1f %8.1f \n', k, moyenne,surface_tache, perimetre_tache, centre_de_masse); %affichage avec fprintf
    end
    Et voila l'erreur quand je lance center dans command window:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>center
    ??? Undefined variable "boundaries" or class "boundaries".
     
    Error in ==> center at 42
    tache_courante = boundaries{k};

    Je ne sais pas comment definir ca en utilisant la classe boundaries ou bwlabel. Tu as une idee?

    J'ai essaye remplacer la ligne par boundaries(k) mais aucun resultat.


    Aussi les titres de la troisieme et la quatrieme image se superposent. Pourquoi?

    SI tu as fais deja ca tu as une idee comment je dois resoudre le probleme?

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    ça ne reconnait pas la variable boundaries ici :
    tache_courante = boundaries{k};
    est-ce boundaries ou bwboundaries ?

    boundaries est sensée être une variable ou une fonction ?
    je ne comprends pas à quoi sert cette ligne ni ce que représente k d'ailleurs

  14. #14
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par jarlaxle Voir le message
    ça ne reconnait pas la variable boundaries ici :
    tache_courante = boundaries{k};
    est-ce boundaries ou bwboundaries ?

    boundaries est sensée être une variable ou une fonction ?
    je ne comprends pas à quoi sert cette ligne ni ce que représente k d'ailleurs
    C'est une fonction.

    J'ai modifie avec bwboundaries mais ca donne une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ??? Error using ==> iptchecknargin
    Function BWBOUNDARIES expected at least 1 input argument
    but was called instead with 0 input arguments.
     
    Error in ==> bwboundaries>parseInputs at 156
    iptchecknargin(1,4,nargin,mfilename);
     
    Error in ==> bwboundaries at 129
    [BW, conn, findholes] = parseInputs(varargin{:});
     
    Error in ==> center at 42
    tache_courante = bwboundaries{k};

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    bwboundaries est une fonction donc le passage de paramètres se fait par parenthèses : d'où l'erreur avec bwboundaries{k}


    y a un souci dans tes lignes de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for compteur = 1 : numero_des_taches
    tache_courante = boundaries{k};
    plot(tache_courante(:,2), tache_courant(:,1), 'g', 'LineWidth', 2); %couleur vert dimension 2 avec la propriete LineWidth
    end
    k ne me paraît pas initialisé et la variable compteur n'est pas utilisée : donc tu vas faire N fois la même chose.

    c'est pas plutôt ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for compteur = 1 : numero_des_taches
    tache_courante = boundaries(compteur);
    plot(tache_courante(:,2), tache_courant(:,1), 'g', 'LineWidth', 2); %couleur vert dimension 2 avec la propriete LineWidth
    end

  16. #16
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Merci beacoup!

    Voila le code nettoye: ( si tu peux me nettoyer encore ce que tu consideres je suis tres proche de resoudre mon probleme )

    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
     
    clc;    %preinitialisations a chaque script matlab
    clear all;
    close all;
     
    global mesurer_taches_encres
    global k % pour echapper des erreurs des variables non-definis
     
    disp('Application pour faire le calcul du centre de masse pour une image entiere lis avec imread'); %title de l'application
     
    % i c'est une image gray , j- c'est une image binaire
     
    i=imread('cameraman.tif');imshow(i) % je lis dans ma variable i l'image
    j = im2bw(i, 0.4); % Threshold en image binaire (avec blanc et noir seulement)
    valeur_threshold = 100;
    j = imfill(j, 'holes');
     
    subplot(3,2,1); imagesc(i); colormap(gray(256)); title('Image initielle');
     
    subplot(3,2,2); imagesc(j); colormap(gray(256)); 
    title('Image binaire');
     
    label= bwlabel(j, 8); %etiquetation de l'image avec bwlabel
    couleurs_labels= label2rgb (label, 'hsv', 'k', 'shuffle');%couleurs aleatoires pour les labels
     
    subplot(3,2,3); imagesc(label); title('Image avec des regions etiquetees avec la fonction bwlabel');
     
    subplot(3,2,4); imagesc(couleurs_labels); title('Couleur aleatoires pour les labels');
     
    mesurer_taches_encres= regionprops(label, 'all'); %toutes les proprietes des taches d'encre de l'image
     
    numero_des_taches= size(mesurer_taches_encres, 1);
     
    subplot(3,2,5); imagesc(i); title('Exposer les elements');
     
    hold on; %retiens tous les graphes avec subplot
     
    %Fonction bwboundaries retourne un cell array ou chaque cellule contient les coordonnes (ligne et colonne) pour chaque objet de l'image.
     
    frontieres = bwboundaries(j); % ou j c'est l'image binaire
     
    for compteur = 1 : numero_des_taches
    tache_courante = bwboundaries(compteur);
    plot(tache_courante(:,2), tache_courante(:,1), 'g', 'LineWidth', 2); %couleur vert dimension 2 avec la propriete LineWidth
    end
     
    hold off; %hold off pour tous les subplots
     
    for k = 1 : numero_des_taches % parcourir tous les taches
    lister_les_pixels = mesurer_taches_encres(k).PixelIdxList; % lister les pixels de chaque tache
     
     
    hold off;
    % operation moyenne pour chaque tache avec la fonction mean
     
    moyenne = mean(i(lister_les_pixels)); % intensite moyenne dans l'image i
     
    surface_tache = mesurer_taches_encres(k).Area; % surface
    perimetre_tache = mesurer_taches_encres(k).Perimeter; % perimetre
    centre_de_masse = mesurer_taches_encres(k).Centroid; % centroid -centre de masse
     
    %affichage des donnees
     
        fprintf(1,'#%d %18.1f %11.1f %8.1f %8.1f \n', k, moyenne,surface_tache, perimetre_tache, centre_de_masse); %affichage avec fprintf
    end
    Toujours une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ??? Index exceeds matrix dimensions.
     
    Error in ==> center at 43
    plot(tache_courante(:,2), tache_courante(:,1), 'g', 'LineWidth', 2); %couleur vert dimension 2 avec la propriete LineWidth

  17. #17
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Pourrais-tu essayer s'il te plait de bien relire ton code.
    En plus l'éditeur de MATLAB doit te signaler les divers problèmes (variables non utilisées ou non initialisées).

    En lisant ton code on dirait que tu as récupéré un code et essayé de le modifier.

    Je parierais qu'en fait au lieu de boundaries il faut mettre frontieres qui est calculé juste au-dessus.(je parle du code du post de 14h08).

    A force de faire des modifications sans réellement en comprendre le sens tu es en train de faire un énorme plat de spaghettis.

    Tu devrais reprendre toutes tes variables une par une en comprenant à quoi elles correspondent puis ensuite comprendre les opérations que tu fais dessus.

  18. #18
    Membre confirmé
    Avatar de Dam2227
    Inscrit en
    Juin 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2007
    Messages : 343
    Points : 487
    Points
    487
    Par défaut
    Et c'est bien normal que tu es une erreur. Regarde bien ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tache_courante = bwboundaries(compteur);
    tache_courante ici est un simple vecteur, pas une matrice. C'est pour ça que tu ne peux pas plotter tache_courante(:,2) et tache_courante(:,1).

    ++

  19. #19
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Je reviens encore!

    Premierment j'ai utilise cell2mat pour faire disparaitre l'erreur.

    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
    68
     
    clc;    %preinitialisations a chaque script matlab
    clear all;
    close all;
     
    global mesurer_taches_encres
    global k % pour echapper des erreurs des variables non-definis
     
    disp('Application pour faire le calcul du centre de masse pour une image entiere lis avec imread'); %title de l'application
     
    % i c'est une image gray , j- c'est une image binaire
     
    i=imread('circuit.tif');imshow(i) % je lis dans ma variable i l'image
    j = im2bw(i, 0.4); % Threshold en image binaire (avec blanc et noir seulement)
    valeur_threshold = 100;
    j = imfill(j, 'holes');
     
    subplot(3,2,1); imagesc(i); colormap(gray(256)); title('Image initielle');
     
    subplot(3,2,2); imagesc(j); colormap(gray(256)); 
    title('Image binaire');
     
    label= bwlabel(j, 8); %etiquetation de l'image avec bwlabel
    couleurs_labels= label2rgb (label, 'hsv', 'k', 'shuffle');%couleurs aleatoires pour les labels
     
    subplot(3,2,3); imagesc(label); title('Image avec des regions etiquetees avec la fonction bwlabel');
     
    subplot(3,2,4); imagesc(couleurs_labels); title('Couleur aleatoires pour les labels');
     
    mesurer_taches_encres= regionprops(label, 'all'); %toutes les proprietes des taches d'encre de l'image
     
    numero_des_taches= size(mesurer_taches_encres, 1);
     
    subplot(3,2,5); imagesc(i); title('Exposer les elements');
     
    hold on; %retiens tous les graphes avec subplot
     
    %Fonction bwboundaries retourne un cell array ou chaque cellule contient les coordonnes (ligne et colonne) pour chaque objet de l'image.
     
    frontieres = bwboundaries(j); % ou j c'est l'image binaire
     
    %cell2 mat -conversion du cell-array en matrice
    for compteur = 1 : numero_des_taches
            tache_courante = cell2mat(bwboundaries(compteur));
            plot(tache_courante(:,2), tache_courante(:,1), 'g',
    'LineWidth', 2); %couleur vert dimension 2 avec la propriete LineWidth
    end
     
    %undefined index matrix error conversie cell2mat solutie;)
    hold off; %hold off pour tous les subplots
     
    for k = 1 : numero_des_taches % parcourir tous les taches
    lister_les_pixels = mesurer_taches_encres(k).PixelIdxList; % lister les pixels de chaque tache
     
     
    hold off;
    % operation moyenne pour chaque tache avec la fonction mean
     
    moyenne = mean(i(lister_les_pixels)); % intensite moyenne dans l'image i
     
    surface_tache = mesurer_taches_encres(k).Area; % surface
    perimetre_tache = mesurer_taches_encres(k).Perimeter; % perimetre
    centre_de_masse = mesurer_taches_encres(k).Centroid; % centroid -centre de masse
     
    %affichage des donnees
     
        fprintf(1,'#%d %18.1f %11.1f %8.1f %8.1f \n', k, moyenne,surface_tache, perimetre_tache, centre_de_masse); %affichage avec fprintf
    end
    Finalment j'ai reussi a faire ca!

    Mais encore une question. Il m'affiche bizarrement le 'title' dans le figures 3 et 4 sur ma figure1 et ca me deranje encore

    Pouvez-vous m'aider regler cette petite probleme ?

    Voila comme apparait:

    http://img191.imageshack.us/img191/5953/imageg.png

    Merci en tous cas a tous pour tout l'aide fourni !

    Il n'y a d'autres problemes dans mon code maintenant ! Finalment j'ai reussi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire suivre un bouton sur une image centrée
    Par amateursf dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 06/09/2013, 19h27
  2. Le calcul du centre de masse d'une image
    Par moskaper dans le forum Images
    Réponses: 14
    Dernier message: 19/06/2009, 10h05
  3. Comment faire un alignement vertical d'une image pour tous les navigateurs?
    Par Alexandrebox dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 06/04/2009, 14h10
  4. filtre séparable pour une image
    Par tlemcenvisit dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 31/05/2005, 16h45
  5. Définir un angle de rotation pour une image
    Par mateo.14 dans le forum C++
    Réponses: 5
    Dernier message: 25/03/2005, 14h43

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