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 :

Calcul dimensions objets


Sujet :

Images

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    29
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 29
    Points : 25
    Points
    25
    Par défaut Calcul dimensions objets
    Mon image de départ est composée de bandes blanches verticales tout au long de l'axe et avec fond noir. Mon but est de déterminer les dimensions de chaque bande.
    Est ce BoundingBox de regionprops ferait l'affaire????

  2. #2
    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
    Bonjour,

    Quand tu parles des dimensions, tu veux dire en pixels !!

    Déjà, du moment que les bande sont en verticale tout au long de l'axe,on peux conclure que le nombre de pixels de la verticale est égale à celui de l'image.

    Pour les tailles horizontales, tu peux faire une boucle pour les calculer , sinon il y a une possibilité avec find. A développer ...
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  3. #3
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    29
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Oui ce sont les pixels qui m'intéressent et c'est plutôt la largeur de ces bandes dont j'ai besoin. J'ai élaboré un petit code même si ça va faire rire quelques uns sans doute vu que chui pas doué en info...

    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
     
    function b=Vmid(a)
    [row col]=size(a);
    x=1;
        for y=1:col
            if a(x,y)=1
                w=y; % premier point blanc de la bande
                for y=w:col
                    if a(x,y)=0
                        z=y-1; % dernier point blanc de la bande
                        l=z-w; % largeur de la bande
                    end
                end
            end
        end
    vaudrait mieux quelque chose de plus court..mais je sais pas comment!!!!
    j te remercie kmaniche, tu m'as proposé "find" et puis un autre ami la fonction "diff" qui indique quand y a une transition de couleur. je devrais accoupler les deux peut être?!!!!

  4. #4
    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
    Déjà le fait d'avoir conçu son propre algorithme c'est bien, maintenant tu as un algorithme fonctionnel. Il faut se pencher sur sa minimisation.

    Les deux solutions sont prométeuses, que ce soit avec find ou diff.

    Avec find tu fais une recherche des blanc dans la matrice "1" respectivement "255", ensuite tu calcul le nombre de paquets avec "1 respectivement 255".

    Avec diff, au lieu de cherche les paquets, tu cherche les transitions 0=>-1, -1=>0, 0=>1, 1=>-1, -1=>1 et 1=>0.

    Un début de la solution :
    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
     
    >> a=round(rand(1,18))
     
    a =
     
         0     0     0     1     0     1     0     0     0     0     1     1     1     0     1     1     0     1
     
    >> idx=find(a==1)
     
    idx =
     
         4     6    11    12    13    15    16    18
     
    >> diff(a)
     
    ans =
     
         0     0     1    -1     1    -1     0     0     0     1     0     0    -1     1     0    -1     1
     
    >> diff(idx)
     
    ans =
     
         2     5     1     1     2     1     2
     
    >>
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  5. #5
    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
    Vu que j'ai pas encore trouvé la solution en utilisant find ou diff, la seule solution propre que j'ai trouvé utilise bwlabel de l'IPT

    Une solution très simple mais demande d'utilisation comme même d'une fonction de la toolbox, que certain ne l'on pas

    Soit la matrice a une matrice remplie de '0' et '1', où les '1' représentent des lignes verticales, on cherche à calculer le nombre de ces lignes ainsi que la largeur de chacune d'entre-elles. Mon idée est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    clc
    a = [0 0 0 1 1 1 1 0 1 0 1 1 0 0 0 1 0 0] 
    etq = bwlabel(a) ;
    nbreBarres = max(etq)
    tailleBarre = histc(etq, unique(etq(etq~=0)))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    a =
     
         0     0     0     1     1     1     1     0     1     0     1     1     0     0     0     1     0     0
     
    nbreBarres =
     
         4
     
    tailleBarre =
     
         4     1     2     1
     
    >>
    QUI PREND LE DEFI ?
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Allez, un début de réponse en utilisant diff et find. J'arrive à trouver le nombre de barre. Me reste leur largeur à trouver en utilisant aussi cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    a=[0 0 0 1 1 1 1 0 1 0 1 1 0 0 0 1 0 0]
    b=diff(a);
    b(b~=1)=0;
    nbre_bar=sum(b)
    et la suite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    idx=find(a==1);
    A=diff(idx);
    B=find(A~=1);
     
    b1=sum(a(idx(1+B(1):B(2))));
    b2=sum(a(idx(1+B(2):B(3))));
    b3=sum(a(idx(1+B(3):B(4))));
    b4=sum(a(idx(1+B(4):end)));
     
    lon_barre=[b1 b2 b3 b4]
    reste plus qu'à vectoriser la partie des b1...b4... plus le temps pour ce soir, maintenant, c'est week end

  7. #7
    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
    OK, j'ai trouvé enfin :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    
    clear all ; close all ; clc ;
    
    a = [1 0 0 0 1 1 1 1 1 1 0 1 0 1 1 ] ;
    
    sz = diff(find(~[0 a 0]))-1 ;
    sz = sz(sz~=0) 
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >> a
     
    a =
     
    1    0    0    0    1    1    1    1    1    1     0    1    0    1    1
     
    >> sz
     
    sz =
     
         1     6     1     2
    A vous les tests, Merci
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/06/2014, 15h23
  2. calcul volume objet 3D
    Par arij25 dans le forum Mathématiques
    Réponses: 13
    Dernier message: 14/02/2011, 11h17
  3. calcul des volumes d'objet 3d
    Par the_king dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 26/01/2011, 19h32
  4. dimension objet image
    Par tcheca dans le forum Word
    Réponses: 7
    Dernier message: 11/02/2009, 20h59
  5. [String]Recherche algo pour calcul dimension
    Par GyZmoO dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 30/04/2008, 12h12

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