[Help] Projet d'info Pyzo: faire le contour d'une image
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

[Help] Projet d'info Pyzo: faire le contour d'une image



  1. #1
    EquinoxEla

    [Help] Projet d'info Pyzo: faire le contour d'une image


    ------

    Bonjour à tous
    Je suis en PTSI et j'ai un projet d'info à faire sous Pyzo: faire le contour d'une image. Or voilà le problème:j'ai réussit à coder un truc qui lorsque je l'applique sur une image cela me fait effectivement bien les contours. Or dès que je met une image, avec des nuances, mon code me renvoit la même image sans rien effectuer dessus. C'est pourquoi je pense devoir effectuer un seuillage, enfin je ne sais pas si c'est le bon terme, pour l'image soit "pure".
    Pour définir le mot "pur" c'est compliqué parce que même moi je ne comprends pas très bien, mais quand je lance mon programme pour une image faite depuis Paint, que j'ai mis du noir, du rose, du rouge, etc il me rend le contour comme il faut. Mais quand je prends une image un peu plus complexe il me renvoie la même image. Pour que vous compreniez mieux j'ai mis l'énoncé en pièce jointe (de la ligne 1 à la ligne 115).
    Et voici mon code actuellement
    Code PHP:
    import matplotlib.pyplot as plt
    import numpy 
    as np
    from os import getcwd
    ,chdir

    def recupererInfoImage3
    (nomImage): ## écrire les " " dans le nom de l'image
        
    chdir("blablaabla"#On  peut essayer de mettre le répertoire comme une variable dans la fonction
        
    image=plt.imread(nomImage)
        
    nouveau=np.zeros((image.shape) ,int#On crée un nouveau tableau de même taille que l'image etudiée, il est rempli de 1.
        
    plt.imshow(image)
        
    nl,nc,n=image.shape
        
    #Rajouter ligne 11 "return nouveau"
        #return nl, nc, n #Ligne, colonne, n=? il faudra retirer le # après pour découper la fonction en sous fonction
        
    plt.imshow(image)
        
    #Ici commence la fonction BalayageImage(nl,nc,n)
        
    for l in range(0,nc-2): #On balaie les colonnes
            
    for c in range(0,nl-2):#Pour chaque colonne on balaie chaque ligne
                
    if image[c-2,l,0]!=image[c-1,l-1,0]:
                    
                        
                        
    nouveau[c-2,l-2,0]=#On change le pixel de couleur (il devient blanc, inialement il est noir à cause de ligne8)
                    
                        
        
    plt.imshow(nouveau)
        
    plt.show() 
    Merci à tous

    -----

  2. #2
    LeMulet

    Re : [Help] Projet d'info Pyzo: faire le contour d'une image

    D'après moi l'algorithme n'est pas bon.
    Trouver le contour d'une image c'est trouver l'ensemble des points adjacents entourant une forme.
    Le contour de la forme étant défini par le "contraste" entre les points extérieurs et les points intérieurs.

    La première étape consiste donc à définir la règle permettant de dire quand on a affaire à la forme à entourer et quand on a affaire à l'extérieur de la forme à entourer.

    On doit donc analyser les "couleurs" présentes dans l'image complète.
    Or ce ne sont pas les couleurs qui déterminent le contour (bien qu'on puisse aussi imaginer le faire de cette manière, c'est une stratégie possible de remplissage, pour faire un parallele avec le méthode FILL de paint par exemple ), mais la "luminosité"...
    Il faut donc déterminer la règle qui donne le niveau de luminosité.
    Par exemple (et ce n'est qu'une des nombreuses possibilités), on peut faire la moyenne des valeurs R G B, exemple : (128+55+67)/(3*255)
    ou alors, plus proche peut-être de ce qu'on pourrait appeler une forme pour l'oeil humain, prendre la valeur la plus élevée parmi les 3.
    Bref, ce point nécessite déjà d'être élucidé.

    Ensuite, à partir du nouveau tableau des luminosités issu de cette règle, il faut trouver les points de contraste.

    Mais ce n'est pas aussi simple qu'il y parait.
    Ici, dans l'algorithme que vous présentez, vous étudiez les colonnes et les lignes.
    C'est à moitié faux.
    On peut effectivement imaginer partir de chaque coté de l'image rectangulaire (depuis le haut, le bas, la gauche la droite) et sonder l'image jusqu'à trouver un point de contraste.
    Mais, ceci ne fonctionnera que pour une image "ronde".
    Si l'image était par exemple un bonhomme vertical, bras tendus vers le bas, jambes un peu écartés, cette méthode ne va pas trouver les points situés au niveau de l'aisselle du bras puisque depuis le bas, si on sonde l'image on arrive sur la jambe.

    La bonne méthode, à mon avis, consiste donc à trouver un premier point de contraste et un seul, depuis la gauche par exemple, puis de faire une recherche des points suivants et adjacents depuis ce point, "comme un escargot" si je puis dire, jusqu'à retrouver le premier point de recherche.

    La question de savoir comment devra réagir le programme s'il existe plusieurs formes (imaginons un soleil en plus du bonhomme) dans l'image est une étape supplémentaire à prendre en compte si on veut que le programme fonctionne à tous les coups.

Discussions similaires

  1. Faire apparaitre une info-bulle sur click d'une zone précise d'une image
    Par roro222 dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 31/05/2017, 09h44
  2. Problème de liste sur Pyzo
    Par Zeleph dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 19/09/2015, 13h22
  3. Projet d'info - Traitement audio
    Par emaxis dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 09/04/2012, 19h30
  4. Qq demande d'info sur un projet
    Par Sismic dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 2
    Dernier message: 07/11/2007, 22h22
  5. [Brun] TV:Pb sur contour d'image
    Par invite6b56f7fb dans le forum Dépannage
    Réponses: 3
    Dernier message: 15/04/2007, 11h13