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 :

tracer une ligne droite


Sujet :

Images

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut tracer une ligne droite
    bonjour tt le monde
    voila je vous expose mon probleme, je veu tracer une ligne droite sur une image suivant plusieur angles, mais il faut que ma droite passe tjr par le centre de mon image ou plutot de ma matrice par example 11*11, c'est à dire mon centre va etre I(6,6).
    voilla je travaille sous MATLAB.
    jai cru savoir quil ya l'agorithme de Bresenham, mais esque cet algorithme donne les resultats voulu.
    je vous declare d'avance que je suis un debutant en MATLAB
    en attente d'une reponse je vous transmet mes salutations.

  2. #2
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Salut,

    En effet , l'algorithme Bresenham permet de tracer des segments discrets.


    Tu peux la retrouver - ici -

    Tu devrai pas contre l'adapter pour prendre en compte un point et une direction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    % Prototype de la fonction :
    %function [Coords]=brlinexya(Sx,Sy,Ex,Ey)
    % (Sx,Sy) point de depart (Start)
    % (Ex,Ey) point d'arrivé (End)
     
    % Si tu dispose d'un point (x,y) et angle teta : 
    % (Ex,Ey) =  (x,y) + Cte*[cos(teta),sin(teta)];
    % Faut aussi controler un peu pour ne pas déborder de l'image.
    Une idée intéressante dans ton cas serait de choisir un pixel du cadre de l'image (1er et dernière ligne ,et 1er et dernière colonne) et de tracer le segment entre le centre et ce pixel la...


    ++ bonne chance
    AlloSchool, votre école sur internet.

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    merci mr samurai de ta reponse, en effet pour tracer une droite je sois suivre la formule de y=ax+b , moi jai penser comme ça ;
    si jai une droite dans un bloc 11*11 d'angle tetha par example de 30° pour tracer cette droite en pâssant par le centre c'est à dire (6,6) jai penser a faire cette operation : y=tan(tetha)*(x-6)+6 comme ça pour 45° je tombe sur y=x, mais le probleme c esque sa va marché avec les autre angles et comment je peu utiliser l'algorithme de Bresenham pour tracer mes droites dans ce cas.
    jai voulu faire des teste sur une image d'empreinte digitale c'est à dire eeseyer de suivre les pistes noires avec des trais blancs en se basant sur les droite c'est à dire que chaque bloc va etre etudier en estiment son oriantation afin de tracer un trai blanc droi pour visualiser l'oriantation, car ce que jai fai c manuellement c'est à dire que moi meme jai programmer les pixels qui serron blancs. mai moi jaimerai apliquer un code qui d'apres l'angle me trace les segement blancs. voilà ça c une etappe de mon travail.
    jaimerais savoir si c faisable ou pas ou si qq1 à une meilleur iddé je serrai interssé.
    merci encore une fois

  4. #4
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Salut,

    Si je comprends bien, tu n'as plus de probléme de tracer de ligne sur une image ?

    Pour ton autre probléme je ne suis pas sur de comprendre mais a ta place j'aurai tendance à passer en curviligne : manipuler des courbes (suite de pixels), et comme ceci j'aurai accès aux Normales aux courbes.

    Bref, c'est chaud ton projet
    AlloSchool, votre école sur internet.

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    merci mr samurai, pour me faire mieux comprendre je ne trace pas des lignes droite sur mon code enfaite j'impose les pixels qui doivent etre blanc pour le tracer mais c pas forcement des lignes droites. voila code j'espere que tu verra plus claire le procéder.
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
     
    I1 = imread('image.tif'); 
     
    I1=double(I1);
    [n,m]=size(I1);
     
    marge=10;
    %la division de l'image
    for k=1:marge+1:n-marge,
     
        for g=1:marge+1:m-marge,
     
            I=I1(k:k+marge,g:g+marge);
            %l'orientation de bloc
            [h,l]=size(I);
            s3=0;s4=0;
            for i=1:h-2
                for j=1:l-2
                    s1=-I(i,j)+I(i,j+2)-2*I(i+1,j)+2*I(i+1,j+2)-I(i+2,j)+I(i+2,j+2);
                    s2=I(i,j)+2*I(i,j+1)+I(i,j+2)-I(i+2,j)-2*I(i+2,j+1)-I(i+2,j+2);
                    s3=s3-2*s1*s2;
                    s4=s4+(s2^2-s1^2);
                end
            end
            s5=0.5*atand(s3/s4);
            if s4<0
                s5=s5+90;
            elseif s4>=0
                if s3<0
                    s5=s5+180;
                else
                end
            else
            end
            %partie affiche des angles
    if s5<15
        I(8,1)=255;I(8,2)=255;I(8,3)=255;I(8,4)=255;
        I(7,5)=255;I(7,6)=255;I(7,7)=255;I(6,8)=255;
        I(6,9)=255;I(5,10)=255;I(5,11)=255;
    else
        if s5<35
            I(9,1)=255;I(9,2)=255;I(9,3)=255;I(8,4)=255;
            I(7,5)=255;I(7,6)=255;I(6,7)=255;I(5,8)=255;
            I(4,9)=255;I(4,10)=255;I(3,11)=255;
        else
            if s5<50
                I(2,10)=255;I(3,9)=255;I(4,8)=255;
                I(5,7)=255;I(6,6)=255;I(7,5)=255;I(8,4)=255;
                I(9,3)=255;I(10,2)=255;
            else
                if s5<60
                    I(11,1)=255;I(10,2)=255;I(9,3)=255;I(8,3)=255;
                    I(7,4)=255;I(6,5)=255;I(5,5)=255;I(4,6)=255;
                    I(3,7)=255;I(2,8)=255;I(1,9)=255;
                else
                    if s5<75
                        I(11,1)=255;I(10,2)=255;I(9,2)=255;I(8,3)=255;
                        I(7,3)=255;I(6,4)=255;I(5,4)=255;I(4,5)=255;
                        I(3,5)=255;I(2,6)=255;I(1,6)=255;
                    else
                        if s5<90
                            I(11,5)=255;I(10,5)=255;I(9,5)=255;I(8,6)=255;
                            I(7,6)=255;I(6,6)=255;I(5,6)=255;I(4,6)=255;
                            I(3,7)=255;I(2,7)=255;I(1,7)=255;
                        else
                            if s5<100
                                I(11,7)=255;I(10,7)=255;I(9,7)=255;I(8,6)=255; 
                                I(7,6)=255;I(6,6)=255;I(5,6)=255;I(4,6)=255;
                                I(3,5)=255;I(2,5)=255;I(1,5)=255;
                            else
                                if s5<110
                                    I(11,8)=255;I(10,8)=255;I(9,8)=255;I(8,7)=255;
                                    I(7,7)=255;I(6,6)=255;I(5,6)=255;I(4,5)=255;
                                    I(3,5)=255;I(2,4)=255;I(1,4)=255;
                                else
                                    if s5<125
                                        I(11,11)=255;I(10,10)=255;I(9,9)=255;I(8,8)=255;
                                        I(7,8)=255;I(6,7)=255;I(5,6)=255;I(4,5)=255;
                                        I(3,5)=255;I(2,4)=255;
                                    else
                                        if s5<140
                                            I(2,2)=255;I(3,3)=255;I(4,4)=255;
                                            I(5,5)=255;I(6,6)=255;I(7,7)=255;I(8,8)=255;
                                            I(9,9)=255;I(10,10)=255;
                                        else 
                                            if s5<165
                                                I(9,10)=255;I(8,9)=255;I(8,8)=255;
                                                I(7,7)=255;I(6,6)=255;I(5,5)=255;I(4,4)=255;
                                                I(4,3)=255;I(3,2)=255;
                                            else
                                                I(7,11)=255;I(7,10)=255;I(7,9)=255;I(7,8)=255;
                                                I(6,7)=255;I(6,6)=255;I(6,5)=255;I(5,4)=255;
                                                I(5,3)=255;I(5,2)=255;I(5,1)=255;
                                            end
                                        end
                                    end
                                end
                            end
                        end
                    end
                end
            end
        end
    end
     
     F(k:k+marge,g:g+marge)=I;
        end
     
    end
    figure;
    imshow(I1,[],'notruesize');
    title('image originale')
    figure;
    imshow(F,[],'notruesize');
    title('image de orientation')
    la partie ou il ya "partie affiche des angles " c'est à dire esque je peu faire un code qui me trace une droite qui pass part le centre sans faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if s5<15
        I(8,1)=255;I(8,2)=255;I(8,3)=255;I(8,4)=255;
        I(7,5)=255;I(7,6)=255;I(7,7)=255;I(6,8)=255;
        I(6,9)=255;I(5,10)=255;I(5,11)=255;
    else
    ceci est un example , que je v l'appliquer sur tt les angles.
    voila j'espere que jai etai un plus comprehensible
    merci.

  6. #6
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    encore une petite chose esque je peu utiliser l'algerithme de bRESENHAM pour tracer mes lignes? ou il ya une autre methode plus simple
    merci

  7. #7
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    salut tt le monde jai un enorme probleme
    comme vous savai je suis debutant en MATLAB et jaimerais savoir comment on peu programmer l'algorithme de bresenham pour tracer des lignes droites?
    si qq1 peu m'aider je lui serrai tres reconnaissent car là je crois que je ne pe pas y arriver tt seul
    merci d'avance

Discussions similaires

  1. [FLASH MX2004] Tracer une ligne en temps réel
    Par tomtom- dans le forum Flash
    Réponses: 1
    Dernier message: 16/02/2006, 09h52
  2. Tracer une ligne sur une image
    Par Guillaume602 dans le forum Windows
    Réponses: 5
    Dernier message: 05/01/2006, 20h33
  3. [VB.NET] Tracer une ligne (OnPaint)
    Par Emcy dans le forum Windows Forms
    Réponses: 6
    Dernier message: 24/03/2005, 13h09
  4. [FP]Tracer Une ligne avec Dev-pascal
    Par yffick dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 17/12/2003, 16h33
  5. Tracer une ligne droite sans les interruptions
    Par Stef784ever dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 25/11/2002, 01h22

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