Partage
  • Partager sur Facebook
  • Partager sur Twitter

Coordonnées centre d'un objet complexe sur image

Sujet résolu
    22 avril 2021 à 10:00:41

    Bonjour/bonsoir,

    J'utilise Spyder avec Python 3.8,

    J'essaye depuis deux trois jours la chose suivante:

    J'ai cette image (et d'autres similaires) : https://www.cjoint.com/c/KDujuvpuVOC

    Mon but est de trouver les coordonnées du centre de la croix,

    Pour cela j'ai déjà réalisé plusieurs choses mais je m'en suis le mieux rapproché grâce à un système de clic sur image avec la souris avec le code suivant pour ceux que ça intéresse :

    from tkinter import *
    from tkinter.filedialog import * #pour les gestions de fichiers
    from PIL import Image as Img
    from PIL import ImageTk
    
    #fonction permettant de définir les coordonnées
    def coordonnees(event):
        xe = event.x - 200
        ye = -(event.y - 112.5)
        print("Les coordonnées du point sont x = {} et y = {}".format(xe,ye))
        
    
    # Création d'une fenêtre d'attente de fichier
    fen_princ = Tk()                                                      
    monFichier = StringVar()                                              
    monFichier.set("Aucun fichier sélectionné...")                       
    monAffichage = Label(fen_princ, textvariable = monFichier, width=70)  
    monAffichage.pack()
    
    # Sélection de l'adresse de l'image
    filename = askopenfilename(title = "Choisir une image", filetypes = [ ('jpg files','.jpg'),('all files','.*') ])
    
    # Mise à jour de monFichier
    monFichier.set(filename)
    
    # Création d'une fenêtre avec l'image sélectionné
    presentation = Img.open(filename)
    presentationTk = ImageTk.PhotoImage(presentation)
    labelphoto = Label(fen_princ, image = presentationTk)
    labelphoto.pack()
    
    #utilisation du clic de la souris pour avoir les coordonnées de celle-ci sur l'image
    fen_princ.title("Sélection du point par clic de souris.")
    fen_princ.geometry("400x225") 
    fen_princ.bind('<Button-1>',coordonnees)
    fen_princ.mainloop()

    Or, bien que sympathique, pour le traitement de plusieurs images cela va perdre en efficacité.

    D'où ma volonté de créer un code qui capte automatiquement la croix et qui calcule son centre pour enfin me données les coordonnées de celui-ci.

    J'ai commencé par utiliser le code suivant, qui est complexe pour moi mais dont je commence à comprendre le principe :

    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
        
    # Charger l'image en niveaux de gris et obtenir les coordonnées 
    img = cv2.imread('4.jpg', 0)
    height, width = img.shape
    blur = cv2.GaussianBlur(img,(5,5),0)
    ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    
    images = th3
    titles = "Otsu's Thresholding"
    plt.imshow(images,'gray')
    

    Il ne m'appartient pas, il s'agit d'un exercice sur un site tiers qui consistait à montrer comment utiliser le gaussianblur.

    L'idéal pour moi serait de combiner l'ouverture de fenêtre et la sélection d'image de mon code précédent, d'utiliser ce code là pour transformer l'image comme ceci : https://www.cjoint.com/c/KDwhozJCgrC (on remarque d'ailleurs la complexité de la tâche car le jeu de lumière sur l'image rend une forme qui n'est pas une croix) puis en sortir les coordonnées de son centre.

    Je suis débutant en Python, ce programme est un gros challenge et m'a déjà énormément appris, notamment sur le traitement d'image avec openCV.

    Mais là je bloque, je pense que c'est pour l'instant au-dessus de mes compétences, je m'en remets donc à vous.

    J'avais peut être une piste mais je n'arrive pas à la réaliser d'ailleurs --> créer un quadrilatère avec les 4 sommets de la croix puis calculer le centre de celui-ci.

    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      22 avril 2021 à 12:47:01

      C'est toujours plus ou moins la même croix sur la série d'images (on dirait un objet céleste) ?

      Si oui, je commencerai pas isoler la croix de par sa luminosité, puis je pointerai son centre manuellement sur la première image, et enfin je ferai une comparaison par superposition avec les autres images.

      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        22 avril 2021 à 13:07:26

        si le but c'est de localiser l'emplacement de la croix sur plusieurs images, tu peux utiliser le matchtemplate qui permet de retrouver une image dans une autre image https://docs.opencv.org/3.4/de/da9/tutorial_template_matching.html
        • Partager sur Facebook
        • Partager sur Twitter
          22 avril 2021 à 13:38:06

          umfred a écrit:

          si le but c'est de localiser l'emplacement de la croix sur plusieurs images, tu peux utiliser le matchtemplate qui permet de retrouver une image dans une autre image https://docs.opencv.org/3.4/de/da9/tutorial_template_matching.html

          Ceci m'a l'air pas trop mal, je viens de lire vite fait et je pense pouvoir comprendre et en dégager les coordonnées, merci :) Je ne met pas encore le sujet en résolu cependant au cas où je n'y parviendrai pas comme ça et si je trouve d'autres suggestions

          josmiley a écrit:

          C'est toujours plus ou moins la même croix sur la série d'images (on dirait un objet céleste) ?

          Si oui, je commencerai pas isoler la croix de par sa luminosité, puis je pointerai son centre manuellement sur la première image, et enfin je ferai une comparaison par superposition avec les autres images.


          Oui toujours plus ou moins la même mais avec des zooms différents, il s'agit d'une croix projeté à l'infini dans un casse grain.

          Je garde cette idée de côté aussi merci



          • Partager sur Facebook
          • Partager sur Twitter
            22 avril 2021 à 18:45:23

            Petonnus a écrit:

            Il s'agit d'une croix projeté à l'infini dans un casse grain.



            Pas compris.

            • Partager sur Facebook
            • Partager sur Twitter

            Python c'est bon, mangez-en. 

              23 avril 2021 à 9:12:33

              josmiley a écrit:

              Petonnus a écrit:

              Il s'agit d'une croix projeté à l'infini dans un casse grain.



              Pas compris.

              Rassure toi c'est normal, si tu n'as pas spécialement de connaissances en optique :) J'aimerai bien pouvoir t'expliquer, mais je ne suis pas très expert là dedans non plus, donc je ne veux pas te dire de bêtises.

              Bon j'ai finalement réussi par ailleurs, grâce à la reconnaissance d'objet dans une image donnée par umfred, je vous remercie tout les deux.

              Bonne journée.



              • Partager sur Facebook
              • Partager sur Twitter
                23 avril 2021 à 9:40:37

                Bah si tu connais une page explicative tu pourrais partager le lien 😉
                • Partager sur Facebook
                • Partager sur Twitter

                Python c'est bon, mangez-en. 

                Coordonnées centre d'un objet complexe sur image

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown