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

Mathématiques Discussion :

Interpolation bilinéaire (ou pas)


Sujet :

Mathématiques

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 15
    Points : 26
    Points
    26
    Par défaut Interpolation bilinéaire (ou pas)
    Bonjour à tous,

    Tout d'abord, je ne sais pas si le titre de mon post est exact, donc voilà mon problème plus en détail :
    Je souhaite calibrer une caméra pour pouvoir obtenir à partir d'un pixel P(x, y) dans l'image la position du point correspondant dans l'espace P'(x, y, z).
    La coordonnée z est fixée (je cherche le point correspondant au niveau du sol).
    Je ne peux pas appliqué les méthodes de calibration habituelles (caméra grand angle, correction de distorsion inconnue appliquée à l'image).
    J'ai donc tracé une grande grille au sol, et construit une table de correspondance image -> repère caméra à partir de ces points. (j'ai donc une liste de points, avec pour chaque point (xmm, ymm, zmm) (coordonnées dans le repère caméra) et (xpx, ypx) coordonnées correspondantes dans l'image.

    Je cherche maintenant à déterminer les coordonnées (xmm, ymm, zmm (fixé)) d'un pixel P(x, y) n'appartenant pas à ma table.

    J'arrive facilement à trouver les 4 points de la table les plus proches entourant ce pixel (cf l'image jointe, points P1 à P4, dont on connait les coordonnées dans l'image et dans le repère caméra), et je cherche à calculer P(xmm, ymm) en faisant une interpolation.


    Cependant, je n'arrive pas à faire cette interpolation ...

    Quelqu'un aurait il une idée sur la manière de procéder?

    (Pour info, j'ai tenter la solution suivante : calcul de 4 distances d entre P et P1, P2, P3, P4 (en pixel) puis xmm = somme(1/di * Pi.xmm)/somme (1/di) (ce qui équivaut à calculer une sorte de barycentre) mais cette formule ne donnent pas de bons résultats. Il suffit de tester avec un point situé sur le segment [P3 P4] pour s'en rendre compte)

    Merci d'avance pour votre aide
    Images attachées Images attachées  

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Tu peux essayer d'utiliser les coordonnées barycentriques sur un triangles, en découpant ton quadrilatère en 2.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    la formule de l'interpolation bilinéaire :

    Soit une table 2D de valeurs, correspondant à une table de X et de Y. Le point à calculer est dénoté X_Pt, Y_Pt, et Val_Pt. Il figure dans la cellule (io,jo)-(io+1,jo+1).

    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
     
    Val00 = Table[io][jo] ;
    Val01 = Table[io+1][jo] ;
    Val11 = Table[io+1][jo+1] ;
    Val10 = Table[io][jo+1] ;
     
    dx0 = (X_Pt - X[jo]) / (X[jo+1]-X[jo]) ;
    dy0 = (Y_Pt - Y[io]) / (Y[io+1]-Y[io]) ;
    dx1 = 1.0 - dx0 ;
    dy1 = 1.0 - dy0 ;
     
    Val_Pt = Val00*dx1*dy1 +
             Val10*dx1*dy0 + 
             Val01*dx0*dy1 +
             Val11*dx0*dy0 ;
    Bien sûr, ici, tes X et Y sont équivalents à j et i.. Mais la formule est générale.
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

Discussions similaires

  1. Une classe pour l'Interpolation bilinéaire (2 dimensions)
    Par kaker dans le forum Général Java
    Réponses: 0
    Dernier message: 10/04/2012, 13h36
  2. Interpolation bilinéaire VB
    Par kuligan dans le forum VB.NET
    Réponses: 12
    Dernier message: 03/11/2009, 15h31
  3. Interpolation bilinéaire d'image
    Par mihaispr dans le forum Images
    Réponses: 2
    Dernier message: 29/09/2009, 17h34
  4. interpolation bilinéaire d'une image
    Par afef_master dans le forum Images
    Réponses: 1
    Dernier message: 18/10/2008, 13h00
  5. Interpolation bilinéaire
    Par hanane78 dans le forum Images
    Réponses: 17
    Dernier message: 29/11/2007, 15h06

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