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 :

Créer des masques en forme d'anneau


Sujet :

Images

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 48
    Points : 34
    Points
    34
    Par défaut Créer des masques en forme d'anneau
    Bonjour,

    Afin de filtrer des images j ai besoin de creer des masques en formes d anneaux.

    Pour cela je cree deux cercle pleins de differents diametre que je soustrait l un a l autre. Pour pouvoir multiplier mon mask par la matrice a analyser je dois discretiser l interieur de mes cercles sur les entiers:
    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for x=-round(r/2):round(r/2)
        for y=-round(r/2):round(r/2)
            u=x^2+y^2;
            if u<(r/2)^2
                g=g+1;
                pts(g,1)=x+xo;
                pts(g,2)=y+yo;
                mat(x+xo,y+yo)=1;
            else bibi=0;
            end
        end
    end
    Le code marche bien, mais le gros soucis c est que les images sur lesquelles je travail sont de tres grandes tailles (4000*5000), et que la creation des mask prend un temps tres (trop!) important.
    Est ce que vous avez une idee (ou des idees!) pour ameliorer l algo pour acceler les calculs.

    Merci d avance
    Pierre

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 895
    Points
    52 895
    Par défaut
    => Création d'une image 3D qui contient une sphère (Niveaux gris)

    A noter que dans la solution que je donnais dans cette discussion, le FIND est inutile :

    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
    % Diamètre du disque et taille de la matrice
    d=30;
     
    % Création de la matrice 2D remplie de 0
    X=zeros(d);
     
    % Tous les couples de coordonnées des pixels de X
    [col,lig] = meshgrid(1:d); 
     
    % Translation du centre de la matrice en (0,0)
    col(:) = col(:)-d/2-0.5; 
    lig(:) = lig(:)-d/2-0.5;
     
    % Recherche des indices des pixels contenu dans le disque
    % idx=sqrt(col(:).^2+lig(:).^2)<=d/2
    idx = (col(:).^2+lig(:).^2)<=(d^2/4);
     
    % Mise à 1 de la valeur de ces pixels
    X(idx) = 1;
     
    % Affichage
    figure
    imagesc(X)
    axis image

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 48
    Points : 34
    Points
    34
    Par défaut
    Merci pour la reponse, (rapide et efficace...comme toujours)
    J ai change un petit detail pour permettre la creation d un petit cercle dans une grande matrice, si ca interesse quelqu un...


    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
    function [ mat]=points_cercle(r,pts_mat)
     
    % Diamètre du disque et taille de la matrice
    d=2*r;
     
    % Création de la matrice 2D remplie de 0
    X=zeros(pts_mat);
     
    % Tous les couples de coordonnées des pixels de X
    [col,lig] = meshgrid(1:pts_mat); 
     
    % Translation du centre de la matrice en (0,0)
    col(:) = col(:)-pts_mat/2-0.5; 
    lig(:) = lig(:)-pts_mat/2-0.5;
     
    % Recherche des indices des pixels contenu dans le disque
    % idx=sqrt(col(:).^2+lig(:).^2)<=d/2
    idx = (col(:).^2+lig(:).^2)<=(d^2/4);
     
    % Mise à 1 de la valeur de ces pixels
    X(idx) = 1;
    mat=X;
    % Affichage
    % figure
    % imshow(mat2gray(mat))
    % axis image

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

Discussions similaires

  1. Créer des masques pour un stack d'image
    Par LunDarkMiel dans le forum ImageJ
    Réponses: 5
    Dernier message: 08/02/2014, 06h29
  2. [À télécharger] Créer des feuilles de formes différentes
    Par SfJ5Rpw8 dans le forum Vos téléchargements VB6
    Réponses: 0
    Dernier message: 14/11/2010, 14h13
  3. Créer des boutons aux formes des pays sur une carte
    Par bernards111 dans le forum Flash
    Réponses: 9
    Dernier message: 12/04/2010, 11h19
  4. [C#] Créer des forms à répétition
    Par immerczeck dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/06/2006, 19h56

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