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 :

Redressement d'images (problème dans le code)


Sujet :

Images

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 45
    Points
    45
    Par défaut Redressement d'images (problème dans le code)
    Bonjour,

    Désolé de poster encore un sujet de redressement d'image mais j'ai quelques soucis avec mon programme. En reprenant ce qui avait déjà été poster (liens,...) j'ai créé un programme de redressement d'images. Cependant, je trouve qu'il ne redresse pas du tout mes images et je ne vois pas où j'ai pu me tromper (même si je sais qu'il y a une erreur (lol)). Je pense que c'est un problème dans mes équations.
    Pouvez-vous m'aider svp?

    Le code est le 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
    66
    67
     
        %Les 4 points de la perspective
        %******************************
        a_i = [2;272;239;10];   %Valeur des points obtenus si on effectue la démarche précédente.
        b_j = [316;322;39;10];
     
    %     figure(1),
    %     imshow(g2)
    %     [a_i,b_j] = ginput(4);     %Cette fonction permet d'obtenir les
        % coordonnées de 4 points.
     
     
        x1 = (b_j(1)-1)/Nj;
        y1 = ((Ni+1)-a_i(1))/Ni;
        x2 = (b_j(2)-1)/Nj;
        y2 = ((Ni+1)-a_i(2))/Ni;
        x3 = (b_j(3)-1)/Nj;
        y3 = ((Ni+1)-a_i(3))/Ni;
        x4 = (b_j(4)-1)/Nj;
        y4 = ((Ni+1)-a_i(4))/Ni;
     
        %*****************************************************************
     
     
        c = x1;
        f  = y1;
        det = -x3*y2 + x4*y2 + x2*y3 - x4*y3 - x2*y4 + x3*y4;
        g = (-x3*y1 + x4*y1 + x3*y2 - x4*y2 + x1*y3 - x2*y3 - x1*y4 + x2*y4)/det;
        h = (-x2*y1 + x3*y1 + x1*y2 - x4*y2 - x1*y3 + x4*y3 + x2*y4 - x3*y4)/det;
        a = (1 + g)*x2 - x1;
        d = (1 + g)*y2 - y1;
        b = (1 + h)*x4 - x1;
        e = (1 + h)*y4 - y1;
     
     
     
        %Formules pour travailler en pixels
        %**********************************
     
        for i = 1:Ni        %Indices dans l'image redressée (carré).   
            for j = 1:Nj
     
                %Coordonnées de l'image redressée (carré)
                %****************************************
                x(i,j) = (j-1)/Nj;
                y(i,j) = ((Ni+1)-i)/Ni;
     
                X(i,j) = (a*x(i,j) + b*y(i,j) + c)/(g*x(i,j) + h*y(i,j) + 1);
                Y(i,j) = (d*x(i,j) + e*y(i,j) + f)/(g*x(i,j) + h*y(i,j) + 1);
     
     
                %Indices dans la "vraie" image
                %*****************************
        %         j1(i,j) = floor(((x2-X(i,j)))+ x1);
        %         i1(i,j) = floor((Y(i,j)) + y4);
     
                j1(i,j) = (Ni+1) - floor(Ni*Y(i,j));
                i1(i,j) = floor(Nj*X(i,j)) + 1;
     
     
     
                if (i1(i,j) < Ni && j1(i,j) < Nj && i1(i,j)>0 && j1(i,j)>0)
                    image_final(i,j) = g2(i1(i,j),j1(i,j));
                end
     
            end
        end

    Merci d'avance.

    JP

  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 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Tu pourrais nous fournir une image et nous expliquer à quoi correspondent les variable essentielles afin qu'on puisse au moins tester ton code ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 45
    Points
    45
    Par défaut
    Voici mon image d'origine (à gauche) et mon image redressée (à droite) : enfin l'image qui aurait dû être redressée (lol).

    Merci

    JP

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Tu pourrais attacher l'image originale sur laquelle tu travailles ?
    Et une image du résultats que tu souhaites obtenir ?
    Et nous dire quel algorithme tu utilises ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    En fait je travaille sur une séquence vidéo. L'image d'origine correspond à l'image de gauche que j'ai posté.
    Je voudrais à partir de cette image (vue en perspective de la route) redresser la route pour obtenir une image comme une vue d'avion.
    L'algorithme utilisé est le suivant.

    Merci.

    JP

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Tu pourrais attacher l'image issue de la capture de la video dans sa taille réelle ?
    Ou au moins nous donner ses dimensions ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    La taille de l'image est la suivante :

    331*301.

    Je poste également une image de ka séquence en pièce jointe.

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Et... dernière question... à quoi devrait ressembler l'image finale ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 45
    Points
    45
    Par défaut
    Ben en fait je voudrais obtenir une image redressée, c'est-à-dire que les lignes blanches soient parallèles, dans le sens de la hauteur (bien verticales l'une de l'autre). En fait je voudrais obtenir une image de la route en perspective comme une vue d'avion.

    Merci

    JP

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Tu devrais afficher des résultats intermédiaires pour contrôler visuellement ton calcul :
    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
     
    g2 = imread('untitled4.jpg','jpg');
    % g2 = imresize(g2, 2, 'nearest');
     
    [Ni,Nj,p] = size(g2);
        %Les 4 points de la perspective
        %******************************
        % a_i = [2;272;239;10];   %Valeur des points obtenus si on effectue la démarche précédente.
        % b_j = [316;322;39;10];
     
        figure(1)
        subplot(221)
        image(g2)
        axis image
        title('Image initiale')
        hold on
     
     
        [b_j,a_i] = ginput(4);     %Cette fonction permet d'obtenir les
         % coordonnées de 4 points.
        plot([b_j;b_j(1)],[a_i;a_i(1)],'r-')
        drawnow
     
        x1 = (b_j(1)-1)/Nj;
        y1 = ((Ni+1)-a_i(1))/Ni;
        x2 = (b_j(2)-1)/Nj;
        y2 = ((Ni+1)-a_i(2))/Ni;
        x3 = (b_j(3)-1)/Nj;
        y3 = ((Ni+1)-a_i(3))/Ni;
        x4 = (b_j(4)-1)/Nj;
        y4 = ((Ni+1)-a_i(4))/Ni;
     
        subplot(223)
        hold on
        plot([x1 x2 x3 x4 x1],[y1 y2 y3 y4 y1],'r-');
        set(gca,'xlim',[0 1],'ylim',[0 1],'dataaspectratio',[1 1 1])    
        title('(x,y)')
        drawnow
        %*****************************************************************
     
        c = x1;
        f  = y1;
        det = -x3*y2 + x4*y2 + x2*y3 - x4*y3 - x2*y4 + x3*y4;
        g = (-x3*y1 + x4*y1 + x3*y2 - x4*y2 + x1*y3 - x2*y3 - x1*y4 + x2*y4)/det;
        h = (-x2*y1 + x3*y1 + x1*y2 - x4*y2 - x1*y3 + x4*y3 + x2*y4 - x3*y4)/det;
        a = (1 + g)*x2 - x1;
        d = (1 + g)*y2 - y1;
        b = (1 + h)*x4 - x1;
        e = (1 + h)*y4 - y1;
     
        xp = (a*[x1 x2 x3 x4 x1]+b*[y1 y2 y3 y4 y1]+c)./(g*[x1 x2 x3 x4 x1]+h*[y1 y2 y3 y4 y1]+1);
        yp = (d*[x1 x2 x3 x4 x1]+e*[y1 y2 y3 y4 y1]+f)./(g*[x1 x2 x3 x4 x1]+h*[y1 y2 y3 y4 y1]+1);
     
        subplot(224)
        hold on
        plot(xp,yp,'r-');
        set(gca,'xlim',[0 1],'ylim',[0 1],'dataaspectratio',[1 1 1])   
        title('(gX,gY)')
        drawnow
     
        %Formules pour travailler en pixels
        %**********************************
     
        for i = 1:Ni        %Indices dans l'image redressée (carré).   
            for j = 1:Nj
     
                %Coordonnées de l'image redressée (carré)
                %****************************************
                x(i,j) = (j-1)/Nj;
                y(i,j) = ((Ni+1)-i)/Ni;
     
                X(i,j) = (a*x(i,j) + b*y(i,j) + c)/(g*x(i,j) + h*y(i,j) + 1);
                Y(i,j) = (d*x(i,j) + e*y(i,j) + f)/(g*x(i,j) + h*y(i,j) + 1);
     
     
                %Indices dans la "vraie" image
                %*****************************
        %         j1(i,j) = floor(((x2-X(i,j)))+ x1);
        %         i1(i,j) = floor((Y(i,j)) + y4);
     
                j1(i,j) = (Ni+1) - floor(Ni*Y(i,j));
                i1(i,j) = floor(Nj*X(i,j)) + 1;
     
                if (i1(i,j) < Ni && j1(i,j) < Nj && i1(i,j)>0 && j1(i,j)>0)
                    image_final(i,j) = g2(i1(i,j),j1(i,j));
                end
     
            end
     
            subplot(222)
            imshow(image_final)
            title('Image redressée')
            axis image
     
        end
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Ton système d'équation se résout plutôt comme ceci :
    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
     
        A = [x1 y1 1 0 0 0 0 0
            0 0 0 x1 y1 1 0 0
            x2 y2 1 0 0 0 -x2 -y2
            0 0 0 x2 y2 1 0 0
            x3 y3 1 0 0 0 -x3 -y3
            0 0 0 x3 y3 1 -x3 -y3
            x4 y4 1 0 0 0 0 0
            0 0 0 x4 y4 1 -x4 -y4];
     
        B = [0;0;1;0;1;1;0;1];
     
        temp = A\B;
     
        a=temp(1);
        b=temp(2);
        c=temp(3);
        d=temp(4);
        e=temp(5);
        f=temp(6);
        g=temp(7);
        h=temp(8);
    Ce qui transforme bien ton polygone quelconque en un carré (si j'ai bien compris le problème)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Je ne sais pas si le code ci-dessous est juste mais le résultat me semble visuellement correcte

    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
    [g2,map] = imread('untitled5.gif','gif');
     
    [Ni,Nj] = size(g2);
     
    figure(1)
    colormap(map)
     
    subplot(221)
    image(g2)
    axis image
    title('Image initiale')
    hold on
     
     
    [b_j,a_i] = ginput(4);
     
    plot([b_j;b_j(1)],[a_i;a_i(1)],'g-')
    drawnow
     
    x1 = (b_j(1)-1)/Nj;
    y1 = ((Ni+1)-a_i(1))/Ni;
    x2 = (b_j(2)-1)/Nj;
    y2 = ((Ni+1)-a_i(2))/Ni;
    x3 = (b_j(3)-1)/Nj;
    y3 = ((Ni+1)-a_i(3))/Ni;
    x4 = (b_j(4)-1)/Nj;
    y4 = ((Ni+1)-a_i(4))/Ni;
     
    subplot(223)
    hold on
    plot([x1 x2 x3 x4 x1],[y1 y2 y3 y4 y1],'g-');
    plot(x1,y1,'ro',x2,y2,'bo',x3,y3,'ko',x4,y4,'mo');
    set(gca,'xlim',[0 1],'ylim',[0 1],'dataaspectratio',[1 1 1],'box','on')
    title('(x,y)')
    drawnow
    %*****************************************************************
     
     
    A = [x1 y1 1 0 0 0 0 0
        0 0 0 x1 y1 1 0 0
        x2 y2 1 0 0 0 -x2 -y2
        0 0 0 x2 y2 1 0 0
        x3 y3 1 0 0 0 -x3 -y3
        0 0 0 x3 y3 1 -x3 -y3
        x4 y4 1 0 0 0 0 0
        0 0 0 x4 y4 1 -x4 -y4];
     
    B = [0;0;1;0;1;1;0;1];
     
    temp = A\B;
    a=temp(1);
    b=temp(2);
    c=temp(3);
    d=temp(4);
    e=temp(5);
    f=temp(6);
    g=temp(7);
    h=temp(8);
     
    xp = (a*[x1 x2 x3 x4 x1]+b*[y1 y2 y3 y4 y1]+c)./(g*[x1 x2 x3 x4 x1]+h*[y1 y2 y3 y4 y1]+1);
    yp = (d*[x1 x2 x3 x4 x1]+e*[y1 y2 y3 y4 y1]+f)./(g*[x1 x2 x3 x4 x1]+h*[y1 y2 y3 y4 y1]+1);
     
    subplot(224)
    hold on
    plot(xp,yp,'g-');
    plot(xp(1),yp(1),'ro',xp(2),yp(2),'bo',xp(3),yp(3),'ko',xp(4),yp(4),'mo');
    set(gca,'xlim',[0 1],'ylim',[0 1],'dataaspectratio',[1 1 1],'box','on')
    title('(gX,gY)')
    drawnow
     
    %Formules pour travailler en pixels
     
    Nii = 500;
    Njj = 500;
     
    image_final = zeros(Nii,Njj,'uint8');
     
    xmin = min(b_j);
    xmax = max(b_j);
    ymin = min(a_i);
    ymax = max(a_i);
    %**********************************
    for i = ymin:.05:ymax        %Indices dans l'image redressée (carré).
        for j = xmin:.05:xmax
            %Coordonnées de l'image redressée (carré)
            %****************************************
            x = (j-1)/Nj;
            y = ((Ni+1)-i)/Ni;
     
            X = (a*x + b*y + c)/(g*x + h*y + 1);
            Y = (d*x + e*y + f)/(g*x + h*y + 1);
     
            if (X <= 1 && Y <= 1 && X>=0 && Y>=0)
                i1 = (Nii+1) - floor(Nii*Y);
                j1 = floor(Njj*X) + 1;
                image_final(i1,j1) = g2(round(i),round(j));
            end
     
        end
     
    end
     
    subplot(222)
    image(image_final)
    title('Image redressée')
    axis image
    Images attachées Images attachées   
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 45
    Points
    45
    Par défaut
    Je te remercie beaucoup Dut. Mais j'ai encore un petit soucis (il s'agit de la coordonnée en z). En fait lorsqu'on effectue le redressement 2D l'image finale sera aplatie. Comment faire pour garder les formes des objets?

    Merci

    JP

  14. #14
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    C'est un problème d'algorithme ... => Algorithme > Images
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 45
    Points
    45
    Par défaut
    Il n'y a rien que je puisse modifier dans le programme pour obtenir une meilleure qualité d'image?
    Voilà ce que j'obtiens: (voir pièce jointe).

    Je ne comprend pas pourquoi certains pixels prennent la valeur 0 (noir)...
    Aurais-tu une explication DUT? Et si oui,pourrais-je le modifier?

    Merci.

    JP.

  16. #16
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Essaie de diminuer ces valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Nii = 500;
    Njj = 500;
    Mais encore une fois, je ne suis pas sûr que mon programme réponde exactement à ton besoin... surtout la dernière partie
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 45
    Points
    45
    Par défaut
    C'est ce que j'ai effectué en premier afin d'obtenir une dimension de la route convenable.
    J'ai pris Nii = 250 et Njj = 150.

    J'observe une qualité d'image meilleure (voir pièce jointe précédente). Cependant, je ne sais pas pourquoi j'obtiens des pixels noirs (il ne trouve pas de correspondant en valeur de pixel? c'est cela?) C'est sûre, si je diminue Nii et Njj (Nii = 100 et Njj = 50 par exemple), le nombre de pixels noirs diminuent également mais la qualité de l'image devient de plus en plus mauvaise.

    JP

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 45
    Points
    45
    Par défaut
    Aurais-tu autrement un autre algorithme qui répond à mon problème de redressement d'image?

    Merci.

    JP.

  19. #19
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Pour les algorithmes, c'est ici que ça se passe : Algorithme > Images
    (tu peux toujours y ouvrir une nouvelle discussion en donnant un lien vers celle-ci)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 45
    Points
    45
    Par défaut
    J'ai compris pourquoi on avait des pixels noirs. On va chercher les valeurs des pixels dans l'image initiale et après on essaie de trouver son correspondant dans l'image finale. En fait, il faudrait pour chaque pixels de l'image finale trouver sa valeur qui correspond à l'image initiale. C'est le chemin inverse.

    Pouvez-vous m'aider à résoudre se problème?

    Merci

    JP

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [ImageMagick] Problème dans le code pour redimensionner une image
    Par pierrot10 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 08/06/2007, 14h06
  2. Réponses: 13
    Dernier message: 17/10/2006, 15h35
  3. Problème dans le code?
    Par Arch Enemy dans le forum C
    Réponses: 5
    Dernier message: 15/08/2006, 11h05
  4. [MySQL] Un problème dans le code PHP
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/07/2006, 11h06
  5. Quel est le problème dans ce code ?
    Par Luther13 dans le forum C
    Réponses: 12
    Dernier message: 26/08/2003, 16h09

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