Redresser une image — Les-mathematiques.net The most powerful custom community solution in the world

Redresser une image

Bonjour,
Je cherche à résoudre une question de perspective d'image. Il y a une question qui se rapproche de la mienne sur cette discussion http://www.les-mathematiques.net/phorum/read.php?8,751743,751898 mais ce n'est pas tout à fait ma problématique (et à vrai dire je ne suis pas assez "matheux" pour tout comprendre :S).

J'utilise un objet rectangulaire (avec des points dans les angles) qui se place dans un coin d'une photo pour pouvoir la redresser. C'est au cas où la photo n'a pas été prise d'aplomb.Voir l'image ci-dessous. Le but est d'ainsi pouvoir calculer la superficie d'un autre objet (ici le triangle) le plus proche possible de la réalité. Le rectangle a une hauteur égale à 2 fois la largeur mais sur l'exemple, la perspective l'aplatit.

Vu qu'il faut traiter l'image informatiquement, j'ai besoin de savoir qu'elles formules appliquer en hauteur (sur chaque ligne) pour redonner la bonne hauteur au rectangle, et en largeur (largeur de chaque ligne), en extrapolant la transformation du rectangle à toute l'image. Je vais normalement obtenir un trapèze.
L’algorithme va devoir créer une image avec la taille finale (plus grande) et pour chaque pixel, aller trouver celui qui correspond dans l'image originale selon les fonctions à appliquer.

Je ne suis peut-être pas très clair, n'hésitez pas à me pousser au-delà de mes limites mathématiques ;)
31020

