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

Calcul scientifique Python Discussion :

Algorithme de correction de lentille


Sujet :

Calcul scientifique Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2015
    Messages : 4
    Par défaut Algorithme de correction de lentille
    Bonjour,

    Je me suis inspiré du site de Tanner Helland (tapper fisheye lens correction algorithm) pour créer un petit programme qui répondrait à cette problématique.

    Malheureusement l'algo ne semble pas fonctionner (il accentue plutôt l'effet d'ailleurs) et je voudrais savoir si vous pouviez m'aider à trouver l'erreur ?

    Je vous met le lien pour le code : https://github.com/julein/informatiq...ens_correction

    Merci d'avance!
    Bonne soirée

  2. #2
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Sauf erreur de ma part, l'algo est bon et le programme également.
    Le résultat est normal, je pense.
    A vérifier sur une image prise au fisheye.
    Dans l'algo de Tanner, je crois qu'il y a une erreur sur le zoom (pb de parenthèses).

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2015
    Messages : 4
    Par défaut
    D'acc merci de ta réponse. Pourtant en prenant comme image sa photo de gare (dont sa correction à lui marche bien) je n'obtiens pas le même résultat..

    Autre exemple : quand je prend le fisheye "renforcé" qu'il a lui même corrigé, je me retrouve en sortie avec la meme image encore plus bombée alors qu'elle devrait être plane non ?


    A gauche l'image non corrigée, a droite l'image a la sortie de mon programme.. Et tout a droite le code
    Images attachées Images attachées  

  4. #4
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Oups !
    Oui, effectivement, il y a un souci.
    Tu as oubli, je crois, le terme correctif mais de toutes façons, cela& ne marche pas effectivement.
    Je n'ai pas le temps en ce moment mais j'essaierai de m'y pencher ce we, si tu n'as pas trouvé.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2015
    Messages : 4
    Par défaut
    Ca marche merci! Je vais essayer de voir ça avec l'auteur de l'algo et puis si tu as le temps ça serait très sympa!

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,


    Tu as inversé la source et la destination.

    Comme ceci, ça va beaucoup mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            X_source = mi_largeur + theta * X
            Y_source = mi_hauteur + theta * Y
            couleur = image_originale.getpixel((X_source, Y_source))
            pix[x, y] = couleur
    Autre chose, pour ne pas dépendre d'un module extérieur uniquement pour deux opérations, utilise le module math.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    from math import sqrt, atan
    J'ai essayé d'ajouter le facteur zoom dont parle l'auteur, mais cela modifie les dimensions de l'image ce qui entraîne un "IndexError: image index out of range". À voir ....

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2015
    Messages : 4
    Par défaut
    Super merci! J'ai corrigé le code sur github. J'ai aussi du divisé par 2.5 la correction de l'angle (je ne sais pas pourquoi mais en tâtonnant ce fut ok)

    Je vais essayer de comprendre

  8. #8
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Je suis rendu ici mais cela ne me convient guère : j'ai l'impression que l'algo ne fait qu'extraire le milieu de l'image.

    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
    from PIL import Image
    from math import sqrt, atan
    image_originale = Image.open("Fisheye_photo.jpg") #ouvre l'image originale
    infos = (image_originale.size) #stocke largeur + hauteur dans infos
    largeur_image = infos[0] #récupère dans la liste infos largeur + hauteur
    hauteur_image = infos[1]
    mi_largeur = largeur_image/2
    mi_hauteur = hauteur_image/2
    force = 5
    zoom = 1.2
    new_largeur = int(largeur_image * zoom)
    new_hauteur = int(hauteur_image * zoom)
    image_corrigee = Image.new("RGB", (new_largeur, new_hauteur)) #crée une nouvelle image au même dimension
    correction_angle = (sqrt(((largeur_image)**2) + ((hauteur_image)**2)))/force
    X = 0
    Y = 0
    pix = image_corrigee.load()
    theta = 0
    for x in range (largeur_image):
        for y in range(hauteur_image):
            X = x - mi_largeur
            Y = y - mi_hauteur
            distance = sqrt((X**2)+(Y**2))
            r = distance / correction_angle
            if r == 0:
                theta = 1
            else:
                theta = atan(r)/r
            X_final = mi_largeur + theta * X * zoom
            Y_final = mi_hauteur + theta * Y * zoom
            pix[X_final, Y_final] = image_originale.getpixel((X_final,Y_final))
    image_originale.show()
    image_corrigee.show()
    P.S. Finalement, pour le zoom, je ne suis pas certain qu'il y ait une erreur...

  9. #9
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    @ marco056

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            pix[x, y] = image_originale.getpixel((X_final,Y_final))

  10. #10
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par VinsS Voir le message
    @ marco056

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            pix[x, y] = image_originale.getpixel((X_final,Y_final))
    !!!
    Merci VinsS, un peu de fatigue de mon côté, on dirait...
    L'image devient crado mais comme la définition n'est pas géniale...
    J'ai un 8mm fisheye, j'essaierai de corriger une de mes photos.

Discussions similaires

  1. Algorithme de correction de segmentation
    Par cynthia22 dans le forum Traitement d'images
    Réponses: 10
    Dernier message: 06/07/2009, 13h49
  2. Algorithme labyrinthe correction
    Par Daminou27 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 28/04/2009, 19h09
  3. Correction d'un algorithme
    Par coder dans le forum Pascal
    Réponses: 2
    Dernier message: 04/02/2008, 21h58
  4. Algorithme Ou Methode de correction (Urgent)
    Par riyahi dans le forum SQL
    Réponses: 22
    Dernier message: 15/08/2007, 15h48
  5. Algorithme de correction d'adresse email (corriger : domaine + extension)
    Par the_mat dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 03/05/2006, 10h34

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