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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    29
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 29
    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 Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    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 ...

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 29
    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 Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    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
     
    >>

  5. #5
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    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 ?

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/06/2014, 16h23
  2. calcul volume objet 3D
    Par arij25 dans le forum Mathématiques
    Réponses: 13
    Dernier message: 14/02/2011, 12h17
  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, 20h32
  4. dimension objet image
    Par tcheca dans le forum Word
    Réponses: 7
    Dernier message: 11/02/2009, 21h59
  5. [String]Recherche algo pour calcul dimension
    Par GyZmoO dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 30/04/2008, 13h12

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