Réponses

  • Bonjour,
    J'ai fait un petit logiciel qui réalise cela, le but étant d'obtenir des photos de façades à l'échelle.
    Si votre question est d'avoir un tel logiciel parceque vous en avez besoin, je vous le donnerai volontiers, si c'est pour le plaisir de réaliser un tel outil, je vous guiderai (vous n'imaginez pas tout le papier que j'ai noirci pour y arriver).
    Pour mémoire, il y a quelques années, on a pu voir sur le net une vague imitation qui donnait un résultat faux.
    Cordialement.
  • J'ai vu plusieurs logiciels qui font des transformations pour ce type d'utilisation, comme http://wollli.dyndns.org/PerspectiveImageCorrection/index.htm par exemple.
    La différence est que je ne cherche pas à redresser en définissant une grande zone, comme un bâtiment, mais à extrapoler à partir d'une petite partie.

    C'est en effet pour incorporer dans un logiciel qui n'est pas spécialisé dans l'image mais nécessite cette fonction. La proximité du résultat avec la réalité est très importante, les transformations ne devraient pas être trop grandes.

    J'ai déjà noirci quelques pages également ! Ce serait intéressant de connaître vos solutions à des questions qui devraient être proches. Merci pour votre proposition.

    Je bricole un peu de trigonométrie pour estimer les transformations mais je n'ai pas grand chose de probant actuellement.
  • Dans mon hypothèse (façades), il existe les notions fondales suivantes : verticale, horizontale, perspective, objet représenté par l'image plan et vertical etc.
    Si j'ai bien compris, vous cherchez à extrapoler des valeurs obtenues à partir d'une partie relativement réduite. Ceci demande de grandes précautions.
    Dans ce contexte, on parle généralement de "points de calage" il s'agit de points connus dans 2 systèmes. Votre contexte permet-il de déterminer ces points de calage, quel peut être leur nombre ?

    J'avoue que je comprends pas vraiment de quoi il s'agit. Par exemple, pourrait-on dire que l'on prend une photo d'une façade de batiment et pour pouvoir la redresser, on a pris soin de coller, sur cette façade, un rectangle de rapport hauteur/largeur connu ? Est-ce que le plan du rectangle connu et le plan de l'objet photographié sont toujours confondus ?

    Ma solution utilise des notions très simple de géométrie, disons en gros Thalès, et pas de trigonométrie.

    Si certains points sont confidentiels, on peut aussi correspondre par MP ou mail.
  • Il y a 4 points de calages, dans les coins du rectangle.
    Il faut imaginer qu'on pose ce rectangle de 5x10cm sur un bureau et on photographie un objet plat à côté. On veut obtenir la surface de l'objet plat.
    Si on est bien d'aplomb le rectangle est bien rectangulaire, si on est penché on a une perspective à corriger.

    Je suis parti sur du Thales aussi, après quelques essais de trigo.
  • Voici un redresseur. Quand on redresse le quadrilatère rouge en le rectangle vert, on redresse le triangle rouge en le triangle vert. Vous pouvez jouer en bougeant les points rouges à la souris. La fonction de redressage envoie M sur f(M).
    <applet name="ggbApplet" code="geogebra.GeoGebraApplet" archive="geogebra.jar"
    codebase="http://jars.geogebra.org/webstart/4.2/unsigned/&quot;
    width="623" height="498">
    <param name="ggbBase64" value="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" />
    <param name="java_arguments" value="-Xmx1024m -Djnlp.packEnabled=true" />
    <param name="cache_archive" value="geogebra.jar, geogebra_main.jar, geogebra_gui.jar, geogebra_cas.jar, geogebra_algos.jar, geogebra_export.jar, geogebra_javascript.jar, jlatexmath.jar, jlm_greek.jar, jlm_cyrillic.jar, geogebra_properties.jar" />
    <param name="cache_version" value="4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0" />
    <param name="showResetIcon" value="false" />
    <param name="enableRightClick" value="false" />
    <param name="errorDialogsActive" value="true" />
    <param name="enableLabelDrags" value="false" />
    <param name="showMenuBar" value="false" />
    <param name="showToolBar" value="false" />
    <param name="showToolBarHelp" value="false" />
    <param name="showAlgebraInput" value="false" />
    <param name="useBrowserForJS" value="true" />
    <param name="allowRescaling" value="true" />
    C'est une appliquette Java créée avec GeoGebra ( www.geogebra.org) - Il semble que Java ne soit pas installé sur votre ordinateur, merci d'aller sur www.java.com
    </applet>

    Bémol : les sommets du triangle rouge s'envoient sur les sommets du triangle vert. Je ne garantis pas que l'intérieur du triangle rouge s'envoie toujours sur l'intérieur du triangle vert.
  • Ca parait très intéressant !
    Comment trouve t'on l'équation "f" qui permet d'obtenir les x et y vert à partir du rouge ?
  • C'est de la géométrie projective, comme expliqué dans le fil que tu citais.

    On cherche une homographie du plan qui envoie les quatres points $A,B,C,D$ sur $A,B, F,G$ (avec les notations du dessin). La géométrie projective dit qu'il y a une et une seule homographie qui fait ça (on a des systèmes de 4 points tels qu'il n'y en a pas 3 alignés, autrement dit des repères projectifs du plan). Une homographie du plan est donnée par une matrice inversible 3x3, définie à un facteur près. On trouve les coefficients de cette matrice en résolvant un système linéaire. Concrètement, voici les calculs en Sage (avec une petite économie pour n'avoir que 6 inconnues $a0,\ldots,a5$, avec 6 équations exprimant que $C$ s'envoie sur $F$ et $D$ sur $G$) :
    file.php?8,file=31034
    file.php?8,file=31036
    Après, il n'y a plus qu'à donner ces formules à GeoGebra pour faire un bel applet.31036
    31034
  • Bonjour Ga,
    Il me semble que dans le problème posé par iamtit, il y a une notion incontournable : la perspective.
    D'autre part, il existe effectivement une transformation plane qui se définit avec 3 points, cette transformation prend 6 paramètres (transformation affine). Dans le cas pésent, on a 4 points, donc, 8 paramètres.
    Il y a probablement quelque-chose qui m'échappe.
  • Ce qui t'échappe, ça a l'air d'être la géométrie projective, qui est justement un bon outil pour parler de perspective.
    Si tu me lis, tu verras que je ne parle pas de transformation affine, mais d'homographie du plan (projectif).
    J'ai bien écrit qu'une homographie du plan est détermibnée par l'image des quatre points d'un repère projectif (8 paramètres), et aussi qu'une homographie est donnée par une matrice 3x3 à multiplication par un scalaire près (3x3 - 1 = 8, rebelote).
    As-tu joué un peu avec l'applet ? Ce n'est clairement pas une transformation affine, n'est-ce pas ?
  • Oui, effectivement, la géométrie projective ne fait pas partie de mes spécialités.
    Par ailleurs, je n'ai pas réussi à voir la démo.
    J'avoue aussi que je pense être incapable de distinguer à l'oeil nu et sur une figure géométrie comme un triangle, si c'est une transformation affine ou un redressement d'image.
    Ce qui m'interpelle, c'est que la géométrie projective transforme un objet 3D en image 2D, alors qu'ici, on doit transformer une image 2D déformée pour des raisons de prise de vue en une image 2D telle qu'elle est en réalité.
    Pour mieux visualier la chose, il serait intéressant que le trangle ou le rectangle de base contienne un cercle déformé, c'est à dire qui aurait le contour de la section d'un oeuf approximativement, et après transformation, ce cercle devrait être parfaitement rond, alors qu'une transformation affine produirait une ellipse.
  • la géométrie projective transforme un objet 3D en image 2D
    Non. Une projection centrale d'un plan sur un autre plan (ce qui est bien la situation d'iamtit) est une homographie (transformation projective) du premier plan sur le deuxième.
    Par ailleurs, tu as l'air de penser qu'un cercle vu en perspective donne "un oeuf", avec un gros bout et un petit bout. Ben non. L'image d'un cercle par une transformation projective, c'est une conique (ellipse, ou hyperbole, ou parabole).

    Je fais une capture d'écran puisque tu ne peux pas visualiser l'applet (problème de java ? de navigateur ?). L'homographie du plan fait passer du rouge au vert. Le cercle se transforme ici en ellipse.
    31038
  • Je suis en c# (.net) qui n'est pas langage tourné mathématique, je ne vais pas pouvoir faire manger ça à mon programme comme ça.

    S'il est possible d'avoir une fonction où chaque point de la nouvelle image trouve ses deux coordonnées par rapport à celles de l'image originale, ça peut être applicable aisément.

    Il y a des matrices en dotnet mais il faut voir si on peut faire autant de choses avec que ce que nécessite le programme de Ga.
  • S'il est possible d'avoir une fonction où chaque point de la nouvelle image trouve ses deux coordonnées par rapport à celles de l'image originale,

    Je l'ai donné, n'as-tu pas vu ? Bon, alors je redonne. Si C est de coordonnées (xC,yC) et D de coordonnées (xD,yD), alors l'image du point de coordonnées (x,y) est le point de coordonnées ((xIm,yIm), où (je reprends la sortie ci-dessus)
    xIm =  (xD*y - x*yD)*(xD*yC - xC*yD - yC + yD)*yC/(xD^2*y*yC^2 - 2*xC*xD*y*yC*yD + xC^2*y*yD^2 - xD*y*yC^2 + 2*xD*y*yC*yD + x*yC^2*yD - xD*yC^2*yD - xC*y*yD^2 - x*yC*yD^2 + xC*yC*yD^2)
    yIm =  2*(xD*yC - xC*yD - yC + yD)*(xD*yC - xC*yD)*y/(xD^2*y*yC^2 - 2*xC*xD*y*yC*yD + xC^2*y*yD^2 - xD*y*yC^2 + 2*xD*y*yC*yD + x*yC^2*yD - xD*yC^2*yD - xC*y*yD^2 - x*yC*yD^2 + xC*yC*yD^2)
    
  • Une précision, tout de même : j'ai calculé ces formules pour A=(0,0), B=(1,0), F=(1,2), G=(0,2) (les sommets du rectangle).
  • Ah oui, désolé :-S
    Je test ça.
  • Je me heurte au problème de repère.
    En effet, mes points A, B, F et G ne sont pas du tout à (0,0) (1,0) (1,2) et (0,2) respectivement, puisque j'ai les coordonnées de l'image dont (0,0) est le point en haut à gauche.

    Lors du calcul de xIm et yIm je peux transformer x et y pour qu'ils correspondent à un repère centré en A.
    Par contre j'aurai AB qui aura une valeur variable, sachant même que B pourra ne pas être sur la même abscisse que A.
    B étant tout de même connu, on peut trouver F et G, même si ce rectangle peut être penché.
    La transformation proposée ne permettant pas de le redresser, il faudra ajouter une rotation ensuite, de même qu'un zoom pour que AB corresponde à une valeur attendue (5cm).

    Bref, j'imagine qu'il faut donc recalculer les formules qui servent à déterminer xIm et yIm à chaque traitement d'image différente, selon les emplacement réels de A, B, F et G. Est-ce bien cela ?
    Dans ce cas ça va être coton de trouver un code en c# qui résolve les matrices à la manière simple que le code proposé ici.
  • il faut donc recalculer les formules qui servent à déterminer xIm et yIm à chaque traitement d'image différente, selon les emplacement réels de A, B, F et G. Est-ce bien cela ?

    Non, on peut obtenir une fois pour toutes les formules pour xIm et yIm avec pour paramètres les coordonnées des images des points de calage dans la photos. Ce seront des formules un peu plus longuettes que celles avec pour seuls paramètres les coordonnées de C et D, mais c'est tout. Une fois ces formules calculées (le principe est expliqué dans l'autre fil), plus besoin de matrices.

    Là présentement, j'ai autre chose à faire. Mais n'importe qui peut le faire.
  • Merci de me rassurer quand à l'usage d'une formule fixée une fois pour toute pour xIm et yIm.
    Par contre, je m'estime dans le groupe des "nimporte qui" mais je ne peux pas le faire ;)
    C'est bien pour cela que je me suis approché de spécialistes !

    Je ne force personne à me répondre et encore moins à le faire dans la minute :)
    Par contre, étant donné mon incompétence en matière de géométrie et ma méconnaissance de vos outils informatiques, j'attendrai qu'une âme charitable se fasse un plaisir de me calculer les formules en fonction des points soulevés dans mon message précédent.

    D'avance 1000 mercis :D
  • Voici le calcul de la matrice de l'homographie qui redresse les quatre points $A_i$ de coordonnées $(a_i,b_i)$ (pour $i=0,\ldots,3)$), images des points de calage sur la photo, en le rectangle de sommets $C_0=(0,0), \ C_1=(c,0),\ C_2= (0,2c),\ C_3=(c,2c)$. J'ai fait quelques adaptations par rapport à la méthode indiquée dans l'autre fil pour éviter les dénominateurs;
    file.php?8,file=31065

    Voici la sortie de la dernière commande (les coefficients de la matrice $H$. Pas très beaux, j'avais prévenu.
    H [0, 0]  =  c * (-b0 + b2) * (a2*b1 - a3*b1 - a1*b2 + a3*b2 + a1*b3 -
    a2*b3) * (a1*b0 - a3*b0 - a0*b1 + a3*b1 + a0*b3 - a1*b3)
    H [0, 1]  =  (-1) * c * (-a0 + a2) * (a2*b1 - a3*b1 - a1*b2 + a3*b2 +
    a1*b3 - a2*b3) * (a1*b0 - a3*b0 - a0*b1 + a3*b1 + a0*b3 - a1*b3)
    H [0, 2]  =  (-1) * c * (a2*b1 - a3*b1 - a1*b2 + a3*b2 + a1*b3 - a2*b3)
    * (-a2*b0 + a0*b2) * (a1*b0 - a3*b0 - a0*b1 + a3*b1 + a0*b3 - a1*b3)
    H [1, 0]  =  (2) * c * (-b0 + b1) * (a2*b1 - a3*b1 - a1*b2 + a3*b2 +
    a1*b3 - a2*b3) * (a2*b0 - a3*b0 - a0*b2 + a3*b2 + a0*b3 - a2*b3)
    H [1, 1]  =  (-2) * c * (-a0 + a1) * (a2*b1 - a3*b1 - a1*b2 + a3*b2 +
    a1*b3 - a2*b3) * (a2*b0 - a3*b0 - a0*b2 + a3*b2 + a0*b3 - a2*b3)
    H [1, 2]  =  (-2) * c * (a2*b1 - a3*b1 - a1*b2 + a3*b2 + a1*b3 - a2*b3)
    * (a2*b0 - a3*b0 - a0*b2 + a3*b2 + a0*b3 - a2*b3) * (-a1*b0 + a0*b1)
    H [2, 0]  =  -a2^2*b0^2*b1 + 2*a2*a3*b0^2*b1 - a3^2*b0^2*b1 +
    a2^2*b0*b1^2 - 2*a2*a3*b0*b1^2 + a3^2*b0*b1^2 + a1^2*b0^2*b2 -
    2*a1*a3*b0^2*b2 + a3^2*b0^2*b2 - 2*a0*a1*b0*b1*b2 + 2*a0*a2*b0*b1*b2 +
    2*a1*a3*b0*b1*b2 - 2*a2*a3*b0*b1*b2 + a0^2*b1^2*b2 - 2*a0*a2*b1^2*b2 +
    2*a2*a3*b1^2*b2 - a3^2*b1^2*b2 - a1^2*b0*b2^2 + 2*a1*a3*b0*b2^2 -
    a3^2*b0*b2^2 - a0^2*b1*b2^2 + 2*a0*a1*b1*b2^2 - 2*a1*a3*b1*b2^2 +
    a3^2*b1*b2^2 - a1^2*b0^2*b3 + a2^2*b0^2*b3 + 2*a1*a3*b0^2*b3 -
    2*a2*a3*b0^2*b3 + 2*a0*a1*b0*b1*b3 - 2*a0*a2*b0*b1*b3 - 2*a1*a3*b0*b1*b3
    + 2*a2*a3*b0*b1*b3 - a0^2*b1^2*b3 + 2*a0*a2*b1^2*b3 - a2^2*b1^2*b3 +
    2*a0*a1*b0*b2*b3 - 2*a0*a2*b0*b2*b3 - 2*a1*a3*b0*b2*b3 +
    2*a2*a3*b0*b2*b3 - 2*a0*a1*b1*b2*b3 + 2*a0*a2*b1*b2*b3 +
    2*a1*a3*b1*b2*b3 - 2*a2*a3*b1*b2*b3 + a0^2*b2^2*b3 - 2*a0*a1*b2^2*b3 +
    a1^2*b2^2*b3 - 2*a0*a1*b0*b3^2 + a1^2*b0*b3^2 + 2*a0*a2*b0*b3^2 -
    a2^2*b0*b3^2 + a0^2*b1*b3^2 - 2*a0*a2*b1*b3^2 + a2^2*b1*b3^2 -
    a0^2*b2*b3^2 + 2*a0*a1*b2*b3^2 - a1^2*b2*b3^2
    H [2, 1]  =  (-1) * (a1^2*a2*b0^2 - a1*a2^2*b0^2 - a1^2*a3*b0^2 +
    a2^2*a3*b0^2 + a1*a3^2*b0^2 - a2*a3^2*b0^2 - 2*a0*a1*a2*b0*b1 +
    2*a1*a2^2*b0*b1 + 2*a0*a1*a3*b0*b1 + 2*a0*a2*a3*b0*b1 - 2*a1*a2*a3*b0*b1
    - 2*a2^2*a3*b0*b1 - 2*a0*a3^2*b0*b1 + 2*a2*a3^2*b0*b1 + a0^2*a2*b1^2 -
    a0*a2^2*b1^2 - a0^2*a3*b1^2 + a2^2*a3*b1^2 + a0*a3^2*b1^2 - a2*a3^2*b1^2
    + 2*a0*a1*a2*b0*b2 - 2*a1^2*a2*b0*b2 - 2*a0*a1*a3*b0*b2 +
    2*a1^2*a3*b0*b2 - 2*a0*a2*a3*b0*b2 + 2*a1*a2*a3*b0*b2 + 2*a0*a3^2*b0*b2
    - 2*a1*a3^2*b0*b2 - a0^2*a1*b2^2 + a0*a1^2*b2^2 + a0^2*a3*b2^2 -
    a1^2*a3*b2^2 - a0*a3^2*b2^2 + a1*a3^2*b2^2 - 2*a0^2*a2*b1*b3 +
    2*a0*a1*a2*b1*b3 + 2*a0*a2^2*b1*b3 - 2*a1*a2^2*b1*b3 + 2*a0^2*a3*b1*b3 -
    2*a0*a1*a3*b1*b3 - 2*a0*a2*a3*b1*b3 + 2*a1*a2*a3*b1*b3 + 2*a0^2*a1*b2*b3
    - 2*a0*a1^2*b2*b3 - 2*a0*a1*a2*b2*b3 + 2*a1^2*a2*b2*b3 - 2*a0^2*a3*b2*b3
    + 2*a0*a1*a3*b2*b3 + 2*a0*a2*a3*b2*b3 - 2*a1*a2*a3*b2*b3 - a0^2*a1*b3^2
    + a0*a1^2*b3^2 + a0^2*a2*b3^2 - a1^2*a2*b3^2 - a0*a2^2*b3^2 +
    a1*a2^2*b3^2)
    H [2, 2]  =  a1*a2^2*b0^2*b1 - 2*a1*a2*a3*b0^2*b1 + a1*a3^2*b0^2*b1 -
    a0*a2^2*b0*b1^2 + 2*a0*a2*a3*b0*b1^2 - a0*a3^2*b0*b1^2 - a1^2*a2*b0^2*b2
    + 2*a1*a2*a3*b0^2*b2 - a2*a3^2*b0^2*b2 + 2*a0*a1*a3*b0*b1*b2 -
    2*a0*a2*a3*b0*b1*b2 - 2*a1*a3^2*b0*b1*b2 + 2*a2*a3^2*b0*b1*b2 +
    a0^2*a2*b1^2*b2 - 2*a0^2*a3*b1^2*b2 + 2*a0*a3^2*b1^2*b2 -
    a2*a3^2*b1^2*b2 + a0*a1^2*b0*b2^2 - 2*a0*a1*a3*b0*b2^2 + a0*a3^2*b0*b2^2
    - a0^2*a1*b1*b2^2 + 2*a0^2*a3*b1*b2^2 - 2*a0*a3^2*b1*b2^2 +
    a1*a3^2*b1*b2^2 + 2*a1^2*a2*b0^2*b3 - 2*a1*a2^2*b0^2*b3 -
    a1^2*a3*b0^2*b3 + a2^2*a3*b0^2*b3 - 2*a0*a1*a2*b0*b1*b3 +
    2*a0*a2^2*b0*b1*b3 + 2*a1*a2*a3*b0*b1*b3 - 2*a2^2*a3*b0*b1*b3 +
    a0^2*a3*b1^2*b3 - 2*a0*a2*a3*b1^2*b3 + a2^2*a3*b1^2*b3 -
    2*a0*a1^2*b0*b2*b3 + 2*a0*a1*a2*b0*b2*b3 + 2*a1^2*a3*b0*b2*b3 -
    2*a1*a2*a3*b0*b2*b3 + 2*a0^2*a1*b1*b2*b3 - 2*a0^2*a2*b1*b2*b3 -
    2*a0*a1*a3*b1*b2*b3 + 2*a0*a2*a3*b1*b2*b3 - a0^2*a3*b2^2*b3 +
    2*a0*a1*a3*b2^2*b3 - a1^2*a3*b2^2*b3 + a0*a1^2*b0*b3^2 -
    2*a1^2*a2*b0*b3^2 - a0*a2^2*b0*b3^2 + 2*a1*a2^2*b0*b3^2 -
    a0^2*a1*b1*b3^2 + 2*a0*a1*a2*b1*b3^2 - a1*a2^2*b1*b3^2 + a0^2*a2*b2*b3^2
    - 2*a0*a1*a2*b2*b3^2 + a1^2*a2*b2*b3^2
    

    Mode d'emploi pour calculer les coordonnées du redressement du point de coordonnées $(x,y)$ sur la photo : calculer $p_i(x,y)=H_{i,0}\,x+H_{i,1}\,y+ H_{i,2}$ ; les coordonnées de l'image dans le redressement sont $\left(\dfrac{p_0(x,y)}{p_2(x,y)},\;\dfrac{p_1(x,y)}{p_2(x,y)}\right)$.31065
  • Bonjour Ga,
    Bon, je vais essayer, mais avant, je voudrais m'assurer d'avoir bien tout compris.

    Les deux premières colonnes des deux premières lignes sont des nombres de degré 6 la troisième colonne est de degré 7. La troisième ligne est d'un degré inférieur aux deux premières. N'y aurait-il pas moyen de trouver des mises en facteur pour éviter des opération d'addition et soustraction de très grands nombres ?

    Question : il semble que ceci ne soit valable que pour les 4 points de base suivant un rectangle d'origine 0, de base a et de hauteur 2*a. Oui ou non ?
  • Les coefficients des deux premières lignes de la matrice sont déjà factorisés. Ceux de la dernière ligne ne factorisent pas (c'est pour ça qu'ils prennent plus de place). Par ailleurs, comme indiqué, le paramètre $c$ est juste là pour l'ajustement de la taille du rectangle de calage ; il va donc être fixé une fois pour toutes, et ne doit pas compter comme variable.
    Oui, le calcul est fait selon les spécifications d'iamtit, avec comme points de calage les sommets d'un rectangle deux fois plus haut que large. Mais il est très facile d'adapter ça à quatre points identifiés comme sommets d'un rectangle (par exemple une façade, si cette façade est rectangulaire).
  • J'ai fait un essai avec les valeurs suivantes
    Pour le rectangle :
    bg.x=63.0; bg.y=57.0;
    hg.x=88.0; hg.y=214.0;
    hd.x=197.0; hd.y=205.0;
    bd.x=212.0; bd.y=66.0;
    Le rectangle de base a pour coordonnées {0,0,100;200)

    Un point M
    m.x=256.0;
    m.y=254.0;
    Je trouve X=170.35 et Y=286.85
    Un autre
    m.x=165.0;
    m.y=120.0;
    Je trouve X = 69.10 et Y = 74.51
    Qu'en penses-tu ?
  • J'en pense que je ne sais pas comment tu te débrouilles, mais que les résultats que tu trouves ne sont pas ceux que tu devrais trouver en utilisant les formules que j'ai données (M le point à redreser, R son image dans le redressement qui amène le quadrilatère rouge sur le rectangle vert) :

    31086
    31087
  • Les mêmes formules à l'oeuvre dans un applet GeoGebra (il est lourd à charger). Vous pouvez bouger M et A,B,C,D.

    <applet name="ggbApplet" code="geogebra.GeoGebraApplet" archive="geogebra.jar"
    codebase="http://jars.geogebra.org/webstart/4.2/unsigned/&quot;
    width="638" height="469">
    <param name="ggbBase64" value="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" />
    <param name="java_arguments" value="-Xmx1024m -Djnlp.packEnabled=true" />
    <param name="cache_archive" value="geogebra.jar, geogebra_main.jar, geogebra_gui.jar, geogebra_cas.jar, geogebra_algos.jar, geogebra_export.jar, geogebra_javascript.jar, jlatexmath.jar, jlm_greek.jar, jlm_cyrillic.jar, geogebra_properties.jar" />
    <param name="cache_version" value="4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0, 4.2.58.0" />
    <param name="showResetIcon" value="false" />
    <param name="enableRightClick" value="false" />
    <param name="errorDialogsActive" value="true" />
    <param name="enableLabelDrags" value="false" />
    <param name="showMenuBar" value="false" />
    <param name="showToolBar" value="false" />
    <param name="showToolBarHelp" value="false" />
    <param name="showAlgebraInput" value="false" />
    <param name="useBrowserForJS" value="true" />
    <param name="allowRescaling" value="true" />
    C'est une appliquette Java créée avec GeoGebra ( www.geogebra.org) - Il semble que Java ne soit pas installé sur votre ordinateur, merci d'aller sur www.java.com
    </applet>
  • Tes textes en vert sont assez difficiles à lire
    Pour le pont 1, j'ai lu 1.82 et 2.3
    Pour le point 2, j'ai lu ??
    A voir demain, je pense que un calcul inverse permettra de résoudre l'ambiguité.
    Bonne soirée.
  • Pour le deuxième, je lis (c'est un peu caché par les coordonnées du point A) : (0.66, 0.63). J'améliore la lisibilité :

    Je ne vois pas d'ambigüité : ce que tu donnes ne correspond pas aux formules de redressement que j'ai indiquées. Les résultats corrects sont ceux qu'on voit sur la figure, un point c'est tout.
    Je me suis contenté de copier-coller les formules données plus haut depuis le logiciel de calcul formel Sage dans GeoGebra (en faisant les changements systématiques de noms de variables nécessaires pour que GeoGebra comprenne).31091
  • Merci beaucoup ! Je traduis ça dans mon langage de programmation et je teste !
  • Pour mon cas c'est impeccable. Tests concluants !
    Merci beaucoup à tous pour votre participation et votre aide dans la discussion ou en MP.
  • Avec plaisir.
Connectez-vous ou Inscrivez-vous pour répondre.
Success message!